Este é um acompanhamento da questão Imprimir um labirinto . Se você gostou desta pergunta, adicione mais algoritmos de geração de labirinto;).
Para esta tarefa, você terá que implementar um mecanismo de jogo para um jogador que deve encontrar o tesouro em um labirinto e sair da masmorra.
O mecanismo inicia lendo o labirinto a partir da entrada padrão seguida por uma linha contendo um um arquivo fornecido como argumento na linha de comando. Em seguida, o jogador .
(ponto)@
é colocado em um local aleatório no mapa. Em seguida, o mecanismo começa a interagir com o jogador através do io padrão:
Comandos do mecanismo para o jogador :
continue
: Jogo não concluído. Os arredores são impressos seguidos de a.
. O jogador é representado pelo@
personagem. As células não observáveis são representadas por?
.finished
: Jogo terminado. O número de etapas é impresso e o jogo para.
Comandos do jogador para o mecanismo :
north
: Move o jogador para cima.south
: Move o jogador para baixo.west
: Move o jogador para a esquerda.east
: Mova o jogador para a direita.
Qualquer comando inválido (como bater em uma parede) do jogador é ignorado, mas ainda conta. Você é livre para definir o ambiente ao seu gosto.
- Pontos para o código mais curto.
- Pontos para ambientes complexos (por exemplo, imprima grandes regiões e substitua células que não são visíveis
?
). - Nenhum ponto para o código que não respeita o formato io
Exemplo :
Neste exemplo, o ambiente é definido como a célula 3x3 com o player no meio.
$ cat maze
+-+-+
|#|
| |
+---+
$ python engine.py maze
|#
@
---
.
east
|#|
@|
--+
.
north
+-+
|@|
|
.
south
|#|
@|
--+
.
west
|#
@
---
.
west
|
|@
+--
.
north
+-+
@|
|
.
west
finished
7
Respostas:
C99, 771 caracteres
Requer e utiliza ncurses. Apenas uma macroização para o comprimento, e as macros N e M devem substituir os operadores mínimo e máximo ausentes, e não acho que haja muito mais a fazer sobre isso.
Ele pressupõe que o labirinto de entrada não exceda 80 caracteres de largura e que o nome do arquivo a labirinto tenha sido passado na linha de comando e que o número de parâmetros seja baixo o suficiente para que o valor inicial de c não seja um comando de movimento.
Desvia do padrão, na medida em que recebe comandos de direção de caractere único como a primeira letra minúscula dos sugeridos.
Mostra regiões desconhecidas como '?'.
Mais legível com comentários:
fonte