feat: add display column + max score

This commit is contained in:
valvin 2024-02-18 13:36:21 +01:00
parent 81de1c82de
commit 810745b483
1 changed files with 50 additions and 17 deletions

View File

@ -11,8 +11,11 @@
const bool SOUND_ENABLE = false; const bool SOUND_ENABLE = false;
const short INIT_X = 0; const short INIT_X = 0;
const short INIT_Y = 48; const short INIT_Y = 48;
const short MAX_X = 90;
// number of milliseconds we refresh screen
const unsigned long display_interval = 100; const unsigned long display_interval = 100;
// number of milliseconds we refresh nunchuck info
const unsigned long nunchuk_interval = 100; const unsigned long nunchuk_interval = 100;
const unsigned int sound_tempo = 10; const unsigned int sound_tempo = 10;
@ -21,9 +24,11 @@ U8G2_ST7920_128X64_2_SW_SPI u8g2(U8G2_R0, /* clock=*/ 2, /* data=*/ 10, /* cs=*/
ArduinoNunchuk nunchuk = ArduinoNunchuk(); ArduinoNunchuk nunchuk = ArduinoNunchuk();
Tone tone1; Tone tone1;
// Carrot position
short posX = INIT_X; short posX = INIT_X;
short posY = INIT_Y; short posY = INIT_Y;
unsigned int nextLaneY = INIT_Y - 16; unsigned int nextLaneY = INIT_Y - 16;
unsigned long last_display = millis(); unsigned long last_display = millis();
unsigned long last_nunchuck = millis(); unsigned long last_nunchuck = millis();
unsigned long last_note = millis(); unsigned long last_note = millis();
@ -31,12 +36,16 @@ unsigned long next_note = millis();
short notes_index = 0; short notes_index = 0;
short intro_size = sizeof(notes_intro)/sizeof(notes_intro[0]); short intro_size = sizeof(notes_intro)/sizeof(notes_intro[0]);
short fishes[8][2] = {{random(128,255) , 32}, {random(128,255) , 32}, {random(128,255),48}, {random(128,255),48}, {random(128,255),16}, {random(128,255),16}, {random(128,255),1}, {random(128,255) , 1} }; short fishes[8][2] = {
{0,1},{0,1},{0,16},{0,16},
{0,32},{0,32},{0,48},{0,48}
};
bool game_init = true; bool game_init = true;
bool jump = false; bool jump = false;
bool jumpBack = false; bool jumpBack = false;
bool jumpInProgress = false; bool jumpInProgress = false;
unsigned int score = 50; unsigned int score = 0;
unsigned int max_score = 0;
//set A3 and A2 has +5V / GND //set A3 and A2 has +5V / GND
void nunchuck_setpowerpins() void nunchuck_setpowerpins()
@ -89,36 +98,58 @@ void display_welcome_page() {
} }
void display_game() { void display_game() {
u8g2.setFont(u8g2_font_4x6_tf);
u8g2.drawStr(108, 50, "SCORE:");
u8g2.drawStr(108, 10, "MAX:");
//draw score
u8g2.setFont(u8g2_font_5x7_mf); u8g2.setFont(u8g2_font_5x7_mf);
char score_str[] = "000"; char score_str[] = "000";
sprintf(score_str, "%03d", score); sprintf(score_str, "%03d", score);
u8g2.drawStr(110, 62, score_str); u8g2.drawStr(110, 62, score_str);
sprintf(score_str, "%03d", max_score);
u8g2.drawStr(110, 20, score_str);
//draw fishes
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
if(fishes[i][0] != NULL){ if(fishes[i][0] != NULL){
if(fishes[i][0] < MAX_X){
u8g2.drawXBMP(fishes[i][0], fishes[i][1], 16, 16, fish_reverse); u8g2.drawXBMP(fishes[i][0], fishes[i][1], 16, 16, fish_reverse);
} }
} }
}
//draw carrot
u8g2.drawXBMP(posX, posY, 16, 16, carrot); u8g2.drawXBMP(posX, posY, 16, 16, carrot);
//swimelanes //swimelanes
u8g2.drawHLine(0, 0, 128); //top u8g2.drawHLine(0, 0, MAX_X + 16); //top
u8g2.drawHLine(0, 16, 128); u8g2.drawHLine(0, 16, MAX_X + 16);
u8g2.drawHLine(0, 32, 128); u8g2.drawHLine(0, 32, MAX_X + 16);
u8g2.drawHLine(0, 48, 128); u8g2.drawHLine(0, 48, MAX_X + 16);
u8g2.drawHLine(0, 63, 128); //bottom u8g2.drawHLine(0, 63, MAX_X + 16); //bottom
u8g2.drawVLine(MAX_X + 16, 0, 48);
}
void init_game(){
score = 0;
posX = INIT_X;
posY = INIT_Y;
for ( short i = 0 ; i < 8; i++){
fishes[i][0]= random(MAX_X + 1,255);
}
} }
void compute_fishes_position(){ void compute_fishes_position(){
short fish_step = (200 + score)/100; short fish_step = (200 + score)/100;
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
if(fishes[i][0] != NULL){ if(fishes[i][0] != NULL){
//fish alive
if(fishes[i][0] <= fish_step) if(fishes[i][0] <= fish_step)
{ {
fishes[i][0] = 128; fishes[i][0] = random(MAX_X+1,255);
score = score - 10; score = score - 10;
play_sound(NOTE_B1,300); play_sound(NOTE_B1,300);
//end game
if (score <= 0){ if (score <= 0){
play_sound(NOTE_G1,300); play_sound(NOTE_G1,300);
play_sound(NOTE_F1,300); play_sound(NOTE_F1,300);
@ -128,15 +159,20 @@ void compute_fishes_position(){
game_init = true; game_init = true;
} }
} }
//move fish to the left
else{ else{
fishes[i][0] = fishes[i][0] - fish_step; fishes[i][0] = fishes[i][0] - fish_step;
} }
//does carrot eat the fish //does carrot eat the fish
if( (posX > (fishes[i][0] - 8) && posX < (fishes[i][0] + 8) ) && (posY > (fishes[i][1] - 8) && posY < (fishes[i][1] + 8) )){ if( (posX > (fishes[i][0] - 8) && posX < (fishes[i][0] + 8) )
&& (posY > (fishes[i][1] - 8) && posY < (fishes[i][1] + 8) )
){
fishes[i][0] = random(128,255); fishes[i][0] = random(128,255);
play_sound(NOTE_B5,100); play_sound(NOTE_B5,100);
score = score + 10; score = score + 10;
if (score > max_score){
max_score = score;
}
} }
Serial.print("score: "); Serial.print("score: ");
Serial.println(score); Serial.println(score);
@ -145,7 +181,7 @@ void compute_fishes_position(){
} }
void compute_cat_position() { void compute_cat_position() {
if (game_init) { if (game_init) {
if (posX < 112) { if (posX < MAX_X - 16) {
posX = posX + 2; posX = posX + 2;
} }
else { else {
@ -172,7 +208,7 @@ void compute_cat_position() {
posX = posX - 4; posX = posX - 4;
} }
} }
if (nunchuk.analogX > 140 && posX < 112) { if (nunchuk.analogX > 140 && posX < (MAX_X - 16)) {
if (nunchuk.analogX > 180) { if (nunchuk.analogX > 180) {
posX = posX + 8; posX = posX + 8;
} else { } else {
@ -244,7 +280,6 @@ void loop(void) {
do { do {
if(game_init){ if(game_init){
display_welcome_page(); display_welcome_page();
score = 50;
} else{ } else{
display_game(); display_game();
} }
@ -257,10 +292,8 @@ void loop(void) {
if(init){ if(init){
if(nunchuk.zButton == 1){ if(nunchuk.zButton == 1){
if(game_init){ if(game_init){
init_game();
game_init = false; game_init = false;
//set default pos to avoid issue
posX = INIT_X;
posY = INIT_Y;
} }
} }
} }