Étape 4: Codage le jeu à 2 joueurs.
Pour le joueur 2 le code jeu j’ai décidé qu'il serait préférable de générer en tant que ses propres croquis, puis vous l’intégrez dans le sketch principal. Cela m’a permis de résoudre plus facilement les éventuels problèmes, sur que je suis tombé. J’avais été rebondir autour des idées pour le code dans ma tête pour les deux derniers jours. Donc, j’ai su quel serait le débit général du code. Mais il a fallu 4 heures d’affilée du codage pour enfin faire fonctionner. Cela m’étonne toujours comment les erreurs littlest peuvent causer tant de problème. Même le déplacement d’une seule ligne au début d’une fonction lorsque cela fonctionnerait mieux à la fin peut provoquer ce genre de problèmes.J’ai décidé d’aller de l’avant et d’inclure le code du jeu 2 joueur autonome. Le code n’est pas aussi raffiné et peut-être un peu bogué. Mais il ne devait pas comme un modèle pour lever l’option 2 joueur et en cours d’exécution. Il ne servait à raffiner quand ça allait être copiés dans le code principal de toute façon. J’ai commencé avec le jeu de Simon Says de mes autre Instructable et construit le jeu à 2 joueurs de là après avoir enlever les code comme la plupart de la partie audio du code et des appels de série.
#include < Tone.h > //call à la bibliothèque de ton
#include < LiquidCrystal.h > //call LiquidCrustal bibliothèqueTon speakerpin ; permet à l’orateur
Innovente lcd (13, 12, 16, 17, 18, 19) ; broches pour écran LCD
bouton booléen [] = {2, 3, 4, 5} ; Les broches d’entrée quatre boutons
ledpin Boolean [] = {8, 9, 10, 11} ; Broches de la LEDTournez int = 0 ;
buttonstate int = 0 ; vérificateur d’État bouton
int randomArray [100] ; Intentionnellement de long pour stocker jusqu'à 100 entrées (douteux n’importe qui obtiendra ce jour)
int inputArray [100] ; utilisé pour le contrôle bouton pousse contre le tableau
int joueur = 1 ;
cours int = 0 ;void setup()
{
LCD.Begin (16, 2) ;
speakerpin.Begin(6) ; le Président est sur la broche 13
pour (int x = 0; x < 4; x ++) / / LED broches sont sorties
{
pinMode (ledpin [x], sortie) ;
}
pour (int x = 0; x < 4; x ++)
{
pinMode (bouton [x], entrée) ; broches de bouton sont entrées
digitalWrite (bouton [x], HIGH) ; activez pullup interne ; touches démarrer en position haute ; logique inversée
}
LCD.Clear() ;
}void loop()
{
LCD.Clear() ;
Si (joueur == 1)
{
lcd.setCursor(0,0) ;
LCD.Print ("joueur 1!") ;
}
Si (joueur == 2)
{
lcd.setCursor(0,0) ;
LCD.Print ("joueur 2!") ;
}
lcd.setCursor(0,1) ;
LCD.Print ("choisissez un bouton") ;
Delay(150) ;
pour (v int = 0; v < 4; v ++)
{
ButtonState = digitalRead(button[v]) ;
Si (buttonstate == LOW & & touche [v] == 2)
{//Checking pour pousser le bouton
digitalWrite (ledpin [0], HIGH) ;
speakerpin.Play (NOTE_G3, 100) ;
Delay(500) ;
digitalWrite (ledpin [0], faible) ;
randomArray [le progrès] = 1 ;
Si (joueur == 1)
{
lecteur ++ ;
progrès ++ ;
Delay(500) ;
Output() ;
retour ;
}
Si (joueur == 2)
{
lecteur--;
progrès ++ ;
Delay(500) ;
Output() ;
retour ;
}
}
Si (buttonstate == LOW & & touche [v] == 3)
{
digitalWrite (ledpin [1], HIGH) ;
speakerpin.Play (NOTE_A3, 100) ;
Delay(200) ;
digitalWrite (ledpin [1], faible) ;
randomArray [le progrès] = 2 ;
Si (joueur == 1)
{
lecteur ++ ;
progrès ++ ;
Delay(500) ;
Output() ;
retour ;
}
Si (joueur == 2)
{
lecteur--;
progrès ++ ;
Delay(500) ;
Output() ;
retour ;
}
}
Si (buttonstate == LOW & & touche [v] == 4)
{
digitalWrite (ledpin [2], haut) ;
speakerpin.Play (NOTE_B3, 100) ;
Delay(200) ;
digitalWrite (ledpin [2], faible) ;
randomArray [le progrès] = 3 ;
Si (joueur == 1)
{
lecteur ++ ;
progrès ++ ;
Delay(500) ;
Output() ;
retour ;
}
Si (joueur == 2)
{
lecteur--;
progrès ++ ;
Delay(500) ;
Output() ;
retour ;
}
}
Si (buttonstate == LOW & & touche [v] == 5)
{
digitalWrite (ledpin [3], HIGH) ;
speakerpin.Play (NOTE_C4, 100) ;
Delay(200) ;
digitalWrite (ledpin [3], faible) ;
randomArray [le progrès] = 4 ;
Si (joueur == 1)
{
lecteur ++ ;
progrès ++ ;
Delay(500) ;
Output() ;
retour ;
}
Si (joueur == 2)
{
lecteur--;
progrès ++ ;
Delay(500) ;
Output() ;
retour ;
}
}
}
}
output() Sub
{
LCD.Clear() ;
Si (joueur == 1)
{
lcd.setCursor(0,0) ;
LCD.Print ("joueur 1") ;
}
Si (joueur == 2)
{
lcd.setCursor(0,0) ;
LCD.Print ("joueur 2") ;
}
lcd.setCursor(0,1) ;
LCD.Print ("regarder les lumières") ;
Delay(1000) ;
pour (int x = 0; x < = virage; x ++)
{
pour (int y = 0; y < 4; y ++)
{
Si (randomArray [x] == 1 & & ledpin [y] == 8)
{déclarations de //if pour afficher les valeurs stockées dans le tableau
digitalWrite (ledpin [y], HIGH) ;
speakerpin.Play (NOTE_G3, 100) ;
Delay(400) ;
digitalWrite (ledpin [y], faible) ;
Delay(100) ;
}
Si (randomArray [x] == 2 & & ledpin [y] == 9)
{
digitalWrite (ledpin [y], HIGH) ;
speakerpin.Play (NOTE_A3, 100) ;
Delay(400) ;
digitalWrite (ledpin [y], faible) ;
Delay(100) ;
}
Si (randomArray [x] == 3 & & ledpin [y] == 10)
{
digitalWrite (ledpin [y], HIGH) ;
speakerpin.Play (NOTE_B3, 100) ;
Delay(400) ;
digitalWrite (ledpin [y], faible) ;
Delay(100) ;
}
Si (randomArray [x] == 4 & & ledpin [y] == 11)
{
digitalWrite (ledpin [y], HIGH) ;
speakerpin.Play (NOTE_C4, 100) ;
Delay(400) ;
digitalWrite (ledpin [y], faible) ;
Delay(100) ;
}
}
}
INPUT2() ;
}
void input2() {//Function pour permettre l’entrée d’utilisateur et vérification d’entrée contre le tableau généré
LCD.Clear() ;
Si (joueur == 1)
{
lcd.setCursor(0,0) ;
LCD.Print ("joueur 1") ;
}
Si (joueur == 2)
{
lcd.setCursor(0,0) ;
LCD.Print ("joueur 2") ;
}
lcd.setCursor(0,1) ;
LCD.Print ("Repeat sequence") ;
Delay(150) ;
pour (int x = 0; x < = virage;)
{//Statement contrôlée par tourner comte
pour (int y = 0; y < 4; y ++)
{
ButtonState = digitalRead(button[y]) ;
Si (buttonstate == LOW & & bouton [y] == 2)
{//Checking pour pousser le bouton
digitalWrite (ledpin [0], HIGH) ;
speakerpin.Play (NOTE_G3, 100) ;
Delay(200) ;
digitalWrite (ledpin [0], faible) ;
inputArray [x] = 1 ;
Delay(250) ;
Si (inputArray [x]! = randomArray[x]) {//Checks valeur entrée par l’utilisateur et le vérifie contre
Fail() ; la valeur au même endroit sur le tableau généré
} Function fail //The est appelée si elle ne correspond pas
x ++ ;
}
Si (buttonstate == LOW & & bouton [y] == 3)
{
digitalWrite (ledpin [1], HIGH) ;
speakerpin.Play (NOTE_A3, 100) ;
Delay(200) ;
digitalWrite (ledpin [1], faible) ;
inputArray [x] = 2 ;
Delay(250) ;
Si (inputArray [x]! = {randomArray[x])}
Fail() ;
}
x ++ ;
}
Si (buttonstate == LOW & & bouton [y] == 4)
{
digitalWrite (ledpin [2], haut) ;
speakerpin.Play (NOTE_B3, 100) ;
Delay(200) ;
digitalWrite (ledpin [2], faible) ;
inputArray [x] = 3 ;
Delay(250) ;
Si (inputArray [x]! = {randomArray[x])}
Fail() ;
}
x ++ ;
}
Si (buttonstate == LOW & & bouton [y] == 5)
{
digitalWrite (ledpin [3], HIGH) ;
speakerpin.Play (NOTE_C4, 100) ;
Delay(200) ;
digitalWrite (ledpin [3], faible) ;
inputArray [x] = 4 ;
Delay(250) ;
Si (inputArray [x]! = randomArray[x])
{
Fail() ;
}
x ++ ;
}
}
}
Delay(500) ;
tour ++ ; Incrémente le nombre de tour, aussi la dernière action avant de démarrer la fonction sortie maintes fois
Loop() ;
}
fail() Sub {//Function utilisé si le joueur ne peut pas correspondre à la séquence
LCD.Clear() ;
Si (jeu == 2 & & joueur == 1)
{
lcd.setCursor(0,0) ;
LCD.Print ("joueur 1!") ;
}
Si (jeu == 2 & & joueur == 2)
{
lcd.setCursor(0,0) ;
LCD.Print ("joueur 2!") ;
}
lcd.setCursor(0,1) ;
LCD.Print ("YOU LOOSE!") ;
Delay(150) ;
pour (int y = 0; y < = 2; y ++)
{//Flashes s’allume pour défaut
digitalWrite (ledpin [0], HIGH) ;
digitalWrite (ledpin [1], HIGH) ;
digitalWrite (ledpin [2], haut) ;
digitalWrite (ledpin [3], HIGH) ;
speakerpin.Play (NOTE_G3, 300) ;
Delay(200) ;
digitalWrite (ledpin [0], faible) ;
digitalWrite (ledpin [1], faible) ;
digitalWrite (ledpin [2], faible) ;
digitalWrite (ledpin [3], faible) ;
speakerpin.Play (NOTE_C3, 300) ;
Delay(200) ;
}
Delay(500) ;
pour (int x = 0; x < 100; x ++) //clears tableau
{
randomArray [x] = 0 ;
}
progression = 0 ;
Player = 1 ;
tourner = -1 ; Réinitialisations tourner valeur jusqu'à ce que le jeu recommence sans avoir besoin d’un bouton de réinitialisation
}
Si vous décidez d’essayer ce code sachez qu’il peut y avoir quelques bugs. Les tons pour les boutons/voyants sont là, mais tous les autres musique et les sons ne sont pas.