¡Hoy generaremos un mapa para un juego de rol roguelike!
Mapa de ejemplo:
##########
#### F#
#### ##
## C#C#
# ## #
# C #E #
#### # #
# #
#P #
##########
#
son paredes, P
es la ubicación inicial del jugador, F
es el final al que se debe llegar, C
son monedas que se pueden recoger y E
son enemigos que se pueden combatir.
Especificaciones del mapa:
- La altura y el ancho deben estar entre 10 y 39, inclusive. La altura no tiene que ser igual al ancho.
- Los bordes de los mapas deben rellenarse con paredes.
P
debe colocarse en la esquina inferior izquierda.F
debe colocarse en la esquina superior derecha.- Debe haber entre 1 y 3 enemigos.
- Debe haber entre 2 y 4 monedas.
- Debe haber una cierta cantidad de paredes en el medio. Debe haber un camino para llegar desde
P
a cadaC
,E
yF
, teniendo en cuenta que el jugador no puede moverse en diagonal. - Cada combinación posible debería tener alguna posibilidad de ocurrir.
Reglas
- El programa de pocos bytes gana.
- Su programa no debe tomar ninguna entrada.
- Es posible que su programa no salga con un error (la salida no fatal es
STDERR
está bien, ¡pero no podemos tener nuestro bloqueo deshonesto después de la generación del mapa!) - Se permite una nueva línea final y se permite espacio final.
- No se permite ninguna otra salida.
code-golf
ascii-art
path-finding
maze
Pavel
fuente
fuente
Respuestas:
Perl, 293 bytes
-9 bytes gracias a @Dom Hastings
Agregar
-E
bandera para ejecutarlo:Sin embargo, lleva mucho tiempo ejecutarlo, por lo que recomiendo usar esta versión en su lugar:
Pruébalo en línea!
Explicación
Tarda mucho tiempo en ejecutarse, porque la lista de la que elegimos al azar los personajes para poner en el tablero (
@a
) contiene 1369 espacios en blanco y#
, y solo 4 monedas y 3 enemigos. Entonces, si el tamaño del ancho y la altura son pequeños, hay muchos espacios y en#
comparación con la moneda y los enemigos, por lo que es muy probable que un mapa aleatorio no sea válido. Es por eso que la versión "optimizada" es más rápida: la lista de la que elegimos los caracteres es un poco más grande que el mapa (la lista es@a=((C)x4,(E)x3,("#")x($v=rand $=*$%),($")x($=*$%-$v))
: un número aleatorio$v
de#
(inferior al tamaño del mapa) ysize of the map - $v
espacios en blanco).fuente
$"
es una variable Perl legítima, pero el resaltado de sintaxis no lo sabe, por eso se ve así. Ok, eliminaré el comentario sobre espacios inalcanzables.PHP,
422417415309373369364361 bytesopera en una cadena sin saltos de línea; cava caminos aleatorios entre los extras. Corre con
-r
.Nota: Los caminos se crean caminando en direcciones aleatorias. La elección de la dirección para cada paso generará principalmente mapas abiertos; y es muy poco probable que aparezca el mapa de ejemplo; Pero es posible.
Descompostura
fuente
<?php .... ?>
E
s.C # (compilador interactivo de Visual C #) , 730 bytes
Pruébalo en línea!
Sin golf:
Editar: ahorró 8 bytes, lo hizo un poco menos eficiente al bloquear el bucle de prueba accesible del jugador a 99 iteraciones. Sé que nunca competirá con las otras respuestas aquí, ¡pero me estoy divirtiendo!
fuente