Craig Evans
/
ELEC2645_Pong2021
Pong game for ELEC1620 board.
Diff: main.cpp
- 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); + } +}