diff --git a/README.md b/README.md index 8122e27..1d6aa9b 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ A classic implementation of the Pong game developed specifically for the Arduino # 📹 Preview -![Pong](preview.png) +![Pong](assets/preview.png) Youtube: https://youtu.be/ouLBTDjpKqc diff --git a/arduino_pong.ino b/arduino_pong.ino index 90d04a4..36fb857 100644 --- a/arduino_pong.ino +++ b/arduino_pong.ino @@ -30,7 +30,7 @@ int ball_y= BALL_RESET_Y; int need_refresh= 1; -int loop_delay= INITIAL_LOOP_DELAY; +int ball_delay= INITIAL_BALL_DELAY; long exec_t2= millis(); @@ -51,11 +51,14 @@ void loop() { long exec_t1= millis(); pong_move_p1(p1_start, need_refresh); pong_move_p2(p2_start, need_refresh); - render_matrix(frame, p1_start, p2_start, need_refresh, ball_x, ball_y); - if (exec_t1 - exec_t2 > loop_delay) { - move_ball(ball_x, ball_y, loop_delay, p1_start, p2_start, need_refresh); + if (exec_t1 - exec_t2 > ball_delay) { + move_ball(ball_x, ball_y, ball_delay, p1_start, p2_start, need_refresh); exec_t2= exec_t1; } - matrix.renderBitmap(frame, MATRIX_HEIGHT, MATRIX_WIDTH); + if (need_refresh) { + render_matrix(frame, p1_start, p2_start, ball_x, ball_y); + matrix.renderBitmap(frame, MATRIX_HEIGHT, MATRIX_WIDTH); + need_refresh= 0; + } delay(50); } diff --git a/preview.png b/assets/preview.png similarity index 100% rename from preview.png rename to assets/preview.png diff --git a/config.h b/config.h index 026b4c5..05245b9 100644 --- a/config.h +++ b/config.h @@ -8,4 +8,4 @@ #define BALL_RESET_X (MATRIX_WIDTH / 2) #define BALL_RESET_Y (MATRIX_HEIGHT / 2) #define BAR_LENGTH 3 -#define INITIAL_LOOP_DELAY 200 +#define INITIAL_BALL_DELAY 200 diff --git a/pong_ball.cpp b/pong_ball.cpp index f4fabc3..f7c9139 100644 --- a/pong_ball.cpp +++ b/pong_ball.cpp @@ -13,7 +13,7 @@ int p2_score= 0; int ball_move_x= 0; int ball_move_y= 0; -void point_scored(int &ball_x, int &ball_y, int &loop_delay) { +void point_scored(int &ball_x, int &ball_y, int &ball_delay) { ball_x= BALL_RESET_X; ball_y= BALL_RESET_Y; Serial.print("P1: "); @@ -24,10 +24,10 @@ void point_scored(int &ball_x, int &ball_y, int &loop_delay) { Serial.println(); hits= 0; - loop_delay= INITIAL_LOOP_DELAY; + ball_delay= INITIAL_BALL_DELAY; } -void move_ball(int &ball_x, int &ball_y, int &loop_delay, int p1_start, int p2_start, int &need_refresh) { +void move_ball(int &ball_x, int &ball_y, int &ball_delay, int p1_start, int p2_start, int &need_refresh) { need_refresh= 1; if (ball_x < 0 || ball_x > MATRIX_WIDTH-1 || ball_y < 0 || ball_y > MATRIX_HEIGHT-1) { // ball out of matrix limits @@ -52,7 +52,7 @@ void move_ball(int &ball_x, int &ball_y, int &loop_delay, int p1_start, int p2_s // else p2 score, reset board p2_score += 1; Serial.println("Player 2 Scores"); - point_scored(ball_x, ball_y, loop_delay); + point_scored(ball_x, ball_y, ball_delay); } else { hits += 1; @@ -64,7 +64,7 @@ void move_ball(int &ball_x, int &ball_y, int &loop_delay, int p1_start, int p2_s // else p1 score, reset board p1_score += 1; Serial.println("Player 1 Scores"); - point_scored(ball_x, ball_y, loop_delay); + point_scored(ball_x, ball_y, ball_delay); } else { hits += 1; @@ -77,10 +77,10 @@ void move_ball(int &ball_x, int &ball_y, int &loop_delay, int p1_start, int p2_s ball_move_y= ball_move_y * -1; } - if (hits >= 6 && loop_delay >= 80) { + if (hits >= 6 && ball_delay >= 80) { // increase ball speed hits = 0; - loop_delay -= 20; + ball_delay -= 20; } ball_x+= ball_move_x; diff --git a/pong_render.cpp b/pong_render.cpp index d0ae525..01830a2 100644 --- a/pong_render.cpp +++ b/pong_render.cpp @@ -1,9 +1,7 @@ #include #include "config.h" -void render_matrix(byte frame[MATRIX_HEIGHT][MATRIX_WIDTH], int p1_start, int p2_start, int &need_refresh, int ball_x, int ball_y) { - if (!need_refresh) return; - need_refresh= 0; +void render_matrix(byte frame[MATRIX_HEIGHT][MATRIX_WIDTH], int p1_start, int p2_start, int ball_x, int ball_y) { // clear for (int x=0; x < MATRIX_WIDTH; x++) { for (int y=0; y < MATRIX_HEIGHT; y++) { diff --git a/pong_render.h b/pong_render.h index ed6a2b5..11710f9 100644 --- a/pong_render.h +++ b/pong_render.h @@ -4,6 +4,6 @@ #include #include "Arduino_LED_Matrix.h" -void render_matrix(byte frame[MATRIX_HEIGHT][MATRIX_WIDTH], int p1_start, int p2_start, int &need_refresh, int ball_x, int ball_y); +void render_matrix(byte frame[MATRIX_HEIGHT][MATRIX_WIDTH], int p1_start, int p2_start, int ball_x, int ball_y); #endif