Este es un seguimiento de Imprimir una pregunta de laberinto . Si te gusta esta pregunta, agrega más algoritmos de generación de laberintos;).
Para esta tarea, tendrás que implementar un motor de juego para un jugador que debe encontrar el tesoro en un laberinto y salir de la mazmorra.
El motor comienza leyendo el laberinto de la entrada estándar seguido de una línea que contiene un un archivo dado como argumento en la línea de comando. A continuación, el jugador .
(punto)@
se coloca en una ubicación aleatoria en el mapa. Entonces el motor comienza a interactuar con el jugador a través de io estándar:
Comandos del motor al jugador :
continue
: Juego no terminado. Los alrededores están impresos seguidos de a.
. El jugador está representado por el@
personaje. Las celdas no observables están representadas por?
.finished
: Juego terminado. Se imprime el número de pasos y el juego se detiene.
Comandos del jugador al motor :
north
: Mueve al jugador hacia arriba.south
: Mueve al jugador hacia abajo.west
: Mueve el jugador a la izquierda.east
: Mueve el jugador a la derecha.
Cualquier comando no válido (como golpear una pared) del jugador se ignora, pero aún se cuenta. Eres libre de definir los alrededores a tu gusto.
- Puntos por el código más corto.
- Puntos para entornos complejos (por ejemplo, imprima regiones grandes y reemplace las celdas que no son visibles
?
). - No hay puntos para el código que no respeta el formato io
Ejemplo :
En este ejemplo, el entorno se define como la celda 3x3 con el jugador en el medio.
$ cat maze
+-+-+
|#|
| |
+---+
$ python engine.py maze
|#
@
---
.
east
|#|
@|
--+
.
north
+-+
|@|
|
.
south
|#|
@|
--+
.
west
|#
@
---
.
west
|
|@
+--
.
north
+-+
@|
|
.
west
finished
7
Respuestas:
C99, 771 caracteres
Requiere y hace uso de ncurses. Solo una macroización por longitud, y las macros N y M reemplazarán a los operadores mínimos y máximos que faltan, y no creo que haya mucho más que hacer al respecto.
Se supone que el laberinto de entrada no supera los 80 caracteres de ancho y que se ha pasado un nombre de archivo del laberinto en la línea de comandos, y que el número de parámetros es lo suficientemente bajo como para que el valor inicial de c no sea un comando de movimiento.
Se desvía del estándar en que toma comandos de dirección de un solo carácter como la primera letra minúscula de las sugeridas.
Muestra regiones desconocidas como '?' S.
Más legible con comentarios:
fuente