// **************************************************
// * *
// * NAME : Sean Inoue *
// * Program Name: MajorProject1.ino *
// * Date : 2023-10-29 *
// * Desc : Wire racing game that needs to *
// * be completed without touching *
// * wire *
// **************************************************
const int speaker = A0; //variable for pin number of speaker
const int startLED1 = 8; //variable for pin number of start LED for player 1
const int playLED1 = 9; //variable for pin number of play LED for player 1
const int winnerLED1 = 10; //variable for pin number of winner LED for player 1
const int startLED2 = 11; //variable for pin number of start LED for player 2
const int playLED2 = 12; //variable for pin number of play LED for player 2
const int winnerLED2 = 13; //variable for pin number of winner LED for player 2
const int startInput1 = 2; //variable for pin number of start input for player 1
const int wireInput1 = 3; //variable for pin number of wire input for player 1
const int winInput1 = 4; //variable for pin number of win input for player 1
const int startInput2 = 5; //variable for pin number of start input for player 2
const int wireInput2 = 6; //variable for pin number of wire input for player 2
const int winInput2 = 7; //variable for pin number of win input for player 2
int start = 0; //variable that determines if game has started or not
int alive1 = 1; //variable that determines if player 1 touched the wire
int alive2 = 1; //variable that determines if player 2 touched the wire
int theWinnerIs = 1; //variable that determines the winner
void setup() {
// put your setup code here, to run once:
pinMode(startLED1, OUTPUT); //sets LEDs for player 1 as output
pinMode(playLED1, OUTPUT); //
pinMode(winnerLED1, OUTPUT); //
pinMode(startLED2, OUTPUT); //sets LEDs for player 2 as output
pinMode(playLED2, OUTPUT); //
pinMode(winnerLED2, OUTPUT); //
pinMode(startInput1, INPUT_PULLUP); //sets inputs for player 1 as input pullup
pinMode(wireInput1, INPUT_PULLUP); //
pinMode(winInput1, INPUT_PULLUP); //
pinMode(startInput2, INPUT_PULLUP); //sets inputs for player 2 as input pullup
pinMode(wireInput2, INPUT_PULLUP); //
pinMode(winInput2, INPUT_PULLUP); //
randomSeed(analogRead(0)); //set up random function
}//end setup()
void loop() {
// put your main code here, to run repeatedly:
tone(speaker, 349, 100); //plays a tune that signals the start of a new game
delay(100); //
tone(speaker, 392, 100); //
delay(100); //
tone(speaker, 415, 100); //
delay(100); //
tone(speaker, 466, 100); //
delay(100); //
tone(speaker, 523, 100); //
delay(100); //
tone(speaker, 554, 100); //
delay(100); //
tone(speaker, 659, 100); //
delay(100); //
tone(speaker, 698, 200); //
delay(600); //delay
fairStart(); //calls fairStart method to check for a fair start
while (start == 1) { //creates while loop after fair start is checked and game has started
if (digitalRead(startInput1) == 0) { //if player touches start input
digitalWrite(playLED1, HIGH); //turn play light on and other lights off
digitalWrite(startLED1, LOW); //
digitalWrite(winnerLED1, LOW); //
alive1 = 1; //allows player to continue and win
}// end if()
if (digitalRead(startInput2) == 0) { //if player touches start input
digitalWrite(playLED2, HIGH); //turn play light on and other lights off
digitalWrite(startLED2, LOW); //
digitalWrite(winnerLED2, LOW); //
alive2 = 1; //allows player to continue and win
}//end if()
if (digitalRead(wireInput1) == 0) { //if player touches wire input
digitalWrite(playLED1, LOW); //turn start light on and other lights off
digitalWrite(startLED1, HIGH); //
digitalWrite(winnerLED1, LOW); //
alive1 = 0; //player is no longer allowed to win
}//end if()
if (digitalRead(wireInput2) == 0) { //if player touches wire input
digitalWrite(playLED2, LOW); //turn start light on and other lights off
digitalWrite(startLED2, HIGH); //
digitalWrite(winnerLED2, LOW); //
alive2 = 0; //player is no longer allowed to win
}//end if()
if (digitalRead(winInput1) == 0) { //if player 1 touches win input
theWinnerIs = winnerLED1; //set winner variable to player 1
start = 0; //set start variable to 0
}//end if()
if (digitalRead(winInput2) == 0) { //if player 2 touches win input
theWinnerIs = winnerLED2; //set winner variable to player 2
start = 0; //set start variable to 0
}//end if()
}//end while()
flash(theWinnerIs); //flash the losers light
while (start == 0) { //turns all lights on and off randomly until game is restarted
PORTB = random(1,63); //
delay(500); //
}//end while()
}//end loop()
//************************************************* METHODS BELOW ************************************************************************
//*******************************************************************************
//* NAME : fairStart *
//* INPUT : none *
//* Return : void *
//* DESC : starts game when both is at start, restart if player leaves start *
//* before game started *
//* *
//*******************************************************************************
void fairStart() { //create faiStart method
while (start == 0) { //while game has not started
while (digitalRead(startInput1) == 1 || digitalRead(startInput2) == 1) { //while either player 1 or 2 is not at start
if (digitalRead(startInput1) == 0) { //check if player 1 is at start
digitalWrite(startLED1, LOW); //if yes turn all player 1 lights off
digitalWrite(playLED1, LOW); //
digitalWrite(winnerLED1, LOW); //
} else { //if not turn only start light on
digitalWrite(startLED1, HIGH); //
digitalWrite(playLED1, LOW); //
digitalWrite(winnerLED1, LOW); //
}//end else()
if (digitalRead(startInput2) == 0) { //check if player 2 is at start
digitalWrite(startLED1, LOW); //if yes turn all player 1 lights off
digitalWrite(playLED2, LOW); //
digitalWrite(winnerLED2, LOW); //
} else { //if not turn only start light on
digitalWrite(startLED2, HIGH); //
digitalWrite(playLED2, LOW); //
digitalWrite(winnerLED2, LOW); //
}//end else()
}//end while()
digitalWrite(startLED1, LOW); //turn all lights off
digitalWrite(startLED2, LOW); //
digitalWrite(playLED1, LOW); //
digitalWrite(playLED2, LOW); //
digitalWrite(winnerLED1, LOW); //
digitalWrite(winnerLED2, LOW); //
tone(speaker, 500, 100); //play tune to signal both players are ready
delay(100); //
tone(speaker, 600, 100); //
delay(100); //
tone(speaker, 700, 100); //
delay(random(1000, 5000)); //delay randomly between 1 - 5 seconds
if (digitalRead(startInput1) == 0 && digitalRead(startInput2) == 0) { //check if both players are still at start
start = 1; //change start variable to game has started
tone(speaker, 2000, 50); //beep 3 times to signal the start of the game
delay(150); //
tone(speaker, 2000, 50); //
delay(150); //
tone(speaker, 2000, 500); //
digitalWrite(playLED1, HIGH); //turn player 1 and 2 play light on
digitalWrite(playLED2, HIGH); //
} else { //if not both player is at start
tone(speaker, 300, 50); //play tune to signal a fault and fairStart() will repeat again
delay(150); //
tone(speaker, 300, 50); //
}//end else()
}//end while()
}//end fairStart()
//*******************************************************************************
//* NAME : flash *
//* INPUT : integer - player 1 or player 2 *
//* Return : void *
//* DESC : flashes the losers light, turn winners win light on, and play a *
//* tune to signal game is finished *
//* *
//*******************************************************************************
void flash(int x) { //create flash method
digitalWrite(playLED1, LOW); //turn all lights off except winner's win light
digitalWrite(startLED1, LOW); //
digitalWrite(playLED2, LOW); //
digitalWrite(startLED2, LOW); //
digitalWrite(x, HIGH); //
tone(speaker, 698, 100); //play a tune to signal the game has finished
delay(100); //
tone(speaker, 659, 100); //
delay(100); //
tone(speaker, 554, 100); //
delay(100); //
tone(speaker, 523, 100); //
delay(100); //
tone(speaker, 466, 100); //
delay(100); //
tone(speaker, 415, 100); //
delay(100); //
tone(speaker, 392, 100); //
delay(100); //
tone(speaker, 349, 200); //
delay(200); //
if (x == winnerLED1) { //if the winner is player 1
for (int y = 0; y < 10; y++) { //create a for loop that flashes player 2's lights on and off 10 times
digitalWrite(winnerLED2, HIGH); //
digitalWrite(startLED2, HIGH); //
digitalWrite(playLED2, HIGH); //
delay(100); //
digitalWrite(winnerLED2, LOW); //
digitalWrite(startLED2, LOW); //
digitalWrite(playLED2, LOW); //
delay(100); //
}//end for()
} else if (x == winnerLED2) { //else if winner is player 2
for (int y = 0; y < 10; y++) { //create a for loop that flashes player 1's lights on and off 10 times
digitalWrite(winnerLED1, HIGH); //
digitalWrite(startLED1, HIGH); //
digitalWrite(playLED1, HIGH); //
delay(100); //
digitalWrite(winnerLED1, LOW); //
digitalWrite(startLED1, LOW); //
digitalWrite(playLED1, LOW); //
delay(100); //
}//end for()
}//end else if()
}//end flash()