Hoje, estaremos gerando um mapa para um RPG roguelike!
Mapa de exemplo:
##########
#### F#
#### ##
## C#C#
# ## #
# C #E #
#### # #
# #
#P #
##########
#
são paredes, P
é o local de partida do jogador, F
é o acabamento que deve ser alcançado, C
são moedas que podem ser coletadas e E
inimigos que podem ser combatidos.
Especificações do mapa:
- A altura e a largura devem estar entre 10 e 39, inclusive. A altura não precisa ter a mesma largura.
- As bordas dos mapas devem ser preenchidas com paredes.
P
deve ser colocado no canto inferior esquerdo.F
deve ser colocado no canto superior direito.- Deve haver entre 1 e 3 inimigos.
- Deve haver entre 2 e 4 moedas.
- Deve haver alguma quantidade de paredes no meio. Deve haver um caminho para começar a partir
P
de cadaC
,E
eF
, tendo em mente que o jogador não pode se mover na diagonal. - Toda combinação possível deve ter alguma chance de ocorrer.
Regras
- Menos programa de bytes vence.
- Seu programa não deve receber nenhuma entrada.
- Seu programa pode não sair com um erro (a saída não fatal
STDERR
é aceitável, mas não podemos ter nosso travamento desonesto após a geração do mapa!) - Uma única nova linha final é permitida e o espaço final é permitido.
- Nenhuma outra saída é permitida.
code-golf
ascii-art
path-finding
maze
Pavel
fonte
fonte
Respostas:
Perl, 293 bytes
-9 bytes graças a @Dom Hastings
Adicione
-E
sinalizador para executá-lo:No entanto, leva muito tempo para ser executado, então eu recomendo usar esta versão:
Experimente online!
Explicação
Demora muito tempo para ser executado, porque a lista da qual escolhemos aleatoriamente os personagens para colocar no tabuleiro (
@a
) contém 1369 espaços em branco e#
, e apenas 4 moedas e 3 inimigos. Portanto, se o tamanho da largura e da altura for pequeno, haverá muitos espaços e#
comparados à moeda e aos inimigos, portanto, é bem provável que um mapa aleatório não seja válido. É por isso que a versão "otimizada" é mais rápida: a lista da qual escolhemos os caracteres é um pouco maior que o mapa (a lista é@a=((C)x4,(E)x3,("#")x($v=rand $=*$%),($")x($=*$%-$v))
: um número aleatório$v
de#
(inferior ao tamanho do mapa) esize of the map - $v
espaços em branco).fonte
$"
é uma variável Perl legítima, mas o realce da sintaxe não sabe disso, é por isso que parece com isso. Ok, vou excluir o comentário sobre espaços inacessíveis.PHP,
422417415309373369364361 bytesopera em uma string sem quebras de linha; procura caminhos aleatórios entre os extras. Corra com
-r
.Nota: Os caminhos são criados andando em direções aleatórias. A escolha da direção para cada etapa gerará principalmente mapas bem abertos; e é improvável que o mapa de exemplo apareça; mas é possível.
demolir
fonte
<?php .... ?>
E
s.C # (compilador interativo do Visual C #) , 730 bytes
Experimente online!
Ungolfed:
Editar: economizou 8 bytes, tornando-o um pouco menos eficiente, bloqueando o loop de teste acessível do player para 99 iterações. Eu sei que nunca realmente competirei com as outras respostas aqui, mas estou me divertindo!
fonte