bool game_end;
int p1_led = 2;
int p1_btn = 12;
int p1_pts = 0;
int p2_led = 10;
int p2_btn = 13;
int p2_pts = 0;
int direction = 0; //0 - right, 1 - left
unsigned long time;
void setup()
{
for (int i = 2; i <= 10; i++)
{
pinMode(i, OUTPUT);
}
pinMode(p1_btn, INPUT_PULLUP);
pinMode(p2_btn, INPUT_PULLUP);
Serial.begin(9600);
}
void victory()
{
for (int i = 0; i < 2; i++)
{
digitalWrite(p1_led, HIGH);
digitalWrite(p2_led, HIGH);
delay(200);
digitalWrite(p1_led, LOW);
digitalWrite(p2_led, LOW);
delay(200);
}
for (int i = 2; i < 10; i++)
{
digitalWrite(i, HIGH);
delay(50);
}
for (int i = 2; i < 10; i++)
{
digitalWrite(i, LOW);
}
for (int i = 10; i >= 2; i--)
{
digitalWrite(i, HIGH);
delay(50);
}
for (int i = 2; i < 10; i++)
{
digitalWrite(i, LOW);
}
delay(200);
for (int i = 2; i < 10; i++)
{
digitalWrite(i, HIGH);
}
delay(400);
for (int i = 2; i <=10; i++)
{
digitalWrite(i, LOW);
}
game_end = true;
}
void untimelyPress()
{
if ((!digitalRead(p1_btn) && !digitalRead(p2_led)) || !digitalRead(p2_btn) && !digitalRead(p1_led))
{
for (int j = 0; j < 2; j++)
{
time = millis();
while(millis() < time + 100) {}
for (int i = 2; i < 11; i++)
{
digitalWrite(i, HIGH);
}
time = millis();
while(millis() < time + 100) {}
for (int i = 11; i >= 2; i--)
{
digitalWrite(i, LOW);
}
}
}
}
void loop()
{
if (!game_end)
{
if (direction)
{
// to the right
for (int i = 3; i <= 10; i++)
{
digitalWrite(i, HIGH);
time = millis();
while (millis() < time + 200)
{
untimelyPress();
if (!digitalRead(p1_btn) && digitalRead(p2_led))
{
delay(50);
Serial.println("WIN111");
p1_pts++;
Serial.println(p1_pts);
if (p1_pts == 5)
{
victory();
}
else
{
for (int j = 0; j < p1_pts; j++)
{
digitalWrite(p1_led, HIGH);
delay(400);
digitalWrite(p1_led, LOW);
delay(600);
}
}
}
}
digitalWrite(i, LOW);
}
direction = 0;
}
else
{
// to the left
for (int i = 9; i >= 2; i--)
{
digitalWrite(i, HIGH);
time = millis();
while (millis() < time + 200)
{
untimelyPress();
if (!digitalRead(p2_btn) && digitalRead(p1_led))
{
delay(50);
Serial.println("WIN222");
p2_pts++;
Serial.println(p2_pts);
if (p2_pts == 5)
{
victory();
}
else
{
for (int j = 0; j < p2_pts; j++)
{
digitalWrite(p2_led, HIGH);
delay(400);
digitalWrite(p2_led, LOW);
delay(600);
}
}
}
}
digitalWrite(i, LOW);
}
direction = 1;
}
}
}