Fork me on GitHub

Laberintos con Python

February 8, 2013

Una de las primeras cosas que hice con Tkinter es este sencillo juego de laberinto en el que hay que llegar a la salida en la menor cantidad de movidas posibles. Lo interesante del juego es el algoritmo para generar laberintos al azar. No es mío, lo saqué de Wikipedia. El algoritmo se llama depth-first search. Es genial porque parte de la base de que inicialmente todas las celdas del tablero son paredes. Entonces el algoritmo se resume a esto:

  1. Empezar por una celda cualquiera y llamarla "Salida".
  2. Marcar la celda como visitada y obtener la lista de sus vecinas. Por cada vecina aleatoriamente:
    • Si la celda no ha sido visitada, remover la pared entre ambas y volver al punto 2 con la celda vecina como actual.
Laberinto

El juego permite generar laberintos de distintos tamaños

$ ./maze.py --width=201 --height=141 --size=5

Y obtener algo como esto.

También hice una versión para consola que genera laberintos con caracteres (no es jugable, sólo genera laberintos).

$ python procedural_maze_gen.py -W 21 -H 21 --verbose
# # # # # # # # # # # # # # # # # # # # #
#   #               #               #   #
#   #   #   # # #   # # # # #   #   #   #
#       #       #               #       #
#   # # # # #   # # # # # # # # # # #   #
#   #       #           #           #   #
#   #   # # # # # # #   # # #   #   #   #
#       #               #       #   #   #
# # # # #   # # # # # # #   # # # # #   #
#           #           #       #       #
#   # # # # #   # # #   #   #   #   # # #
#   #       #       # A #   #   #       #
#   # # #   #   #   # # #   #   # # #   #
#       #       #   #       #           #
#   #   # # # # #   #   # # # # # # #   #
#   #           #           #       #   #
#   # # # # #   #   # # # # #   #   # # #
#   #       #   #       #       #       #
#   #   #   #   # # # # #   # # # # #   #
#       #   #                       # B #
# # # # # # # # # # # # # # # # # # # # #
Steps from A to B: 128

Juegos Python Trabajos