Punktstand hinzugefügt

This commit is contained in:
nimeissn 2022-04-27 20:47:36 +02:00
parent 5938001735
commit d4c822b242

View file

@ -27,7 +27,7 @@
#define GAME_DELAY 40 // in ms
#define BALL_DELAY_MAX 200 // in ms
#define BALL_DELAY_MIN 50 // in ms
#define BALL_DELAY_STEP 5 // in ms
#define BALL_DELAY_STEP 10 // in ms
#define PLAYER_AMOUNT 2
#define PLAYER_1 0
@ -40,9 +40,12 @@
#define PADDLE_MOVE_DOWN 2
#define LED_TYPE_OFF 1
#define LED_TYPE_PADDLE 2
#define LED_TYPE_BALL 3
#define LED_TYPE_BALL_RED 4
#define LED_TYPE_PADDLE_BLUE 2
#define LED_TYPE_PADDLE_RED 3
#define LED_TYPE_BALL 4
#define LED_TYPE_BALL_YELLOW 5
#define LED_TYPE_POINTS_BLUE 6
#define LED_TYPE_POINTS_RED 7
#define TONE_PLAYER 1
#define TONE_WALL 2
@ -61,6 +64,9 @@ struct Coords {
byte y;
};
byte pointsPlayerRed =0;
byte pointsPlayerBlue =0;
Adafruit_WS2801 pixels = Adafruit_WS2801((uint16_t)10 ,(uint16_t)20, dataPin, clockPin );
bool buttonPressed = false;
byte gameState;
@ -138,6 +144,7 @@ void loop()
switch(gameState) {
case GAME_STATE_INIT:
initGame();
break;
case GAME_STATE_RUNNING:
@ -154,13 +161,36 @@ void loop()
void initGame()
{
resetLEDs();
lastButtonClick = millis();
ball.y = 1;
ball.x = (X_MAX/2) - (PADDLE_WIDTH/2) + 1;
ballMovement[0] = -1;
ballMovement[1] = 1;
ball.y = random(7,13);
ball.x = random(3,6);
switch(random(3))
{
case 0:
ballMovement[0] = -1;
ballMovement[1] = 1;
break;
case 1:
ballMovement[0] = 1;
ballMovement[1] = -1;
break;
case 2:
ballMovement[0] = -1;
ballMovement[1] = -1;
break;
case 3:
ballMovement[0] = 1;
ballMovement[1] = 1;
break;
}
ballDelay = BALL_DELAY_MAX;
for(byte i=0; i<PADDLE_WIDTH; i++) {
@ -195,9 +225,16 @@ void updateBall()
if (paddles[PLAYER_1][i].x == next_ball_x) {
Serial.println("HIT!! Player 1");
hitBall = true;
break;
}
}
if(hitBall == false)
{
pointsPlayerRed++;
}
}
// collision detection for player 2
@ -208,9 +245,16 @@ void updateBall()
if (paddles[PLAYER_2][i].x == next_ball_x) {
Serial.println("HIT!! Player 1");
hitBall = true;
break;
}
}
if (hitBall == false)
{
pointsPlayerBlue++;
}
}
if (hitBall == true) {
@ -243,7 +287,7 @@ void updateBall()
void endGame()
{
gameState = GAME_STATE_END;
toggleLed(ball.x, ball.y, LED_TYPE_BALL_RED);
toggleLed(ball.x, ball.y, LED_TYPE_BALL_YELLOW);
pixels.show();
playTone(TONE_BUZZ);
}
@ -280,9 +324,45 @@ void updateGame()
// show paddle LEDs
for(byte p=0; p<PLAYER_AMOUNT; p++) {
for(byte i=0; i<PADDLE_WIDTH; i++) {
toggleLed(paddles[p][i].x, paddles[p][i].y, LED_TYPE_PADDLE);
toggleLed(paddles[p][i].x, paddles[p][i].y, LED_TYPE_PADDLE_BLUE+p);
}
}
// show points
for(int i = 0; i<pointsPlayerBlue; i++)
{
Serial.printf("Punkte Player Blue %d\n", pointsPlayerBlue);
toggleLed(0,9-i, LED_TYPE_POINTS_BLUE);
}
for(int i = 0; i<pointsPlayerRed; i++)
{
Serial.printf("Punkte Player Red %d\n", pointsPlayerRed);
toggleLed(0,10+i,LED_TYPE_POINTS_RED);
}
if(pointsPlayerBlue == 5 )
{
pointsPlayerBlue = 0;
pointsPlayerRed = 0;
for (int i =0; i<200; i++)
{
pixels.setPixelColor(i, 0,0,255);
}
}
else if(pointsPlayerRed == 5)
{
pointsPlayerBlue = 0;
pointsPlayerRed = 0;
for (int i =0; i<200; i++)
{
pixels.setPixelColor(i, 255,0,0);
}
}
pixels.show();
}
@ -343,18 +423,27 @@ void toggleLed(byte x, byte y, byte type)
uint32_t color;
switch(type) {
case LED_TYPE_PADDLE:
color = Color(0, 255, 255);
break;
case LED_TYPE_BALL_RED:
case LED_TYPE_PADDLE_RED:
color = Color(255, 0, 0);
break;
case LED_TYPE_PADDLE_BLUE:
color = Color(0,0,255);
break;
case LED_TYPE_BALL_YELLOW:
color = Color(255, 255, 0);
break;
case LED_TYPE_BALL:
color = Color(0, 255, 0);
break;
case LED_TYPE_OFF:
color = Color(0, 0, 0);
break;
case LED_TYPE_POINTS_RED:
color = Color(64,0,0);
break;
case LED_TYPE_POINTS_BLUE:
color = Color(0,0,64);
break;
}
pixels.setPixelColor(ledIndex, color);