Example Pong game for mbed.

Dependencies:   mbed

Committer:
eencae
Date:
Sun Mar 05 23:19:55 2017 +0000
Revision:
4:d349e5d847cf
Parent:
3:910d7e87f367
Child:
6:d9d05b321b4d
Improved collision detection

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 0:e1442f3aa3c7 1 ///////// pre-processor directives ////////
eencae 0:e1442f3aa3c7 2 #include "mbed.h"
eencae 0:e1442f3aa3c7 3 #include "Gamepad.h"
eencae 0:e1442f3aa3c7 4 #include "N5110.h"
eencae 0:e1442f3aa3c7 5 #include "PongEngine.h"
eencae 0:e1442f3aa3c7 6
eencae 0:e1442f3aa3c7 7 #define PADDLE_WIDTH 2
eencae 4:d349e5d847cf 8 #define PADDLE_HEIGHT 8
eencae 4:d349e5d847cf 9 #define BALL_SIZE 2
eencae 0:e1442f3aa3c7 10 #define BALL_SPEED 3
eencae 1:25a839625a1e 11
eencae 0:e1442f3aa3c7 12 /////////////// structs /////////////////
eencae 0:e1442f3aa3c7 13 struct UserInput {
eencae 0:e1442f3aa3c7 14 Direction d;
eencae 0:e1442f3aa3c7 15 float mag;
eencae 0:e1442f3aa3c7 16 };
eencae 0:e1442f3aa3c7 17 /////////////// objects ///////////////
eencae 0:e1442f3aa3c7 18 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
eencae 0:e1442f3aa3c7 19 Gamepad pad;
eencae 0:e1442f3aa3c7 20 PongEngine pong;
eencae 0:e1442f3aa3c7 21 ///////////// prototypes ///////////////
eencae 0:e1442f3aa3c7 22 void init();
eencae 0:e1442f3aa3c7 23 void update_game(UserInput input);
eencae 0:e1442f3aa3c7 24 void render();
eencae 3:910d7e87f367 25 void welcome();
eencae 0:e1442f3aa3c7 26 ///////////// functions ////////////////
eencae 0:e1442f3aa3c7 27 int main()
eencae 0:e1442f3aa3c7 28 {
eencae 3:910d7e87f367 29 int fps = 8; // frames per second
eencae 0:e1442f3aa3c7 30
eencae 1:25a839625a1e 31 init();
eencae 3:910d7e87f367 32 welcome();
eencae 1:25a839625a1e 33
eencae 1:25a839625a1e 34 render(); // draw initial frame
eencae 3:910d7e87f367 35 wait(1.0f/fps);
eencae 0:e1442f3aa3c7 36
eencae 4:d349e5d847cf 37 // game loop - read input, update the game state and render the display
eencae 0:e1442f3aa3c7 38 while (1) {
eencae 1:25a839625a1e 39 pong.read_input(pad);
eencae 1:25a839625a1e 40 pong.update(pad);
eencae 0:e1442f3aa3c7 41 render();
eencae 0:e1442f3aa3c7 42 wait(1.0f/fps);
eencae 0:e1442f3aa3c7 43 }
eencae 0:e1442f3aa3c7 44 }
eencae 0:e1442f3aa3c7 45
eencae 0:e1442f3aa3c7 46 void init()
eencae 0:e1442f3aa3c7 47 {
eencae 3:910d7e87f367 48 // need to initialise LCD and Gamepad
eencae 0:e1442f3aa3c7 49 lcd.init();
eencae 0:e1442f3aa3c7 50 pad.init();
eencae 3:910d7e87f367 51
eencae 3:910d7e87f367 52 // initialise the game
eencae 4:d349e5d847cf 53 pong.init(PADDLE_WIDTH,PADDLE_HEIGHT,BALL_SIZE,BALL_SPEED);
eencae 0:e1442f3aa3c7 54
eencae 0:e1442f3aa3c7 55 }
eencae 0:e1442f3aa3c7 56
eencae 0:e1442f3aa3c7 57 void render()
eencae 0:e1442f3aa3c7 58 {
eencae 3:910d7e87f367 59 // clear screen, re-draw and refresh
eencae 3:910d7e87f367 60 lcd.clear();
eencae 1:25a839625a1e 61 pong.draw(lcd);
eencae 0:e1442f3aa3c7 62 lcd.refresh();
eencae 3:910d7e87f367 63 }
eencae 3:910d7e87f367 64
eencae 3:910d7e87f367 65 void welcome() {
eencae 3:910d7e87f367 66
eencae 4:d349e5d847cf 67 lcd.printString(" Pong! ",0,1);
eencae 4:d349e5d847cf 68 lcd.printString(" Press Start ",0,4);
eencae 3:910d7e87f367 69 lcd.refresh();
eencae 3:910d7e87f367 70
eencae 3:910d7e87f367 71 // wait flashing LEDs until start button is pressed
eencae 3:910d7e87f367 72 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
eencae 3:910d7e87f367 73 pad.leds_on();
eencae 3:910d7e87f367 74 wait(0.1);
eencae 3:910d7e87f367 75 pad.leds_off();
eencae 3:910d7e87f367 76 wait(0.1);
eencae 3:910d7e87f367 77 }
eencae 3:910d7e87f367 78
eencae 0:e1442f3aa3c7 79 }