Pong game for ELEC1620 board.

Revision:
3:5746c6833d73
Parent:
2:482d74ef09c8
--- a/main.cpp	Wed Mar 10 16:37:52 2021 +0000
+++ b/main.cpp	Thu Mar 11 14:54:25 2021 +0000
@@ -19,26 +19,34 @@
 BusOut leds(LED4,LED3,LED2,LED1);
 ShiftReg seven_seg;
 PongEngine pong;
+AnalogIn pot(p17); 
 ///////////// prototypes ///////////////
 void init();
 void render();
 void welcome();
+void display_lives(int lives);
+void game_over();
 ////////////////////////////////////////
 
 int main() {
     init();      // initialise devices and objects
     welcome();   // waiting for the user to start 
     render();    // first draw the initial frame 
-    int fps = 1000/10;  // 10 fps 
-    thread_sleep_for(fps);  // and wait for one frame period - millseconds
+    int fps = 10;
+    thread_sleep_for(1000/fps);  // and wait for one frame period - millseconds
     
-    while (1) {
+    int lives = 4;   // display lives on LEDs
+    display_lives(lives);
+    
+    while (lives > 0) {  // keep looping while lives remain
         // read the joystick input and store in a struct
         UserInput input = {joystick.get_direction(),joystick.get_mag()};
-        pong.update(input);     // update the game engine based on input
-        render();               // draw frame on screen
-        thread_sleep_for(fps);  // and wait for one frame period - ms
-    }
+        lives = pong.update(input);   // update the game engine based on input
+        display_lives(lives);         // display lives on LEDs    
+        render();                     // draw frame on screen
+        thread_sleep_for(1000/fps);         // and wait for one frame period - ms
+    }   
+    game_over();
 }
 
 void init() {
@@ -46,7 +54,7 @@
     lcd.init();
     lcd.setContrast(0.5);
     joystick.init();
-    pong.init(2,8,2,2,2);     // paddle x position, paddle_height,paddle_width,ball_size,speed
+    pong.init(0,8,2,2,2);     // paddle x position, paddle_height,paddle_width,ball_size,speed
 }
 
 void render() {  // clear screen, re-draw and refresh
@@ -61,10 +69,44 @@
     lcd.refresh();
      
     // wait flashing LEDs until button A is pressed 
-    while ( buttonA.read() == 0) {
+    while (buttonA.read() == 0) {
         leds = 0b1111;
         thread_sleep_for(100);
         leds = 0b0000;
         thread_sleep_for(100);   
     }
-}
\ No newline at end of file
+}
+
+void display_lives(int lives) {
+    if (lives == 4) {
+        leds = 0b1111;
+        seven_seg.write(0x66);
+    } else if (lives == 3) {
+        leds = 0b1110;
+        seven_seg.write(0x4F);
+    } else if (lives == 2) {
+        leds = 0b1100;
+        seven_seg.write(0x5B);
+    } else if (lives == 1) {
+        leds = 0b1000;
+        seven_seg.write(0x06);
+    } else {
+        leds = 0b0000;
+        seven_seg.write(0x3F);
+    }
+}
+
+void game_over() { // splash screen 
+    while (1) {
+        lcd.clear();
+        lcd.printString("  Game Over ",0,2);  
+        lcd.printString("    Loser!  ",0,4);
+        lcd.refresh();
+        leds = 0b1111;
+        thread_sleep_for(250);
+        lcd.clear();
+        lcd.refresh();
+        leds = 0b0000;
+        thread_sleep_for(250);   
+    }
+}