Smart board-spel (15 / 21 steg)
Steg 15: Main spelet modulen - att göra koden
Detta steg i ganska stor eftersom det omfattar en hel del information om programmeringen av den huvudsakliga modulen. Här är en förklaring vad varje del av koden gör. Om du inte känner behov av att veta nitty gritty koden kan du hoppa vidare till nästa steg. Den fullständiga koden wil vara med där.
Vi måste först definiera alla variabler.
Vars för Gameloop
#include < LiquidCrystal.h >
int gameChooser = 0;
int ChoosenGame = 0;
LiquidCrystal lcd (7, 6, 5, 4, 3, 2);
int buttonGCPin = 10;
int buttonSelectPin = 11;
Globala vars
int liv = 3;
int TurnEnable = 1;
int Turn = 0;
booleska currentButtonState = låg;
booleska lastButtonState = låg;
Vars inkluderar 2 avsnitt i första avsnittet är alla variabler som används av spelutbud del av koden. Den andra delen är de variabler som används av olika funktioner i koden.
När vi har definierat variabler har vi inställningen för gameloop.
void setup() {
Serial.BEGIN(9600);
LCD.BEGIN (16, 2);
GameLoop inställningar
pinMode (buttonGCPin, ingång);
pinMode (buttonSelectPin, ingång);
}
Först av allt vi har i den seriella begin. Detta är något som du inte behöver. Det finns där för felsökning ändamål. Du kan kontrollera feedback för spel i följetong monitor.
Detta är en slinga som bassically kontroller allt, de två första kontrollerna är för att kontrollera vilka spelare tur det är och skriva som ut. Det finns också en check för att komma in knappen Markera-menyn. Om knappen trycks spelet väljaren kommer att aktiveras och TurnEnable inaktiveras. stoppa slingan från skriva ut vilka spelare slår den är.
void loop() {
om (vända == 0 & & TurnEnable == 1) {
lcd.setCursor (0, 0);
LCD.Print ("Player 1 turn");
lcd.setCursor (0, 1);
LCD.Print ("väntan för spelet");
currentButtonState = digitalRead(buttonSelectPin);
om (currentButtonState == hög & & lastButtonState == låg) {
gameChooser = 1;
TurnEnable = 0;
LCD.Clear();
}
}
om (vända == 1 & & TurnEnable == 1) {
lcd.setCursor (0, 0);
LCD.Print ("spelare 2 turn");
lcd.setCursor (0, 1);
LCD.Print ("väntan för spelet");
currentButtonState = digitalRead(buttonSelectPin);
om (currentButtonState == hög & & lastButtonState == låg) {
gameChooser = 1;
TurnEnable = 0;
LCD.Clear();
}
}
om (gameChooser == 1) {
gamePicker();
}
}
Om knappen spelet väljaren har tryckts kommer funktionen gamepicker anropas. Det är följande funktion:
void gamePicker() {
int sensorValue = analogRead(A0);
spel kies-menyn
om (sensorValue < 200) {
lcd.setCursor (0, 0); //
LCD.Print ("> Simon Says <");
lcd.setCursor (0, 1);
LCD.Print ("WirePuller");
} else om (sensorValue > 200 & & sensorValue < 400) {
lcd.setCursor (0, 0);
LCD.Print ("> WirePuller <");
lcd.setCursor (0, 1);
LCD.Print ("BuzzWire");
} else om (sensorValue > 400 & & sensorValue < 600) {
lcd.setCursor (0, 0);
LCD.Print ("> BuzzWire <");
lcd.setCursor (0, 1);
LCD.Print ("NoiseDetector");
} else om (sensorValue > 600 & & sensorValue < 800) {
lcd.setCursor (0, 0);
LCD.Print ("> NoiseDetector <");
lcd.setCursor (0, 1);
LCD.Print ("Quiz");
} else om (sensorValue > 800) {
lcd.setCursor (0, 0);
LCD.Print ("> Quiz <");
lcd.setCursor (0, 1);
LCD.Print("");
}
currentButtonState = digitalRead(buttonGCPin);
om (currentButtonState == hög & & lastButtonState == låg & & sensorValue < 200) {
lcd.setCursor (0, 0);
LCD.Print ("start:");
lcd.setCursor (0, 1);
LCD.Print ("Simon säger");
Delay(2000);
LCD.Clear();
ChoosenGame = 1;
gameChooser = 0;
} else om (currentButtonState == hög & & lastButtonState == låg & & sensorValue > 200 & & sensorValue < 400) {
lcd.setCursor (0, 0);
LCD.Print ("start:");
lcd.setCursor (0, 1);
LCD.Print ("WirePuller");
Delay(2000);
LCD.Clear();
ChoosenGame = 2;
gameChooser = 0;
} else om (currentButtonState == hög & & lastButtonState == låg & & sensorValue > 400 & & sensorValue < 600) {
lcd.setCursor (0, 0);
LCD.Print ("start:");
lcd.setCursor (0, 1);
LCD.Print ("BuzzWire");
Delay(2000);
LCD.Clear();
ChoosenGame = 3;
gameChooser = 0;
} else om (currentButtonState == hög & & lastButtonState == låg & & sensorValue > 600 & & sensorValue < 800) {
lcd.setCursor (0, 0);
LCD.Print ("start:");
lcd.setCursor (0, 1);
LCD.Print ("NoiseDetector");
Delay(2000);
LCD.Clear();
ChoosenGame = 4;
gameChooser = 0;
} else om (currentButtonState == hög & & lastButtonState == låg & & sensorValue > 800) {
lcd.setCursor (0, 0);
LCD.Print ("start:");
lcd.setCursor (0, 1);
LCD.Print ("Quiz");
Delay(2000);
LCD.Clear();
ChoosenGame = 5;
gameChooser = 0;
}
lastButtonState = currentButtonState;
}
Vad detta innebär är det kontroller menyn scrolltrough spel. I den här menyn väljer du en av spel
Än detta är den del som kontroller alla spelet mekanik. När ett spel är valt visar vad spelet spelas. Dessa gamecontrol loopar också kontrollera om du vunnit eller förlorat ett minispel. När du vinner ett minispel säga skärmen wil spelare [antal spelare] fick en punkt. Som visar att du har tjänat in delen av det spelet. En seger ljud spelas och svängar kommer att stängas. Om du förlorar ett spel säger skärmen spelare [antal spelare] är gameover. Ett gameover ljud spelas och turn kommer att stängas. Detta fungerar på samma sätt för alla spel.
void loop() {
lastButtonState = currentButtonState;
Simon säger
om (ChoosenGame == 1) {
lcd.setCursor (0, 0);
LCD.Print("Playing:");
lcd.setCursor (0, 1);
LCD.Print ("Simon säger");
om (bor == 0) {
LCD.Clear();
lcd.setCursor (0, 0);
LCD.Print ("Spelaren" + sträng (Turn + 1));
lcd.setCursor (0, 1);
LCD.Print ("är Gameover!");
failsound();
Delay(2500);
ChoosenGame = 0;
turnss = 0;
TurnSwitch();
} else om (bor == 5) {
LCD.Clear();
lcd.setCursor (0, 0);
LCD.Print ("Spelaren" + sträng (Turn + 1));
lcd.setCursor (0, 1);
LCD.Print ("fick en punkt!");
Delay(2500);
victorysound();
ChoosenGame = 0;
turnss = 0;
TurnSwitch();
} annat {
SimonSays();
}
}
WirePuller
om (ChoosenGame == 2) {
lcd.setCursor (0, 0);
LCD.Print("Playing:");
lcd.setCursor (0, 1);
LCD.Print("Wirepuller");
wirepuller();
om (bor == 0) {
lcdquiz.Clear();
LCD.Clear();
lcd.setCursor (0, 0);
LCD.Print ("Spelaren" + sträng (Turn + 1));
lcd.setCursor (0, 1);
LCD.Print ("är Gameover!");
failsound();
Delay(2500);
ChoosenGame = 0;
TurnSwitch();
} else om (bor == 5) {
lcdquiz.Clear();
LCD.Clear();
lcd.setCursor (0, 0);
LCD.Print ("Spelaren" + sträng (Turn + 1));
lcd.setCursor (0, 1);
LCD.Print ("fick en punkt!");
Delay(2500);
victorysound();
ChoosenGame = 0;
TurnSwitch();
}
}
BuzzWire
om (ChoosenGame == 3) {
lcd.setCursor (0, 0);
LCD.Print("Playing:");
lcd.setCursor (0, 1);
LCD.Print("BuzzWire");
Buzzwire();
om (bor == 0) {
LCD.Clear();
lcd.setCursor (0, 0);
LCD.Print ("Spelaren" + sträng (Turn + 1));
lcd.setCursor (0, 1);
LCD.Print ("är Gameover!");
failsound();
Delay(2500);
ChoosenGame = 0;
TurnSwitch();
} else om (bor == 5) {
LCD.Clear();
lcd.setCursor (0, 0);
LCD.Print ("Spelaren" + sträng (Turn + 1));
lcd.setCursor (0, 1);
LCD.Print ("fick en punkt!");
Delay(2500);
victorysound();
ChoosenGame = 0;
TurnSwitch();
}
}
NoiseDetector
om (ChoosenGame == 4) {
lcd.setCursor (0, 0);
LCD.Print("Playing:");
lcd.setCursor (0, 1);
LCD.Print("Noisedetector");
noisedetector();
om (bor == 0) {
LCD.Clear();
lcd.setCursor (0, 0);
LCD.Print ("Spelaren" + sträng (Turn + 1));
lcd.setCursor (0, 1);
LCD.Print ("är Gameover!");
failsound();
Delay(2500);
ChoosenGame = 0;
TurnSwitch();
} else om (bor == 5) {
LCD.Clear();
lcd.setCursor (0, 0);
LCD.Print ("Spelaren" + sträng (Turn + 1));
lcd.setCursor (0, 1);
LCD.Print ("fick en punkt!");
Delay(2500);
victorysound();
ChoosenGame = 0;
TurnSwitch();
}
}
Frågesport
om (ChoosenGame == 5) {
Quiz();
om (bor == 0) {
LCD.Clear();
lcdquiz.Clear();
lcd.setCursor (0, 0);
LCD.Print ("Spelaren" + sträng (Turn + 1));
lcd.setCursor (0, 1);
LCD.Print ("är Gameover!");
failsound();
Delay(2500);
ChoosenGame = 0;
TurnSwitch();
} else om (bor == 5) {
LCD.Clear();
lcdquiz.Clear();
lcd.setCursor (0, 0);
LCD.Print ("Spelaren" + sträng (Turn + 1));
lcd.setCursor (0, 1);
LCD.Print ("fick en punkt!");
Delay(2500);
victorysound();
ChoosenGame = 0;
TurnSwitch();
}
}
}
Detta är en slinga som hanterar tur växlingen. Det är ganska rak fram. om spelare en spelar det kommer att kopplas till spelare 2 och livet kommer att återställas. om spelare 2 spelar kommer att det fungera tvärtom.
void TurnSwitch() {
om (vända == 0) {
Vända = 1;
TurnEnable = 1;
bor = 3;
} else om (vända == 1) {
Vända = 0;
TurnEnable = 1;
bor = 3;
}
}
Detta är en seger slinga. Detta kommer att anropas när ett spel vinns. Det spelar bara en seger ljud
void victorysound() {
för (int thisNote = 0; thisNote < 6; thisNote ++) {
spela nästa anteckning:
speakerpin.Play(Note[thisNote]);
Håll anteckningen:
Delay(duration[thisNote]);
stopp för nästa anteckning:
speakerpin.stop();
Delay(25);
}
}
Detta är gameover slingan. Här heter när ett spel är förlorad. Det leker bara en gameover ljud.
void failsound() {
för (int y = 0; y < = 2; y ++) {
speakerpin.Play (NOTE_G3, 300);
Delay(200);
speakerpin.Play (NOTE_C3, 300);
Delay(200);
}
}