fixed paddles and tone

This commit is contained in:
jenoack 2022-02-17 08:59:54 +01:00
parent 85e5857a15
commit 68f7e2714f

View file

@ -24,8 +24,8 @@
#define X_MAX 10
#define Y_MAX 20
#define GAME_DELAY 80 // in ms
#define BALL_DELAY_MAX 350 // in ms
#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
@ -64,7 +64,7 @@ struct Coords {
Adafruit_WS2801 pixels = Adafruit_WS2801((uint16_t)10 ,(uint16_t)20, dataPin, clockPin );
bool buttonPressed = false;
byte gameState;
byte joystickPins[PLAYER_AMOUNT] = {PIN_JOYSTICK_1_Y, PIN_JOYSTICK_2_Y};
byte joystickPins[PLAYER_AMOUNT] = {PIN_JOYSTICK_1_X, PIN_JOYSTICK_2_X};
Coords paddles[PLAYER_AMOUNT][PADDLE_WIDTH];
Coords ball;
int ballMovement[2];
@ -127,6 +127,8 @@ void setup()
pixels.begin();
resetLEDs();
Serial.begin(9600);
gameState = GAME_STATE_END;
}
@ -180,10 +182,18 @@ void updateBall()
lastBallUpdate = millis();
toggleLed(ball.x, ball.y, LED_TYPE_OFF);
Serial.printf("ballMovement[1]=%d, ball.y=%d, ball.x=%d\n", ballMovement[1], ball.y, ball.x);
byte next_ball_x = ball.x + ballMovement[0];
byte next_ball_y = ball.y + ballMovement[1];
// collision detection for player 1
if (ballMovement[1] == 1 && ball.y == 1) {
if (ballMovement[1] == -1 && next_ball_y == 0) {
Serial.println("Check Player 1 ...");
for(byte i=0; i<PADDLE_WIDTH; i++) {
if (paddles[PLAYER_1][i].x == ball.x) {
Serial.printf("x[%d]=%d\n", i, paddles[PLAYER_1][i].x );
if (paddles[PLAYER_1][i].x == next_ball_x) {
Serial.println("HIT!! Player 1");
hitBall = true;
break;
}
@ -191,9 +201,12 @@ void updateBall()
}
// collision detection for player 2
if (ballMovement[1] == -1 && ball.y == Y_MAX-2) {
if (ballMovement[1] == 1 && next_ball_y == Y_MAX-1) {
Serial.println("Check Player 2 ...");
for(byte i=0; i<PADDLE_WIDTH; i++) {
if (paddles[PLAYER_2][i].x == ball.x) {
Serial.printf("x[%d]=%d\n", i, paddles[PLAYER_1][i].x );
if (paddles[PLAYER_2][i].x == next_ball_x) {
Serial.println("HIT!! Player 1");
hitBall = true;
break;
}
@ -201,20 +214,22 @@ void updateBall()
}
if (hitBall == true) {
ballMovement[0] *= -1;
ballMovement[1] *= -1;
playTone(TONE_PLAYER);
if (ballDelay > BALL_DELAY_MIN) {
ballDelay -= BALL_DELAY_STEP;
}
}
else{
if (ball.y <=0 || ball.y >= Y_MAX-1) {
endGame();
return;
}
}
ball.x += ballMovement[0];
ball.y += ballMovement[1];
if (ball.y <=0 || ball.y >= Y_MAX-1) {
endGame();
return;
}
if (ball.x <= 0 || ball.x >= X_MAX-1) {
ballMovement[0] *= -1;
@ -275,17 +290,17 @@ byte getPlayerMovement(byte playerId)
{
int value = analogRead(joystickPins[playerId]);
if (value < JOYSTICK_OFFSET_MIN) {
if (playerId == PLAYER_2) {
//if (playerId == PLAYER_2) {
return PADDLE_MOVE_DOWN;
} else {
return PADDLE_MOVE_UP;
}
//} else {
// return PADDLE_MOVE_UP;
//}
} else if (value > JOYSTICK_OFFSET_MAX) {
if (playerId == PLAYER_2) {
//if (playerId == PLAYER_2) {
return PADDLE_MOVE_UP;
} else {
return PADDLE_MOVE_DOWN;
}
//} else {
// return PADDLE_MOVE_DOWN;
//}
}
return PADDLE_MOVE_NONE;
}
@ -349,14 +364,14 @@ void playTone(byte type)
{
switch(type) {
case TONE_PLAYER:
tone(PIN_PIEZO, 440, 50);
tone(PIN_PIEZO, NOTE_A4, 50,0);
break;
case TONE_WALL:
tone(PIN_PIEZO, 550, 50);
tone(PIN_PIEZO, NOTE_CS5, 50,0);
break;
case TONE_BUZZ:
for(byte i=0; i<20; i++) {
tone(PIN_PIEZO, 220-i*10, 50);
tone(PIN_PIEZO, NOTE_A3-i*10, 50,0);
delay(50);
}
break;