Total Recall - Arduino Simon Says en esteroides! (4 / 6 paso)

Paso 4: Codificación del juego de 2 jugadores.

Para el jugador 2 el código juego decidí que sería mejor construir como su propio bosquejo y luego integrarlo en el bosquejo principal. Esto me permitió solucionar más fácilmente problemas que encontré. Yo había sido rebotando ideas para el código en mi cabeza para los últimos días. Así que sabía lo que sería el flujo general del código. Pero tomó 4 horas rectas de codificación para finalmente conseguirlo para trabajar. Siempre me sorprende cómo los pequeños errores pueden causar tantos problemas. Incluso el extravío de una sola línea al principio de una función cuando se trabaja mejor el final puede causar tales problemas.

Decidí seguir adelante e incluir el código del juego 2 player standalone. El código no es tan refinado y puede ser un poco buggy. Pero sólo fue significado como una plantilla para levantarse la opción de 2 jugadores y el funcionamiento. No tenía sentido en las refinerías cuando iba a ser copiado al código principal de todos modos. Comencé con el juego de Simon Says de mi otros Instructable y había construido el juego de 2 jugadores a partir de allí después de eliminar innecesario código como la mayoría de la parte de audio del código y pide serial.

#include < Tone.h > //call a la biblioteca de tono
#include < LiquidCrystal.h > //call a LiquidCrustal biblioteca

Tono speakerpin; permite que el altavoz

LiquidCrystal lcd (13, 12, 16, 17, 18, 19); Pins para pantalla LCD

botón Boolean [] = {2, 3, 4, 5}; Los cuatro botón pines de entrada
ledpin Boolean [] = {8, 9, 10, 11};  Pasadores LED

int vuelta = 0;

int buttonstate = 0;  Comprobador de estado de botón
randomArray int [100]; Intencionalmente de largo para almacenar hasta 100 entradas (dudoso que nadie conseguirá esto ahora)
int inputArray [100];  utilizado para el control de botón empuja contra la matriz
int jugador = 1;
progreso de int = 0;

void setup()
{
LCD.Begin (16, 2);
speakerpin.Begin(6); es en el pin 13

para (int x = 0; x < 4; x ++) / / LED alfileres son salidas
{
pinMode (ledpin [x], salida);
}

para (int x = 0; x < 4; x ++)
{
pinMode (botón [x], INPUT);  botón pines son entradas
digitalWrite (botón [x], HIGH);  permiten pullup interna; botones de inicio en posición alta; lógica invertida
}
LCD.Clear();
}

void loop()
{
LCD.Clear();
Si (jugador == 1)
{
lcd.setCursor(0,0);
LCD.Print ("jugador 1!");
}
Si (jugador == 2)
{
lcd.setCursor(0,0);
LCD.Print ("jugador 2!");


}
lcd.setCursor(0,1);
LCD.Print ("Seleccione un botón");
Delay(150);
para (int v = 0; v < 4; v ++)
{

ButtonState = digitalRead(button[v]);



Si (buttonstate == baja & & botón [v] == 2)
{//Checking para pulsar botón
digitalWrite (ledpin [0], HIGH);
speakerpin.Play (NOTE_G3, 100);
Delay(500);
digitalWrite (ledpin [0], LOW);
randomArray [progreso] = 1;

Si (jugador == 1)
{
reproductor ++;
progreso ++;
Delay(500);
Output();
retorno;
}
Si (jugador == 2)
{
jugador--;
progreso ++;
Delay(500);
Output();
retorno;
}

}
Si (buttonstate == baja & & botón [v] == 3)
{
digitalWrite (ledpin [1], HIGH);
speakerpin.Play (NOTE_A3, 100);
Delay(200);
digitalWrite (ledpin [1], LOW);
randomArray [progreso] = 2;

Si (jugador == 1)
{
reproductor ++;
progreso ++;
Delay(500);
Output();
retorno;
}
Si (jugador == 2)
{
jugador--;
progreso ++;
Delay(500);
Output();
retorno;
}

}

Si (buttonstate == baja & & botón [v] == 4)
{
digitalWrite (ledpin [2], HIGH);
speakerpin.Play (NOTE_B3, 100);
Delay(200);
digitalWrite (ledpin [2], LOW);
randomArray [progreso] = 3;

Si (jugador == 1)
{
reproductor ++;
progreso ++;
Delay(500);
Output();
retorno;
}
Si (jugador == 2)
{
jugador--;
progreso ++;
Delay(500);
Output();
retorno;
}

}

Si (buttonstate == baja & & botón [v] == 5)
{
digitalWrite (ledpin [3], HIGH);
speakerpin.Play (NOTE_C4, 100);
Delay(200);
digitalWrite (ledpin [3], LOW);
randomArray [curso] = 4;

Si (jugador == 1)
{
reproductor ++;
progreso ++;
Delay(500);
Output();
retorno;
}
Si (jugador == 2)
{
jugador--;
progreso ++;
Delay(500);
Output();
retorno;
}

}

}
}

void output()
{
LCD.Clear();
Si (jugador == 1)
{
lcd.setCursor(0,0);
LCD.Print ("jugador 1");
}
Si (jugador == 2)
{
lcd.setCursor(0,0);
LCD.Print ("jugador 2");
}
lcd.setCursor(0,1);
LCD.Print ("ver las luces");
Delay(1000);
para (int x = 0; x < = vuelta; x ++)
{


para (int y = 0; y < 4; y ++)
{

Si (randomArray [x] == 1 & & ledpin [y] == 8)
{sentencias //if para mostrar los valores almacenados en la matriz
digitalWrite (ledpin [y], HIGH);
speakerpin.Play (NOTE_G3, 100);
Delay(400);
digitalWrite (ledpin [y], LOW);
Delay(100);
}
Si (randomArray [x] == 2 & & ledpin [y] == 9)
{
digitalWrite (ledpin [y], HIGH);
speakerpin.Play (NOTE_A3, 100);
Delay(400);
digitalWrite (ledpin [y], LOW);
Delay(100);
}

Si (randomArray [x] == 3 & & ledpin [y] == 10)
{
digitalWrite (ledpin [y], HIGH);
speakerpin.Play (NOTE_B3, 100);
Delay(400);
digitalWrite (ledpin [y], LOW);
Delay(100);
}

Si (randomArray [x] == 4 & & ledpin [y] == 11)
{
digitalWrite (ledpin [y], HIGH);
speakerpin.Play (NOTE_C4, 100);
Delay(400);
digitalWrite (ledpin [y], LOW);
Delay(100);
}
}
}
INPUT2();
}

void input2() {//Function para permitir la entrada del usuario y comprobación de entrada contra la matriz generada
LCD.Clear();
Si (jugador == 1)
{
lcd.setCursor(0,0);
LCD.Print ("jugador 1");
}
Si (jugador == 2)
{
lcd.setCursor(0,0);
LCD.Print ("jugador 2");
}
lcd.setCursor(0,1);
LCD.Print "(secuencia de la repetición del);
Delay(150);

para (int x = 0; x < = vuelta;)
{//Statement controlado por girar a la cuenta

para (int y = 0; y < 4; y ++)
{

ButtonState = digitalRead(button[y]);

Si (buttonstate == baja & & botón [y] == 2)
{//Checking para pulsar botón
digitalWrite (ledpin [0], HIGH);
speakerpin.Play (NOTE_G3, 100);
Delay(200);
digitalWrite (ledpin [0], LOW);
inputArray [x] = 1;
Delay(250);

Si (inputArray [x]! = randomArray[x]) {entrada de valor //Checks por el usuario y los controles contra
FAIL();                              el valor en el mismo lugar en la matriz generada
} Se llama función de fail //The si no coincide con
x ++;

}
Si (buttonstate == baja & & botón [y] == 3)
{
digitalWrite (ledpin [1], HIGH);
speakerpin.Play (NOTE_A3, 100);
Delay(200);
digitalWrite (ledpin [1], LOW);
inputArray [x] = 2;
Delay(250);

Si (inputArray [x]! = {randomArray[x])}
FAIL();
}
x ++;

}

Si (buttonstate == baja & & botón [y] == 4)
{
digitalWrite (ledpin [2], HIGH);
speakerpin.Play (NOTE_B3, 100);
Delay(200);
digitalWrite (ledpin [2], LOW);
inputArray [x] = 3;
Delay(250);

Si (inputArray [x]! = {randomArray[x])}
FAIL();
}
x ++;

}

Si (buttonstate == baja & & botón [y] == 5)
{
digitalWrite (ledpin [3], HIGH);
speakerpin.Play (NOTE_C4, 100);
Delay(200);
digitalWrite (ledpin [3], LOW);
inputArray [x] = 4;
Delay(250);

Si (inputArray [x]! = randomArray[x])
{
FAIL();
}
x ++;

}
}
}
Delay(500);
a su vez ++; Aumenta la cuenta a su vez, también la última acción antes de iniciar la función de salida de nuevo
Loop();
}

void fail() {//Function utilizado si el jugador no coincide con la secuencia
LCD.Clear();
Si (juego == 2 & & jugador == 1)
{
lcd.setCursor(0,0);
LCD.Print ("jugador 1!");
}
Si (juego == 2 & & jugador == 2)
{
lcd.setCursor(0,0);
LCD.Print ("jugador 2!");
}
lcd.setCursor(0,1);
LCD.Print ("te suelto!");
Delay(150);

para (int y = 0; y < = 2; y ++)
{//Flashes de luces para el fracaso

digitalWrite (ledpin [0], HIGH);
digitalWrite (ledpin [1], HIGH);
digitalWrite (ledpin [2], HIGH);
digitalWrite (ledpin [3], HIGH);
speakerpin.Play (NOTE_G3, 300);
Delay(200);
digitalWrite (ledpin [0], LOW);
digitalWrite (ledpin [1], LOW);
digitalWrite (ledpin [2], LOW);
digitalWrite (ledpin [3], LOW);
speakerpin.Play (NOTE_C3, 300);
Delay(200);
}
Delay(500);
para (int x = 0; x < 100; x ++) //clears matriz
{
randomArray [x] = 0;
}
progreso = 0;
jugador = 1;
vuelta = -1; Restablece gire valor para que el juego se inicia sin necesidad de un botón de reset
}

Si decides probar este código tenga en cuenta que puede haber algunos errores. Los tonos de los botones/LED existen pero no son todas las canciones y tonos.

Artículos Relacionados

Arduino Simon Says

Arduino Simon Says

en este Instructable te voy a mostrar cómo hacer un juego muy simple "Simon dice" usando un regulador Micro de Arduino. Primero comenzó este proyecto en 2010 y no recogió otra vez desde entonces. Mucho ha cambiado en el mundo de Arduino desde al
Arduino Simon Say

Arduino Simon Say

esta es mi versión de Arduino Simon SayNecesitarás:6 x 220 ohm resistencias3 X leds, uno para cada color, verde, rojo, amarillo3 X presionar botones1 X ArduinoAlgunos cablesPaso 1: Diagrama de circuitos 5 voltios pasan a través de los botones para lo
Crear tu propio juego de Simon Says y Arduino DIY Electro masa!

Crear tu propio juego de Simon Says y Arduino DIY Electro masa!

Para empezarEl objetivo de este Instructable es convertir a la masa del electro en un botón capacitivo del tacto con Arduino utilizando la librería de arduino CapSense y luego usarlo para crear un Simon Says juego. Utilizaremos un botón de arranque c
Simon Says con LEDs y sonido

Simon Says con LEDs y sonido

Hola y Bienvenidos de nuevo a Instructables!Todos muchos de nosotros han jugado Simon Says donde inevitablemente te encuentras saltando alrededor en un pie mientras elefante ruidos y te preguntas a ti mismo por qué nunca fue una buena idea de decir "
Arduino Simon dice juego de

Arduino Simon dice juego de

Este es un divertido proyecto que hice con mis hijos durante las vacaciones.Para este juego la casa decidí usar una vieja caja de iPhone 5c. Lo tenía justo ahí y parecía del tamaño adecuado.Lista de componentes:(Nota: todos los enlaces son productos
Simon Says game

Simon Says game

He creado un juego de memorias electrónicas en el estilo del "Simon Says" (un icono de los años 70). Basado en un ARM cortex M0 microcontrolador. Usted encontrará un manual detallado de construcción, esquemas y código fuente en mi sitio Web. Tam
Juego de Simon Says interactivo

Juego de Simon Says interactivo

no recuerdo bien cómo es este juego evolucionado pero la principal motivación detrás de él mejorar el procesamiento cognitivo y la atención por que los jugadores se centran en una secuencia de golpes de tambor y luego repetir esa secuencia. Los jugad
El Digital de la vida - Total Recall a través de la exploración

El Digital de la vida - Total Recall a través de la exploración

el año pasado perdí todo, folletos se habían ido antes de que incluso consiguieran desmayados y mis tareas completadas fueron las reencarnaciones de Houdini escapando siempre mis carpetas en el último segundo.  Este año para combatir que estoy decidi
Arduino Simón dice

Arduino Simón dice

Cuando era niño siempre he amado mucho mis padres odiaban el juego de Simon Says, utilizando un arduino simple, algunos LEDs, resistencias, pulsadores y un piezo que podemos hacerlo nosotros mismos! Probado y diseñado este circuito usando circuitos 1
Juego de rápido y fácil Simon

Juego de rápido y fácil Simon

No hay puentes! SIN cables! SIN soldar! NO protoboard!Pensando fuera de la caja.Por lo que quiere mostrar su microcontrolador en concierto con algunos modelos periféricos adicionales muy rápido, antes que amigos o pariente están en camino...Puesto en
Hacer un juego SNES controlador basado en Arduino

Hacer un juego SNES controlador basado en Arduino

en este instructable, le mostraré cómo un controlador SNES, enganchar a un Arduino y un simple Simon Says juego.Esto podría ser usado para crear un juego más complejo, o tal vez incluso tratar de hacer un Arduino basado en mini-console.  Finalmente,
3 x 3 x 3 cubo del LED con Arduino Lib

3 x 3 x 3 cubo del LED con Arduino Lib

hay otros Instructables sobre la construcción de cubos de LED, éste es diferente por varias razones:1. se construye con un bajo número de componentes estándares y ganchos directamente a Arduino.2. una clara, fácil de reproducir circuito diagrama está
Simon dice juego con controlador único "twister"

Simon dice juego con controlador único "twister"

hice este proyecto para un proyecto de clase Final en mi clase de tecnologías de fabricación de este pasado semestre. El objetivo de este proyecto es hacer un control pad de tablero del twister para cualquier juego makey makey. Usé mi tablero de cont
Total apoyo de pistola Grapple recordar

Total apoyo de pistola Grapple recordar

este no es un apoyo muy bueno. hace base en sólo trailer de total recall. No sé exactamente lo que parece.Espero que disfruten y gracias por ver.Voy a intentar mejorar mi habilidad cada vez que hago videos.