Ariadne - un laberinto de persona 1 º en un 16 x 2 LCD (2 / 2 paso)

Paso 2: Software

El código está aquí.
Mayor parte es bastante sencilla. El único digno de mencionar están el algoritmo de generación de laberinto y la forma en que tratamos de dibujar un laberinto rotado.

Generación del laberinto
Estoy usando algoritmo de Kruskal, y ni estoy probando cualquiera de las cosas de lujo Wikipedia sugiere con el fin de optimizarlo. Es lo suficientemente rápido como.

Es bastante simple:

  1. Comenzar con todas las paredes intactas y dar a cada célula un identificador de grupo (puede utilizar el número columna + fila * ancho o cadenas como "R0C0". No importa como son únicos).
  2. Encontrar una pared entre dos células que tienen un grupo diferentes identificadores.
  3. Quitar esa pared.
  4. Unir a los dos grupos: todas las células que tienen el identificador de grupo de la primera célula, ahora tendrá el identificador de grupo de la otra célula.
  5. Pasos 2-4 debe ejecutar veces n-1 (donde n es el número de células).

Al final del proceso, todas las células están conectadas, y hay no hay bucles en el laberinto.

La imagen de abajo muestra cómo las paredes y los identificadores de grupo después de unas cuantas rondas y al final del proceso.

También hay una versión de JavaScript aquí. Usted puede experimentar con él incluso si no tienes un Arduino, y podría ser útil para algún juego JS con que usted puede subir.

La diferencia principal entre el JS y las versiones de Arduino es en JS sólo almacenamos para cada celda si tiene una pared izquierda y si tiene un fondo uno. En el Arduino almacenamos todas las 4 paredes (aunque hay un redunduncy aquí), ya que también tenemos que dibujar las células rotan, y es más fácil si tenemos acceso a todas las paredes de una celda.

Dibujo de un laberinto girado
Definimos 4 direcciones absolutas como 0-4:

byte const norte = 0;
byte const este = 1;
byte const sur = 2;
byte const oeste = 3;

Hay una matriz de rotación que nos ayuda a mapa de arriba/derecha/izquierda/abajo relativa a la absoluta N/E/S/W para una línea específica (rumbo es la dirección absoluta está mirando nuestro personaje):

/ * mapa de rotación: para cada partida, una asignación de filas/cols [delta] [delta] sureste
{abajo -> Sur -> derecha este, abajo -> este, derecha -> Sur} * /
int rotation_map [4] [4] = {}
{1,1,0,0} / / norte: abajo es sur, derecha es este
, {0,0,-1, 1} / / este: abajo es oeste, justo al sur
, {-1,-1.0.0} / / sur: abajo es hacia el norte, derecha es oeste
, {0.0.1, -1} / / oeste: abajo es este, justo al norte
};

Estas son las macros que hacen la asignación real:
#define MAP2SOUTH(heading,row,col) ((row)*rotation_map[heading][0]+(col)*rotation_map[heading][3]) de
#define MAP2EAST(heading,row,col) ((row)*rotation_map[heading][2]+(col)*rotation_map[heading][1])

MAP2SOUTH devuelve la fila absoluta correspondiente a una fila, columna en la pantalla, y MAP2EAST devuelve la columna absoluta.

El resto es auto explicativo (dejen un comentario si acaso todavía no).

Disfrutar,

Artículos Relacionados

Creando tu primera tabla de multi-touch

Creando tu primera tabla de multi-touch

ha pasado mucho tiempo desde que he contribuido a este sitio web, que un año casi, estaba tratando de lograr un objetivo personal que se estaba gestando desde mis primeros años de escuela secundaria. Este instructable ha tomado 2 años de investigació
Proyector de LED de DIY Multimedia (video manual)

Proyector de LED de DIY Multimedia (video manual)

En este Instructable, muestro cómo hacer un proyector de LCD con LED como fuente de luz. He intentado hacer videos de todo por lo que es más fácil seguir los pasos.En de versión en Español de esta este InstructableVer más proyectos interesantes en mi
Truco de repuesto LCD MacBook

Truco de repuesto LCD MacBook

esto es para cualquier persona que necesita para reemplazar su pantalla LCD rota y no tiene tiempo o paciencia para desmontar el portátil entero para desenchufar la alimentación del inversor de luz de fondo. Esto requerirá que dos pequeños puntos de
Teléfono móvil utilizando arduino

Teléfono móvil utilizando arduino

Este es un bajo costo $15 simple móvil que he creado utilizando arduino (casera) y SIM900.due al menos número de pin .i uso dos microcontroladores uno para pantalla y teclado y SIM900 están conectados en serie con cada other.here usted puede llamar a
SCOUT : <p>/*</p><p> * SCOUT : Smart People Counter * Instructables : http://www.instructables.com/member/Geeve+George</p><p>*/</p><p>#include <r

SCOUT : <p>/*</p><p> * SCOUT : Smart People Counter * Instructables : http://www.instructables.com/member/Geeve+George</p><p>*/</p><p>#include <r

src = "HolaTodo el mundo,SoyGeeveGeorgeun15añoantiguoFabricante/electrónicaHobbyist.IamorComputadoraVisión,AndroidDesarrolloyAlgoritmo deDesign.Isoyen la actualidaden11GradoComputadoraCienciaEstudianteenPocoRocaIndioEscuela.:)EncontrarmásAcerca demee
Condensador asimétrico propulsores: el efecto Biefeld-Brown

Condensador asimétrico propulsores: el efecto Biefeld-Brown

En la década de 1920, un joven llamado Thomas Townsend Brown descubrió que si carga un condensador con la corriente directa de alto voltaje, el condensador exhibiría empuje en la dirección de la + electrodo positivo. Y para el resto de su vida (murió
Trastorno de mármol - un simulador laberinto de mármol con tilt switches

Trastorno de mármol - un simulador laberinto de mármol con tilt switches

mármol es un caso límite de la Locura de mármol :)Simula un laberinto de mármol por detección de orientación de la caja con 2 interruptores de inclinación.Detener la prensa: hay una versión nueva y más intuitiva que no requiere la perilla de centrifu
Cubo laberinto... para bebés!

Cubo laberinto... para bebés!

Bloques de madera son una maravillosas para los bebés, pero por lo general son más bien aburridos. Pensé que sería divertido crear algo un poco más mentalmente estimulante, (al menos para los padres.)Cada cara del cubo es grabado con una porción de u
Hacer tu propio laberinto de la bola de K'nex!

Hacer tu propio laberinto de la bola de K'nex!

Es el momento de una vacaciones! Finalmente llegar a dejar la lejanía de Alaska a cumplir su sueño de toda la vida: ser un artista en residencia en la sede de Instructables! Estás tan excitado que lo deje apenas puede contener a sí mismo! Ha estado e
Laberinto de Dremel

Laberinto de Dremel

materiales y herramientas utilizadas:poco de grabado Dremelmadera de 6 "x 9" X 1/2"papel de lija 220Paso 1: La pandillaPaso 1 > obtener un grupo de pensadores creativos no institucionalizadasPaso 2: Tiffany y WalterPaso 1.5 > pedir co
Laberinto de paleta CNC

Laberinto de paleta CNC

un día estaba en la juguetería buscando regalos para mis hijos y me encontré con algunos laberintos de plástico pequeño, sabes, el tipo con las bolas que se intentan conseguir desde el principio hasta el final sin volverme loco. Bingo, aquí fue un pr
Laberinto - de un solo 2 x 4

Laberinto - de un solo 2 x 4

Ser fiscalmente limitada y no uno hacia atrás de un desafío, uno instructable/desafío más reciente de Seamster parece ser mi callejón.Está limitado al uso de solo 2 x 4 (quitase), quería hacer algo diferente, durable, barato y de valor personal para
Laberinto: Cómo diseño y paquete 3 cretense clásico nivel

Laberinto: Cómo diseño y paquete 3 cretense clásico nivel

laberinto: Cómo presentar y empacar un cretino clásico 3 nivel laberinto y por qué.Antes de comenzar me gustaría dedicar este ' Ible a todos los miembros de la comunidad Instructable que han usado la leyenda inmortal "es lo que tenía" en algún l
Caja del rompecabezas laberinto

Caja del rompecabezas laberinto

esto es una caja de rompecabezas. Para abrirlo necesita realizar un determinado gesto y pulsar un botón. El gesto se define por la forma de un laberinto interno de rodamiento de bolas. Usted puede crear fácilmente su propio laberinto y planes de uso