From 4b3cc98b1591953e7a585aec54908525d8be28ad Mon Sep 17 00:00:00 2001 From: valvin Date: Sun, 10 Mar 2024 22:01:15 +0100 Subject: [PATCH] feat: add leds integration for lives --- carrot_game/carrot_game.ino | 49 +++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/carrot_game/carrot_game.ino b/carrot_game/carrot_game.ino index 303fad9..10fc73c 100644 --- a/carrot_game/carrot_game.ino +++ b/carrot_game/carrot_game.ino @@ -18,7 +18,9 @@ const unsigned long display_interval = 100; // number of milliseconds we refresh nunchuck info const unsigned long nunchuk_interval = 100; const unsigned int sound_tempo = 10; - +const int dataPin = 11; +const int clockPin = 5; +const int latchPin = 6; U8G2_ST7920_128X64_2_SW_SPI u8g2(U8G2_R0, /* clock=*/ 2, /* data=*/ 10, /* cs=*/ 7); //A5 A4 A3 A2 ArduinoNunchuk nunchuk = ArduinoNunchuk(); @@ -48,9 +50,21 @@ bool game_init = true; bool jump = false; bool jumpBack = false; bool jumpInProgress = false; -unsigned int score = 0; -unsigned int max_score = 0; +int score = 0; +int max_score = 0; short lives = 5; +int lives_leds[] = { + 0b00000000, + 0b00000001, + 0b00000011, + 0b00000111, + 0b00001111, + 0b00011111, + 0b00111111, + 0b00111111, + 0b00111111, + 0b00111111 + }; //set A3 and A2 has +5V / GND void nunchuck_setpowerpins() @@ -62,11 +76,14 @@ void nunchuck_setpowerpins() PORTC |= _BV(pwrpin); delay(100); // wait for things to stabilize } - void setup(void) { //init serial for debug Serial.begin(115200); + //init leds + pinMode( dataPin, OUTPUT ); + pinMode( clockPin, OUTPUT ); + pinMode( latchPin, OUTPUT ); //init nunchuck nunchuck_setpowerpins(); nunchuk.init(); @@ -74,9 +91,18 @@ void setup(void) { u8g2.begin(); //init sound tone1.begin(8); + //test leds + for(int i = 0; i <= 9; i++){ + update_lives_leds(lives_leds[i]); + delay(200); + } } - +void update_lives_leds( int value ){ + digitalWrite( latchPin, LOW ); + shiftOut( dataPin, clockPin, MSBFIRST,value ); + digitalWrite( latchPin, HIGH ); +} void play_intro(){ if(SOUND_ENABLE){ if(millis() >= next_note){ @@ -167,6 +193,7 @@ void init_game(){ score = 0; max_score = 0; lives = 5; + update_lives_leds(lives_leds[lives]); posX = INIT_X; posY = INIT_Y; for ( short i = 0 ; i < NUM_FISHES; i++){ @@ -177,7 +204,7 @@ void init_game(){ void missed_or_bomb(){ score = score - 10; lives = lives - 1; - + update_lives_leds(lives_leds[lives]); play_sound(NOTE_B1,300); if (score <= 0 || lives == 0){ play_sound(NOTE_G1,300); @@ -197,7 +224,10 @@ void compute_fishes_position(){ if(fishes[i][0] <= fish_step) { fishes[i][0] = random(MAX_X+1,255); - missed_or_bomb(); + // do not remove lives if it was a bomb + if(fishes[i][2] != FT_BOMB){ + missed_or_bomb(); + } } //move fish to the left else{ @@ -219,7 +249,10 @@ void compute_fishes_position(){ } if(fishes[i][2] == FT_LIFE){ - lives = lives + 1; + if(lives < 6){ + lives = lives + 1; + update_lives_leds(lives_leds[lives]); + } } fishes[i][0] = random(MAX_X+1,255); //random type