Étape 15 : Main jeu module - rendre le code
Cette étape i assez grand puisqu’il couvre beaucoup de renseignements concernant la programmation du module principal. Voici une explication ce que fait chaque partie du code. Si vous ne ressentez pas le besoin de connaître le nitty graveleux du code vous pouvez passez directement à l’étape suivante. Le code complet de wil figurer là.
Nous devons commencer par définir toutes les variables.
//Vars for Gameloop#include <LiquidCrystal.h>int gameChooser = 0; int ChoosenGame = 0; LiquidCrystal lcd(7, 6, 5, 4, 3, 2); int buttonGCPin = 10; int buttonSelectPin = 11;//Global vars int lives = 3; int TurnEnable = 1; int Turn = 0; boolean currentButtonState = LOW; boolean lastButtonState = LOW;
La puissance réactive comprend 2 sections, que la première section est de toutes les variables utilisées par la partie de la sélection des jeux du code. La deuxième section sont les variables utilisées par diverses fonctions dans le code.
Après que nous avons défini les variables que nous avons le programme d’installation pour le gameloop.
void setup() { Serial.begin(9600); lcd.begin(16, 2);//GameLoop setup pinMode(buttonGCPin, INPUT); pinMode(buttonSelectPin, INPUT);}
D’abord nous avons la la série commence. C’est quelque chose que vous n’avez pas besoin. Il est là pour des fins de débogage. Vous pouvez vérifier avec le retour des jeux dans le moniteur de la série.
C’est la boucle qui bassically contrôle tout, les deux premiers contrôles sont pour vérifier quel joueurs c’est le tour et que l’impression. Il y a aussi un contrôle pour entrer dans le menu du bouton select. Si le bouton est enfoncé le sélecteur de jeu sera activé et le TurnEnable est désactivé. arrêt de la boucle de l’impression de faire ce que les joueurs est.
void loop() { if (Turn == 0 && TurnEnable == 1) { lcd.setCursor(0, 0); lcd.print("Player 1's turn"); lcd.setCursor(0, 1); lcd.print("Waiting for game"); currentButtonState = digitalRead(buttonSelectPin); if (currentButtonState == HIGH && lastButtonState == LOW) { gameChooser = 1; TurnEnable = 0; lcd.clear(); } } if (Turn == 1 && TurnEnable == 1) { lcd.setCursor(0, 0); lcd.print("Player 2's turn"); lcd.setCursor(0, 1); lcd.print("Waiting for game"); currentButtonState = digitalRead(buttonSelectPin); if (currentButtonState == HIGH && lastButtonState == LOW) { gameChooser = 1; TurnEnable = 0; lcd.clear(); } }if (gameChooser == 1) { gamePicker(); }}
Si le bouton sélecteur de jeu a été actionné s’appellera la fonction gamepicker. C’est la fonction suivante :
void gamePicker() { int sensorValue = analogRead(A0); //game kies menu if (sensorValue < 200) { lcd.setCursor(0, 0); // lcd.print(">Simon Says< "); lcd.setCursor(0, 1); lcd.print("WirePuller "); } else if (sensorValue > 200 && sensorValue < 400) { lcd.setCursor(0, 0); lcd.print(">WirePuller< "); lcd.setCursor(0, 1); lcd.print("BuzzWire "); } else if (sensorValue > 400 && sensorValue < 600) { lcd.setCursor(0, 0); lcd.print(">BuzzWire< "); lcd.setCursor(0, 1); lcd.print("NoiseDetector "); } else if (sensorValue > 600 && sensorValue < 800) { lcd.setCursor(0, 0); lcd.print(">NoiseDetector< "); lcd.setCursor(0, 1); lcd.print("Quiz "); } else if (sensorValue > 800) { lcd.setCursor(0, 0); lcd.print(">Quiz< "); lcd.setCursor(0, 1); lcd.print(" "); } currentButtonState = digitalRead(buttonGCPin); if (currentButtonState == HIGH && lastButtonState == LOW && sensorValue < 200) { lcd.setCursor(0, 0); lcd.print("Starting: "); lcd.setCursor(0, 1); lcd.print("Simon Says "); delay(2000); lcd.clear(); ChoosenGame = 1; gameChooser = 0; } else if (currentButtonState == HIGH && lastButtonState == LOW && sensorValue > 200 && sensorValue < 400) { lcd.setCursor(0, 0); lcd.print("Starting: "); lcd.setCursor(0, 1); lcd.print("WirePuller "); delay(2000); lcd.clear(); ChoosenGame = 2; gameChooser = 0; } else if (currentButtonState == HIGH && lastButtonState == LOW && sensorValue > 400 && sensorValue < 600) { lcd.setCursor(0, 0); lcd.print("Starting: "); lcd.setCursor(0, 1); lcd.print("BuzzWire "); delay(2000); lcd.clear(); ChoosenGame = 3; gameChooser = 0; } else if (currentButtonState == HIGH && lastButtonState == LOW && sensorValue > 600 && sensorValue < 800) { lcd.setCursor(0, 0); lcd.print("Starting: "); lcd.setCursor(0, 1); lcd.print("NoiseDetector "); delay(2000); lcd.clear(); ChoosenGame = 4; gameChooser = 0; } else if (currentButtonState == HIGH && lastButtonState == LOW && sensorValue > 800) { lcd.setCursor(0, 0); lcd.print("Starting: "); lcd.setCursor(0, 1); lcd.print("Quiz "); delay(2000); lcd.clear(); ChoosenGame = 5; gameChooser = 0; } lastButtonState = currentButtonState; }
Ce qu’il fait c’est le contrôle le menu scrolltrough des jeux. Dans ce menu, vous sélectionnez un des jeux
Qu’il s’agit de la partie qui contrôle tous les mécanismes du jeu. Si vous avez sélectionné un jeu il montre quel jeu est joué. Ces boucles de gamecontrol aussi vérifier si vous avez gagné ou perdu un mini-jeu. Lorsque vous gagnez un mini-jeu le wil écran dire joueur [numéro de lecteur] a gagné un point. Ce qui indique que vous avez gagné la partie de ce jeu. Un son de la victoire se jouera et les virages est mise en marche. Si vous perdez un jeu l’écran va dire que joueur [numéro de lecteur] est gameover. Un son gameover se jouera et le tour est mise en marche. Cela fonctionne de la même façon pour tous les jeux.
void loop() { lastButtonState = currentButtonState; //Simon Says if (ChoosenGame == 1) { lcd.setCursor(0, 0); lcd.print("Playing:"); lcd.setCursor(0, 1); lcd.print("Simon Says"); if (lives == 0) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Player " + String(Turn + 1)); lcd.setCursor(0, 1); lcd.print("Is Gameover!"); failsound(); delay(2500); ChoosenGame = 0; turnss = 0; TurnSwitch(); } else if (lives == 5) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Player " + String(Turn + 1)); lcd.setCursor(0, 1); lcd.print("Gained a point!"); delay(2500); victorysound(); ChoosenGame = 0; turnss = 0; TurnSwitch(); } else { SimonSays(); } } // WirePuller if (ChoosenGame == 2) { lcd.setCursor(0, 0); lcd.print("Playing:"); lcd.setCursor(0, 1); lcd.print("Wirepuller"); wirepuller(); if (lives == 0) { lcdquiz.clear(); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Player " + String(Turn + 1)); lcd.setCursor(0, 1); lcd.print("Is Gameover!"); failsound(); delay(2500); ChoosenGame = 0; TurnSwitch(); } else if (lives == 5) { lcdquiz.clear(); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Player " + String(Turn + 1)); lcd.setCursor(0, 1); lcd.print("Gained a point!"); delay(2500); victorysound(); ChoosenGame = 0; TurnSwitch(); } } //BuzzWire if (ChoosenGame == 3) { lcd.setCursor(0, 0); lcd.print("Playing:"); lcd.setCursor(0, 1); lcd.print("BuzzWire"); buzzwire(); if (lives == 0) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Player " + String(Turn + 1)); lcd.setCursor(0, 1); lcd.print("Is Gameover!"); failsound(); delay(2500); ChoosenGame = 0; TurnSwitch(); } else if (lives == 5) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Player " + String(Turn + 1)); lcd.setCursor(0, 1); lcd.print("Gained a point!"); delay(2500); victorysound(); ChoosenGame = 0; TurnSwitch(); } } //NoiseDetector if (ChoosenGame == 4) { lcd.setCursor(0, 0); lcd.print("Playing:"); lcd.setCursor(0, 1); lcd.print("Noisedetector"); noisedetector(); if (lives == 0) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Player " + String(Turn + 1)); lcd.setCursor(0, 1); lcd.print("Is Gameover!"); failsound(); delay(2500); ChoosenGame = 0; TurnSwitch(); } else if (lives == 5) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Player " + String(Turn + 1)); lcd.setCursor(0, 1); lcd.print("Gained a point!"); delay(2500); victorysound(); ChoosenGame = 0; TurnSwitch(); } } //Quiz if (ChoosenGame == 5) { quiz(); if (lives == 0) { lcd.clear(); lcdquiz.clear(); lcd.setCursor(0, 0); lcd.print("Player " + String(Turn + 1)); lcd.setCursor(0, 1); lcd.print("Is Gameover!"); failsound(); delay(2500); ChoosenGame = 0; TurnSwitch(); } else if (lives == 5) { lcd.clear(); lcdquiz.clear(); lcd.setCursor(0, 0); lcd.print("Player " + String(Turn + 1)); lcd.setCursor(0, 1); lcd.print("Gained a point!"); delay(2500); victorysound(); ChoosenGame = 0; TurnSwitch(); } } }
Il s’agit de la boucle qui gère la commutation de la tour. C’est joli straigt vers l’avant. Si le joueur on joue elle est réactivée au joueur 2 et la vie sera remis à zéro. Si le joueur 2 joue il travaillera l’autre manière autour.
void TurnSwitch() { if (Turn == 0) { Turn = 1; TurnEnable = 1; lives = 3; } else if (Turn == 1) { Turn = 0; TurnEnable = 1; lives = 3; } }
Il s’agit de la boucle de la victoire. Cela s’appellera lorsqu’une partie est gagnée. Il joue juste une victoire son
void victorysound() { for (int thisNote = 0; thisNote < 6; thisNote ++) { // play the next note: speakerpin.play(note[thisNote]); // hold the note: delay(duration[thisNote]); // stop for the next note: speakerpin.stop(); delay(25); } }
Il s’agit de la boucle de gameover. Celui-ci est appelé lorsqu’un jeu est perdu. Il joue juste un gameover sonore.
void failsound() { for (int y = 0; y <= 2; y++) { speakerpin.play(NOTE_G3, 300); delay(200); speakerpin.play(NOTE_C3, 300); delay(200); } }