Total Recall - Arduino Simon Says sur stéroïdes ! (4 / 6 étapes)

É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èque

Ton 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 LED

Tournez 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.

Articles Liés

Arduino Simon Says

Arduino Simon Says

dans ce Instructable je vais vous montrer comment remonter un très simple Simon dit jeu en utilisant un Arduino Micro contrôleur. Tout d'abord, j'ai commencé ce projet en 2010 et il n'ont pas repris à nouveau depuis. A beaucoup changé dans le monde d
Arduino Simon Say

Arduino Simon Say

c'est ma version de l'Arduino Simon SayVous aurez besoin :6 x 220 ohm résistances3 X leds, un pour chaque couleur, rouge, vert, jaune3 X Push buttons1 X ArduinoQuelques câblesÉtape 1: Schéma de Circuits 5 volts passent par les boutons de la LED et de
Simon Says game

Simon Says game

J'ai créé un jeu de mémoire électronique dans le style de « Simon Says » (une icône des années 70). Il est basé sur un ARM cortex M0 microcontrôleur. Vous y trouverez un manuel détaillé de construction, schémas électriques et code source sur mon site
Créer votre propre jeu de Simon Says avec la pâte Electro DIY Arduino !

Créer votre propre jeu de Simon Says avec la pâte Electro DIY Arduino !

Mise en routeL'objectif de ce Instructable est de transformer votre pâte electro en un bouton capacitif tactile avec Arduino à l'aide de la bibliothèque d'arduino CapSense et ensuite l'utiliser pour créer un Simon Says jeu. Nous allons utiliser un bo
Simon Says avec LEDs et son

Simon Says avec LEDs et son

Bonjour et Bienvenue retour à Instructables !Beaucoup d'entre nous ont tous joué Simon Says où inévitablement vous retrouverez sautille sur un pied tout en faisant des bruits d'éléphant et vous vous demandez vous pourquoi c'est toujours une bonne idé
Arduino Simon dit jeu

Arduino Simon dit jeu

Il s'agit d'un amusant projet j'ai fait avec mes enfants pendant les vacances.Pour abriter ce jeu, j'ai décidé d'utiliser une vieille boîte de l'iPhone 5c. J'avais juste traîner et il semble sur la bonne taille.Liste des composants :(Note : tous les
Arduino Simon dit

Arduino Simon dit

Comme un gamin, j'ai toujours aimé combien mes parents détestaient le jeu Simon Says, à l'aide d'un simple arduino, certains voyants, résistances, boutons poussoirs et un piezo que nous pouvons le faire nous-mêmes ! J'ai testé et conçu ce circuit à l
Faire votre propre jeu à 2 joueurs Simon Says

Faire votre propre jeu à 2 joueurs Simon Says

Ce Instructable explique comment faire un Simon Says jeu à l'aide d'un Comité d'Altera DE2-115 Cyclone IV FPGA. Ce projet a été fait pour ECE2220 (Digital Logic) à l'Université du Manitoba.La vidéo ci-dessus montre la sortie VGA de travail et comment
À l’aide de tft itead 2.8 arduino UNO sheild sur MEGA

À l’aide de tft itead 2.8 arduino UNO sheild sur MEGA

Écran tactile TFT est interface graphique étonnante qui pourrait être utilisé avec arduino spécialement de MCU.Il a gamme large de couleur et bonne capacité graphique et bonne carte de pixels, peut être utilisé dans les applications nécessitant un gr
Jeu interactif de Simon Says

Jeu interactif de Simon Says

je ne me souviens pas tout à fait comment ce jeu évolué mais la principale motivation derrière c'est pour améliorer le traitement cognitif et attention en obtenant les joueurs à se concentrer sur une séquence de coups de batterie, puis répétez cette
Arduino Nano et Visuino : contrôler des Servos avec Joystick

Arduino Nano et Visuino : contrôler des Servos avec Joystick

Servos de commande connecté à Arduino avec Joystick est une tâche très commune. Avec l'aide de Visuino, un environnement de développement graphique facile à utiliser pour Arduino, atteindre cet objectif n'a jamais été aussi facile !Veuillez noter que
Détecteur de rayonnement en réseau : Sentir les rayons cosmiques sur le bout des doigts

Détecteur de rayonnement en réseau : Sentir les rayons cosmiques sur le bout des doigts

* Mise à jour (12/23) *: vient d'entrer dans la compétition « protégés » - Protégez-vous contre rayonnement et votez pour moi:) MerciNote : Ceci est mon tout premier Instructable ! Je vais être très sensible à la rétroaction sur la façon d'améliorer
Une toute nouvelle théorie sur la construction des pyramides (que je sache)

Une toute nouvelle théorie sur la construction des pyramides (que je sache)

Donc, voici le principe : vous êtes un milliardaire dot com, ou l'inventeur d'un goût de médias sociaux logiciel app, ou peut-être vous juste a gauche pots d'argent de votre vieil oncle riche, et votre minou BFF vient de perdre toutes ses neuf vies p
Conseils sur la marche des chiens qui fonctionnent vraiment !

Conseils sur la marche des chiens qui fonctionnent vraiment !

J'ai recueilli quelques informations utiles sur la marche des chiens aussi bien par la TV et l'expérience personnelle ici de quelques conseils. Conseils que vous voulez vraiment utilisent à la fois l'émission de télévision « Dog Whisperer » et moi-mê