Сегодня мы создадим карту для ролевых RPG!
Пример карты:
##########
#### F#
#### ##
## C#C#
# ## #
# C #E #
#### # #
# #
#P #
##########
#
Стены, P
начальное местоположение игрока, F
финиш, который должен быть достигнут, C
монеты, которые можно собрать, и E
враги, с которыми можно бороться.
Характеристики карты:
- Высота и ширина должны быть между 10 и 39 включительно. Высота не должна равняться ширине.
- Границы карты должны быть заполнены стенами.
P
должны быть размещены в левом нижнем углу.F
должны быть размещены в верхнем правом углу.- Там должно быть от 1 до 3 врагов.
- Там должно быть от 2 до 4 монет.
- Там должно быть некоторое количество стен в середине. Должен быть путь, чтобы добраться
P
до каждогоC
,E
иF
, имея в виду, что игрок не может двигаться по диагонали. - У каждой возможной комбинации должна быть некоторая вероятность возникновения.
правила
- Побеждает самая маленькая байтовая программа.
- Ваша программа не должна принимать никаких данных.
- Ваша программа может не завершиться с ошибкой (нефатальный вывод в
STDERR
порядке, но у нас не может быть нашего сбоя, подобного мошенническому, после генерации карты!) - Разрешен только один завершающий символ новой строки и завершающий пробел.
- Другие выходы не допускаются.
Ответы:
Perl, 293 байта
-9 байт благодаря @Dom Hastings
Добавьте
-E
флаг для запуска:Однако запуск занимает много времени, поэтому я рекомендую использовать эту версию:
Попробуйте онлайн!
объяснение
Запуск занимает много времени, потому что список, из которого мы случайным образом выбираем символы для размещения на доске (
@a
), содержит 1369 пробелов и#
, и только 4 монеты и 3 врага. Так что, если размеры ширины и высоты невелики, есть много мест#
по сравнению с монетой и врагами, так что вполне вероятно, что случайная карта не будет действительной. Вот почему «оптимизированы» версия быстрее: список , из которого мы выбираем символы просто немного больше , чем карта (список@a=((C)x4,(E)x3,("#")x($v=rand $=*$%),($")x($=*$%-$v))
: случайное число$v
из#
(ниже размера карты), иsize of the map - $v
пробелы).источник
$"
является допустимой переменной Perl, но подсветка синтаксиса не знает об этом, поэтому выглядит так. Хорошо, я удалю комментарий о недоступных местах.PHP,
422417415309373369364361 байтработает со строкой без разрывов строк; копает случайные пути между статистами. Беги с
-r
.Примечание . Пути создаются путем случайного направления. Выбор направления для каждого шага будет в основном генерировать карты, которые широко открыты; и пример карты вряд ли появится; но это возможно.
сломать
источник
<?php .... ?>
E
s.C # (интерактивный компилятор Visual C #) , 730 байт
Попробуйте онлайн!
Ungolfed:
Изменить: сохранил 8 байт, сделал его немного менее эффективным, заблокировав доступный игроку цикл тестирования до 99 итераций. Я знаю, что это никогда не будет конкурировать с другими ответами здесь, но я получаю удовольствие!
источник