Ну, я прошел через многие сайты, обучая их решению, но задавался вопросом, как его создать. Меня не интересуют аспекты кодирования, но хотелось узнать больше об алгоритмах, стоящих за ним. Например, когда сетка генерируется с 10 минами или около того, я бы использовал любую случайную функцию для распределения по сетке, но опять же, как мне установить связанные с ней числа и решить, какое окно нужно открыть? Я не мог создать какой-либо общий алгоритм, как бы я мог это сделать.Каков алгоритм построения тральщика?
ответ
Возможно, что-то в линиях:
grid = [n,m] // initialize all cells to 0
for k = 1 to number_of_mines
get random mine_x and mine_y where grid(mine_x, mine_y) is not a mine
for x = -1 to 1
for y = -1 to 1
if x = 0 and y = 0 then
grid[mine_x, mine_y] = -number_of_mines // negative value = mine
else
increment grid[mine_x + x, mine_y + y] by 1
Это в значительной степени это ...
** EDIT **
Поскольку этот алгоритм мог свинца в создании с некоторыми минами, сгруппированными слишком много друг с другом, или, что еще хуже, очень рассредоточенными (таким образом, скучно решить), вы можете добавить дополнительную проверку при создании mine_x
и mine_y
номер. Например, чтобы гарантировать, что по крайней мере 3 соседние клетки не являются минами, или, возможно, даже в пользу ограничения количества шахт, которые находятся слишком далеко друг от друга, и т.д.
** UPDATE **
I «Мы взяли на себя смелость сыграть немного с JS bin, придумали функциональный Minesweeper game demo. Это просто продемонстрировать алгоритм, описанный в этом ответе. Я не оптимизировал случайность сгенерированной позиции шахты, поэтому некоторые игры могут быть невозможными или слишком легкими. Кроме того, нет никакой проверки относительно того, сколько мин есть в сетке, так что вы можете создать сетку 2 на 2 с 1000 минами .... но это приведет только к бесконечному циклу :) Наслаждайтесь!
Это будет увеличиваться на вершине уже размещенных мин, поэтому вы хотите, чтобы мины были представлены число, которое было достаточно отрицательным, чтобы оно не увеличивалось до нуля, как my = -20. Тогда каждое отрицательное число - это мое. –
измененный ответ, чтобы быть более точным –
У меня нет проблем с размещением мин, но как мне получить эти числа, которые являются подсказками для идентификации мин? Я не знаю, на что – Rahul
Вы просто семена мин, и после этого вы пересекаете каждую ячейку и считаете соседние мины.
Или вы устанавливаете каждый счетчик на 0 и с каждой посевной шахтой, вы увеличиваете все соседние счетчики ячеек.
Если вы хотите разместить m
шахты на квадратах N
, и у вас есть доступ к генератору случайных чисел, вы просто пройдете через оставшиеся квадраты и для каждого квадратного вычисления (осталось # мин)/(осталось # квадратов) и поместите шахта, если ваше случайное число равно или ниже этого значения.
Теперь, если вы хотите, чтобы маркировать каждый квадрат с числом соседних шахт, вы можете просто сделать это прямо:
count(x,y) = sum(
for i = -1 to 1
for j = -1 to 1
1 if (x+i,y+j) contains a mine
0 otherwise
)
или если вы предпочитаете вы можете начать с массивом нулей и увеличиваем каждый по одному в квадрате 3x3, у которого есть шахта в центре. (Это не мешает номеру квадратов с минами.)
Это производит чисто случайную и правильно аннотированную игру тральщика. Однако некоторые случайные игры могут быть не забавными играми; выбор случайных, но веселых игр - гораздо более сложная задача.
Я могу создать сетку и использовать любую случайную функцию для размещения мин, но задача впереди, когда я пытаюсь связать цифры с этими минами, у меня есть идея о том, как это делать. – Rahul
Я предоставил псевдокод (без проверки границ), который делает именно это. (Обратите внимание на сумму - вы добавляете 9 значений, которые равны 1 или 0 в зависимости от того, есть ли там шахта.) –
- 1. Очень медленный алгоритм рекурсивного тральщика в Swift
- 2. Алгоритм построения неравенства
- 3. Алгоритм построения диаграммы дерева
- 4. Алгоритм построения дерева дерева
- 5. Случайный алгоритм построения
- 6. Алгоритм построения многоугольной сетки
- 7. Алгоритм плавного построения (Java2d)
- 8. Алгоритм построения схем (метро)
- 9. Гауссовский алгоритм построения кривой
- 10. Алгоритм построения пирамиды с квадратами
- 11. простой алгоритм построения с автомасштабированием
- 12. Алгоритм построения моста в Java?
- 13. функция обнаружения тральщика python
- 14. Перезапуск программы таймера тральщика
- 15. Создание тральщика игра
- 16. Каков алгоритм Robocopy?
- 17. Каков алгоритм сна()?
- 18. Каков правильный алгоритм обнаружения сегментов линейной диаграммы?
- 19. Определите переменную в игре тральщика.
- 20. Создание управления пользовательским интерфейсом тральщика?
- 21. Алгоритм построения графа из множества точек
- 22. Алгоритм построения графа, заданный бесконечным ходом
- 23. Алгоритм построения линии с толщиной/шириной
- 24. Алгоритм программирования схемы построения сети snmp
- 25. Алгоритм Дейкстры на пути построения Python
- 26. Алгоритм построения массива на основе Gomoku?
- 27. алгоритм извлечения для построения правил пролога
- 28. Алгоритм построения графика DeBruijn дает неправильные результаты
- 29. Самый простой алгоритм построения Вороного для реализации?
- 30. Дейкстры Алгоритм Построения с SQL и PHP
Каждая шахта должна просто увеличивать каждую соседнюю ячейку, которая не является моей. – cthom06
, который решает для всех, но как насчет 3 и 4. как я буду включать эти цифры. если способ, которым я разбираюсь, работает только для одиночных – Rahul
Возможный дубликат [Алгоритм Minesweeper] (http: // stackoverflow.com/questions/1738128/minesweeper-algorithm) – BoltClock