// X-Pong by Hari Wiguna, 2015
// Original idea by Don Lamb
// Arduino Pins
int btnLeft = 13;
int btnRight = 4;
int led0 = 5;
int led7 = led0 + 7;
// Game variables
int ballPosition = 0;
int ballDirection = 0;
int prevBallPosition = 0;
int ballDelay = 100;
int debounceDelay = 200;
// Make code easier to read
int IsPressed = LOW;
void setup() {
Serial.begin(9600);
pinMode(btnLeft, INPUT_PULLUP);
pinMode(btnRight, INPUT_PULLUP);
for (int x = 0; x <= 7; x++)
pinMode(led0 + x, OUTPUT);
}
void loop() {
if (ballDirection == 0)
WaitForServe();
else
{
DrawBall();
DelayBall();
if ((ballPosition == 0) && (ballDirection == -1)) WaitForPlayer(btnLeft, +1, 0);
if ((ballPosition == 7) && (ballDirection == +1)) WaitForPlayer(btnRight, -1, 7);
else {
MoveBall();
}
}
}
void DelayBall()
{
unsigned long timeout = millis() + ballDelay;
while (millis() < timeout)
{
if ((ballPosition != 0 ) && (digitalRead(btnLeft) == IsPressed)) {
GameOver(0);
break;
}
if ((ballPosition != 7) && (digitalRead(btnRight) == IsPressed)) {
GameOver(7);
break;
}
}
}
void WaitForServe()
{
while (true)
{
if (digitalRead(btnLeft) == IsPressed) {
ballPosition = 0;
ballDirection = +1;
break;
}
if (digitalRead(btnRight) == IsPressed) {
ballPosition = 7;
ballDirection = -1;
break;
}
}
delay(200);
}
void SetLED(int which, int state)
{
int pin = led7 - which;
if (pin >= led0 && pin <= led7) digitalWrite(pin, state);
}
void GameOver(int which)
{
for (int n = 0; n < 4; n++)
{
SetLED(which, HIGH);
delay(100);
SetLED(which, LOW);
delay(100);
}
ballDirection = 0;
ballDelay = 200;
}
void MoveBall()
{
prevBallPosition = ballPosition;
ballPosition = ballPosition + ballDirection;
}
void DrawBall()
{
SetLED(prevBallPosition, LOW);
SetLED(ballPosition, HIGH);
}
void WaitForPlayer(int buttonPin, int ballDir, int gameOverPin)
{
ballDirection = 0;
unsigned long timeout = millis() + 1000L;
while (millis() < timeout)
{
if (digitalRead(buttonPin) == IsPressed) {
delay(debounceDelay); // allow button to flutter
ballDirection = ballDir;
ballDelay = ballDelay - 5;
break;
}
}
if (ballDirection == 0)
GameOver(gameOverPin);
}
bruh, really? you gotta do ya boi dirty like that??
shit aint work bruh.
lick my shoes asswipe