//*******************************************************************************
//* *
//* Name: Gavin Powell *
//* Prog. Name: WireGame *
//* Date: 2024-04-17 *
//* Desc: 2 Player racing game where the objective is to be the first to get *
//* the handle to touch the other side of the wire before the other *
//* player. If the player touches the wire they have to go back to the *
//* start. *
//* *
//*******************************************************************************
int startTheGame = 0; //creates a variable to check if the game has started
int theWinnerIs = 0; //creates a variable used to decide the winner
int P1PlayingTheGame = 0; //creates a vrable to cheack if player 1 hasn't touched the wire
int P2PlayingTheGame = 0; //creates a vrable to cheack if player 2 hasn't touched the wire
int gameOver = 0; //creates a variable to check if the game is over
int P1GoHomeLED = 8; //port for Player 1's red led
int P1PlayLED = 9; //port for player 1's green led
int P1WinnerLED = 10; //port for Player 1's yellow led
int P1StartInput = 2; //Port for Player 1's starting position
int P1WireInput = 3; //port for player 1's wire input
int P1WinInput = 4; //port for player 1's finish input
int P2GoHomeLED = 11; //port for Player 2's red led
int P2PlayLED = 12; //port for player 2's green led
int P2WinnerLED = 13; //port for Player 2's yellow led
int P2StartInput = 5; //Port for Player 2's starting position
int P2WireInput = 6; //port for player 2's wire input
int P2WinInput = 7; //port for player 2's finish input
int loserLED1 = 0; //
int loserLED2 = 0; //used to select the who the loser is an light their led up
int loserLED3 = 0; //
//music notes for victory music
int C6 = 1047;
int Ab5 = 831;
int Bb5 = 932;
int G5 = 784;
int F5 = 698;
int E5 = 659;
int Eb5 = 622;
int D5 = 587;
int Db5 = 554;
int C5 = 523;
int B4 = 494;
int Bb4 = 466;
int nA4 = 440;
int Ab4 = 415;
int G4 = 392;
int Gb4 = 370;
int F4 = 349;
int E4 = 330;
int Eb4 = 311;
int D4 = 294;
int Db4 = 277;
int C4 = 262;
int B3 = 247;
int Bb3 = 233;
int nA3 = 220;
int G3 = 196;
int Gb3 = 185;
int F3 = 175;
int E3 = 165;
//end of music notes
void setup() {
pinMode (P1GoHomeLED, OUTPUT); //
pinMode (P1PlayLED, OUTPUT); //
pinMode (P1WinnerLED, OUTPUT); // pinModes for Player 1
pinMode (P1StartInput, INPUT_PULLUP); //
pinMode (P1WireInput, INPUT_PULLUP); //
pinMode (P1WinInput, INPUT_PULLUP); //
pinMode (P2GoHomeLED, OUTPUT); //
pinMode (P2PlayLED, OUTPUT); //
pinMode (P2WinnerLED, OUTPUT); // pinModes for Player 2
pinMode (P2StartInput, INPUT_PULLUP); //
pinMode (P2WireInput, INPUT_PULLUP); //
pinMode (P2WinInput, INPUT_PULLUP); //
pinMode (A0, OUTPUT); //pinMode for the speaker
randomSeed(analogRead(A0)); //starts randon numbers
tone(A0,1000,10); //
delay(50); //
tone(A0,1000,10); // 3 Beeps to say the game is on
delay(50); //
tone(A0,1000,10); //
delay(50); //
Serial.begin(9600); //start serial monitor
} //close void setup()
void loop() {
if(gameOver == 1) { //checks if the game is over, if yes then start end game sequence
digitalWrite(P1GoHomeLED, 0); //
digitalWrite(P1PlayLED, 0); //
digitalWrite(P1WinnerLED, 0); // turns off all LEDs
digitalWrite(P2GoHomeLED, 0); //
digitalWrite(P2PlayLED, 0); //
digitalWrite(P2WinnerLED, 0); //
for( int x ; x <= 10 ; x++) { //flashes the losing player lights 10 times
digitalWrite(loserLED1, 1); //
digitalWrite(loserLED2, 1); // Turns on losers LEDs
digitalWrite(loserLED3, 1); //
delay(100); // wait for 100 miliseconds
digitalWrite(loserLED1, 0); //
digitalWrite(loserLED2, 0); // Turns of losers LEDs
digitalWrite(loserLED3, 0); //
delay(100); // wait for 100 miliseconds
} //close for()
delay(1000); //wait 1 second after the losing players LEDs flash
while(gameOver == 1) { //makes the lights randomly flash to signify the game is completely done
digitalWrite (P1PlayLED, random(0,2));
delay(10);
digitalWrite (P1WinnerLED, random(0,2));
delay(10);
digitalWrite (P1GoHomeLED, random(0,2));
delay(10);
digitalWrite (P2PlayLED, random(0,2));
delay(10);
digitalWrite (P2WinnerLED, random(0,2));
delay(10);
digitalWrite (P2GoHomeLED, random(0,2));
delay(10);
} //close while()
} //close if()
fairstart(); //moves to the fairstart() function
while (startTheGame == 1) { //repeat until the game is over
if(digitalRead(P1StartInput) == 0) { //if player 1 is on start
digitalWrite (P1PlayLED, 1); //
digitalWrite (P1GoHomeLED, 0); // On, Off, Off
digitalWrite (P1WinnerLED, 0); //
P1PlayingTheGame = 1; // Allows player to continue
} //close if()
else if (digitalRead(P1WireInput) == 0) { //if player 1 is touchin wire
digitalWrite (P1PlayLED, 0); //
digitalWrite (P1GoHomeLED, 1); // Off, On, Off
digitalWrite (P1WinnerLED, 0); //
P1PlayingTheGame = 0; // Stops player from winning utile they've touched the start
} //close else()
else if (digitalRead(P1WinInput) == 0 && P1PlayingTheGame == 1) { //if player 1 is touching win and hasn't touched the wire
digitalWrite (P1PlayLED, 0); //
digitalWrite (P1GoHomeLED, 0); // Off, Off, On
digitalWrite (P1WinnerLED, 1); //
P1PlayingTheGame = 0; //
theWinnerIs = 1; // Stops any more inputs
startTheGame = 0; //
} //close ()
if(digitalRead(P2StartInput) == 0) { //If player 2 is on start
digitalWrite (P2PlayLED, 1); //
digitalWrite (P2GoHomeLED, 0); // ON, OFF, OFF
digitalWrite (P2WinnerLED, 0); //
P2PlayingTheGame = 1; // Allows player to Continue Playing
} //close if()
else if (digitalRead(P2WireInput) == 0) { //If player touches wire
digitalWrite (P2PlayLED, 0); //
digitalWrite (P2GoHomeLED, 1); // OFF, ON, OFF
digitalWrite (P2WinnerLED, 0); //
P2PlayingTheGame = 0; // Stops player 2 from winning
} //close else if()
else if (digitalRead(P2WinInput) == 0 && P2PlayingTheGame == 1) { // If player 2 is on win and hasn't touch the wire
digitalWrite (P2PlayLED, 0); //
digitalWrite (P2GoHomeLED, 0); // OFF, OFF, ON
digitalWrite (P2WinnerLED, 1); //
P2PlayingTheGame = 0; //
theWinnerIs = 2; // Stops any more inputs
startTheGame = 0; //
} // close else if()
}//close while loop
wingame(); //starts win game sequence
} //close void loop()
//***********************************FUNCTIONS****************************************
void fairstart(){ //Checks to make sure both players are at start
//game start music
tone(A0, E3);
delay(166);
tone(A0, C4);
delay(166);
tone(A0, Eb4);
delay(166);
tone(A0, F4);
delay(166);
tone(A0, Bb4);
delay(166);
tone(A0, D5);
delay(166);
tone(A0, G3);
delay(166);
tone(A0, C4);
delay(166);
tone(A0, E4, 100);
delay(166);
//end of game start music
while (startTheGame == 0) { //repeats until the game starts
while (digitalRead(P1StartInput) != 0 || digitalRead (P2StartInput) != 0) { //repeats until both players are on start
if (digitalRead(P1StartInput) != 0) { //turns off Player 1's LEDs when on start
digitalWrite (P1PlayLED, 0); //
digitalWrite (P1GoHomeLED, 1); // OFF, ON, OFF
digitalWrite (P1WinnerLED, 0); //
} // close if()
else {
digitalWrite (P1PlayLED, 0); //
digitalWrite (P1GoHomeLED, 0); // OFF, OFF, OFF
digitalWrite (P1WinnerLED, 0); //
} // close else()
if (digitalRead(P2StartInput) != 0) { //turns off Player 2's LEDs when on start
digitalWrite (P2PlayLED, 0); //
digitalWrite (P2GoHomeLED, 1); // OFF, ON, OFF
digitalWrite (P2WinnerLED, 0); //
} //close if()
else {
digitalWrite (P2PlayLED, 0); //
digitalWrite (P2GoHomeLED, 0); // OFF, OFF, OFF
digitalWrite (P2WinnerLED, 0); //
} //close else()
} //end second while()
tone(A0, 500, 200); //
digitalWrite (P1GoHomeLED, 1); //
digitalWrite (P2GoHomeLED, 1); //
delay(1000); //
//
tone(A0, 500, 200); //
digitalWrite (P1PlayLED, 1); //
digitalWrite (P2PlayLED, 1); // Gives a count down to start the game
delay(1000); //
//
tone(A0, 500, 200); //
digitalWrite (P1WinnerLED, 1); //
digitalWrite (P2WinnerLED, 1); //
delay(1000); //
if ( digitalRead(P2StartInput) == 0 && digitalRead(P1StartInput) == 0 ) { //checks if both players are on start
delay( (random(1 , 5) * 1000) ); //random delay so player can't predict when to start
if ( digitalRead(P2StartInput) == 0 && digitalRead(P1StartInput) == 0 ) { //checks again if all player are on start
startTheGame = 1; //starts the game and exits while loop()
tone(A0, 700, 50); //
delay(100); //
tone(A0, 700, 50); // 3 beeps to say the game started
delay(100); //
tone(A0, 700, 50); //
delay(100); //
} //close if()
else {
tone(A0, 100, 500); //low beep to say the game didn't start
} //close else()
} //close if()
else {
tone(A0, 100, 500); //low beep to say the game didn't start
} //close else()
} //close while()
} //end fairstart
void wingame (){ //decides which player to flash the LED lights during the song
if (theWinnerIs == 1){ //if player 1 wins
loserLED1 = 11; //
loserLED2 = 12; // Set loserLEDs to Player 2 Leds
loserLED3 = 13; //
} //close if()
else{
loserLED1 = 8; //
loserLED2 = 9; // set loserLEDs to player 1 leds
loserLED3 = 10; //
} //end if
winsound(); //moves to the win music
} //close void wingame()
void winsound(){ //victory music and flashing lights for the winner
//first sequence of the song
tone(A0, G3);
delay(166);
tone(A0, C4);
delay(166);
tone(A0, E4);
delay(166);
tone(A0, G4);
delay(166);
tone(A0, C5);
delay(166);
tone(A0, E5);
delay(166);
tone(A0, G5);
delay(500);
tone(A0, E5);
delay(500);
//second sequence of the song
tone(A0, E3);
delay(166);
tone(A0, C4);
delay(166);
tone(A0, Eb4);
delay(166);
tone(A0, Ab4);
delay(166);
tone(A0, C5);
delay(166);
tone(A0, Eb5);
delay(166);
tone(A0, Ab5);
delay(500);
tone(A0, Eb5);
delay(500);
//final sequence of the song
tone(A0, Bb3);
delay(166);
tone(A0, D4);
delay(166);
tone(A0, F4);
delay(166);
tone(A0, Bb4);
delay(166);
tone(A0, D5);
delay(166);
tone(A0, F5);
delay(166);
tone(A0, Bb5, 350);
delay(400);
tone(A0, Bb5, 50);
delay(166);
tone(A0, Bb5, 50);
delay(166);
tone(A0, Bb5, 50);
delay(166);
tone(A0, C6, 1500);
delay(2000);
gameOver = 1; //set the game to being over
} //close void winsound()