Фон
Мой сын Леонард (4 года) любит лабиринты. Я не знаю, откуда он знает лабиринты, но он рисует их и хорошо знает, как они работают:
Недавно он начал делать игру из своих картин. Это его правила:
- черный квадрат обозначает отправную точку.
- крюк обозначает выход из лабиринта (вот где вас вытащили).
- Вы можете собрать короны.
- Вы можете собирать золотые самородки (круглые вещи).
- Вы можете идти вперед и назад, но не более того.
- стрелки могут вести вас к выходу. (Если он рисует лабиринт для меня, чтобы решить, они часто вводят в заблуждение).
Аннотированная версия:
- синий: отправная точка
- оранжевый: коронки
- желтый: область с золотыми самородками
- зеленый: крюк (выход)
- розовый: стрелки (в основном вводящие в заблуждение)
Задание
Возможно, вы знаете, что в возрасте 4 лет дети начинают рассказывать пирожки со свининой, и иногда он не следует своим собственным правилам, особенно если он узнает, что больше не может дойти до конца лабиринта.
Вот где вы вступаете в игру: так как я в любом случае ищу игры для детей , вы превращаете его идею в игру, где мошенничество невозможно.
Ну, нам нужно еще несколько определений, которые я бы сказал:
- игровое поле представляет собой
n
*m
прямоугольник квадратов одинакового размера. - квадрат может иметь от 0 до 4 стен, по одной на каждой стороне.
- корона стоит 50 баллов.
- золотой самородок стоит 20 очков.
- ходьба по площади, по которой уже ходили, вычитает 1 балл.
- квадраты отмечены таким образом, чтобы определить, как часто игрок ходил по нему (0, 1 или 2 раза)
- игрок может идти в 4 направлениях, кроме случаев, когда есть стена.
- Устройство ввода может быть любым. Пожалуйста, рассмотрите поддержку клавиатуры.
- Лабиринт должен быть разрешимым. Т.е. должна быть возможность добраться до крючка с начальной точки и должна быть возможность собрать все ценности (даже если это не приведет к максимально возможному количеству очков).
- Если игрок застревает, игра заканчивается.
- Игрок не должен умереть, упав с доски. Вы можете положить стену вокруг полного лабиринта или обернуть вокруг краев, что угодно.
- программа принимает аргумент word (0-65535) в качестве входных данных. Это семя для генератора случайных чисел. Повторный вызов программы с тем же семенем приводит к тому же лабиринту.
Бонус:
- рассчитать максимальное количество очков, которые можно собрать. Учтите, что из-за -1 очков лучше не собирать все предметы.
- Показать лучшее решение (кратчайший способ получить максимальное количество очков)
Правила
Это конкурс популярности, так как я хочу уметь читать и понимать код и, возможно, адаптироваться к новым идеям моего сына. Извините, играйте в гольф, возможно, вы хотите создать копию этого вопроса с правилами, более подходящими для игры в гольф, например, консольную версию со всеми определенными персонажами.
Самая популярная игра 3 мая станет принятым ответом. И почему бы не опубликовать его в магазине приложений?
источник
Ответы:
JavaScript
Работа в процессе. К сожалению, лабиринт не всегда решаем - ограничение на движение вперед и назад является настоящим препятствием.
Edit 1 Cosmetic
Edit 2 Лучший игровой процесс, но большая проблема все еще есть
источник
Джава
Я никогда не жаловался на GolfScript или CJam, но в любом случае вот вам ответ на Java. Это был действительно приятный вызов. ;)
В процессе создания настоящего лабиринта используется алгоритм поиска в глубину , но с итеративным подходом. Вот как это работает.
Мы начнем с двумерного массива
int
значений, каждый элемент которого равен -1. Случайный элемент с четными индексами выбирается, и его значение становится равным 0:Затем программа входит в цикл, проверяя наличие доступных ячеек, пока не достигнет состояния, когда нет доступных ячеек. Это может случиться несколько раз, и это когда он начинает отступать. В это время все 0, с которыми это сталкивается, становятся 1 с. Кроме того, в это время определяется, следует ли разместить выход в этом месте. В конце концов, массив может выглядеть так:
Когда в определенных точках массива имеется заранее определенное число 1 или 0, цикл завершается. Затем, используя массив, получим лабиринт:
Легко видеть, что -1 в массиве представляют стены, а 0 и 1 - коридоры. Предметы случайным образом распределены по всему лабиринту. Красный эллипс - это «игрок», которым вы управляете.
Для удобства лабиринт обернут в область прокрутки, поэтому, если размер превышает максимальный размер кадра, вы можете прокрутить его, чтобы увидеть остальную часть лабиринта.
Я бы сказал, что единственная проблема заключается в том, как выполняется проверка конца игры. Я думал о нескольких способах сделать это, но в итоге прибег к жесткому кодированию всего этого. Я открыт для предложений о том, как это можно сделать.
источник
MazeMaker.java:168: error: cannot find symbol printArray(); ^ symbol: method printArray() location: class MazeMaker
printArray
который я использовал для вывода массива, но удалил его и забыл удалить вызов метода.питон
Я понимаю, что опаздываю на вечеринку, но вот мой взгляд на этот вызов. Я изучал тексты, так как еще не дошел до изучения пигмеев. Это Python 3. Измените ввод на raw_input, и он также должен работать в python2.
Крюк (выход) обозначен буквой "J". «W» - коронки (50). «G» - это Золотые самородки (20). Игрок "О". Я экспериментировал с использованием «P» для игрока, но я обнаружил, что «O» легче идентифицировать.
Сначала я использовал стандартную глубину создания лабиринта, затем добавил золото, короны, крючок и текущую позицию игрока. Я не реализовал критерии, по которым можно получить все сокровища.
источник