2016-06-05 7 views
-1

есть проблема. Я делаю игру с заполняющим словом. И мне нужно реализовать генерацию случайного уровня. Уровни теперь кажутся статическими. Как я могу это реализовать? Помогите мне пожалуйста ... уровни Теперь посмотрим, как это -Создание игрового поля для заполнения

var rooms = { 
    board: [ 
    [ 'U', 'C', 'W', 'G', 'U', 'B', 'T', 'Z', 'Y', 'K', 'C', 'T' ], 
    [ 'K', 'B', 'N', 'A', 'Z', 'B', 'U', 'J', 'L', 'I', 'D', 'J' ], 
    [ 'I', 'J', 'S', 'R', 'I', 'A', 'A', 'H', 'A', 'L', 'L', 'D' ], 
    [ 'T', 'L', 'B', 'A', 'C', 'T', 'P', 'V', 'U', 'H', 'T', 'R' ], 
    [ 'C', 'O', 'L', 'G', 'O', 'H', 'A', 'W', 'N', 'O', 'V', 'C' ], 
    [ 'H', 'U', 'A', 'E', 'U', 'R', 'R', 'V', 'D', 'U', 'I', 'N' ], 
    [ 'E', 'V', 'T', 'T', 'V', 'O', 'T', 'O', 'R', 'S', 'N', 'U' ], 
    [ 'N', 'E', 'W', 'N', 'W', 'O', 'M', 'F', 'Y', 'E', 'H', 'R' ], 
    [ 'A', 'B', 'A', 'S', 'E', 'M', 'E', 'N', 'T', 'U', 'U', 'S' ], 
    [ 'A', 'T', 'T', 'I', 'C', 'Y', 'N', 'Q', 'A', 'U', 'J', 'E' ], 
    [ 'O', 'C', 'U', 'Y', 'Y', 'E', 'T', 'X', 'C', 'Z', 'O', 'R' ], 
    [ 'B', 'E', 'D', 'R', 'O', 'O', 'M', 'X', 'M', 'Q', 'X', 'Y' ] 
    ], 
words: [ 
"HOUSE", 
"BATHROOM", 
"BEDROOM", 
"KITCHEN", 
"ATTIC", 
"BASEMENT", 
"APARTMENT", 
"GARAGE", 
"HALL", 
"NURSERY", 
"LAUNDRY", 
] 
}; 

Может кому-то помочь? Существует сборка игры - http://rakapudl.github.io/fillword/

+1

Это не так просто. Вы не можете просто генерировать случайный массив. Вам нужно проверить, что игра действительна (все слова доступны для отметки). –

ответ

2

Существует большая библиотека javascript https://github.com/bunkat/wordfind с множеством функций, которые могут понадобиться вам в будущем. Для того, чтобы решить вашу проблему вам нужна только две функции из этой библиотеки:

1) Сформировать правильную таблицу из данных слов

2) Получить решение, чтобы люди могли узнать слова, которые они не нашли.

Для создания таблицы вам необходимо будет изменить функцию печати, так что это выглядит следующим образом:

populate: function (puzzle) { 
    let table = []; 
    for (var i = 0, height = puzzle.length; i < height; i++) { 
     var row = puzzle[i]; 
     let rowUpperCase = row.map((letter) => { 
     return letter.toUpperCase(); 
     }); 
     table.push(rowUpperCase);  
    } 

    return table; 
    } 

Нам нужно заглавными буквами каждое письмо, потому что они в нижнем регистре по умолчанию.

Чтобы получить решение, нам также необходимо принять метод решения для вашего случая.

solve: function (puzzle, words) { 
    var options = { 
        height:  puzzle.length, 
        width:  puzzle[0].length, 
        orientations: allOrientations, 
        preferOverlap: true 
        }, 
     found = []; 

    for(var i = 0, len = words.length; i < len; i++) { 
     var word = words[i], 
      locations = findBestLocations(puzzle, options, word); 

     if (locations.length > 0 && locations[0].overlap ===  word.length) { 
     locations[0].word = word; 

     if (locations[0].orientation == 'vertical') { 
      found.push(
      locations[0].x, 
      locations[0].y, 
      locations[0].x, 
      locations[0].y+locations[0].word.length -1 
     ); 
     } 

     if (locations[0].orientation == 'horizontal') { 
      found.push(
      locations[0].x, 
      locations[0].y, 
      locations[0].x +locations[0].word.length -1 , 
      locations[0].y 
     ); 
     } 
     } 
    } 
    return found; 
    } 

Итак, теперь вы можете иметь вас таблица генерируется как этот

table = populate(words); 

И решение будет

solve = solve(puzzle, words); 

Вот так!

Смежные вопросы