Example Pong game for mbed.

Dependencies:   mbed

Committer:
valavanisalex
Date:
Tue Apr 17 08:00:08 2018 +0000
Revision:
11:1447cb7dce3c
Parent:
10:167d0aa1c9b3
Correct type error and add documentation

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
valavanisalex 10:167d0aa1c9b3 7 #ifdef WITH_TESTING
valavanisalex 10:167d0aa1c9b3 8 # include "tests.h"
valavanisalex 10:167d0aa1c9b3 9 #endif
valavanisalex 10:167d0aa1c9b3 10
eencae 0:e1442f3aa3c7 11 #define PADDLE_WIDTH 2
eencae 4:d349e5d847cf 12 #define PADDLE_HEIGHT 8
eencae 4:d349e5d847cf 13 #define BALL_SIZE 2
eencae 0:e1442f3aa3c7 14 #define BALL_SPEED 3
eencae 1:25a839625a1e 15
eencae 0:e1442f3aa3c7 16 /////////////// structs /////////////////
eencae 0:e1442f3aa3c7 17 struct UserInput {
eencae 0:e1442f3aa3c7 18 Direction d;
eencae 0:e1442f3aa3c7 19 float mag;
eencae 0:e1442f3aa3c7 20 };
eencae 0:e1442f3aa3c7 21 /////////////// objects ///////////////
eencae 0:e1442f3aa3c7 22 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
eencae 0:e1442f3aa3c7 23 Gamepad pad;
eencae 0:e1442f3aa3c7 24 PongEngine pong;
eencae 6:d9d05b321b4d 25
eencae 0:e1442f3aa3c7 26 ///////////// prototypes ///////////////
eencae 0:e1442f3aa3c7 27 void init();
eencae 0:e1442f3aa3c7 28 void update_game(UserInput input);
eencae 0:e1442f3aa3c7 29 void render();
eencae 3:910d7e87f367 30 void welcome();
eencae 6:d9d05b321b4d 31
eencae 0:e1442f3aa3c7 32 ///////////// functions ////////////////
eencae 0:e1442f3aa3c7 33 int main()
eencae 0:e1442f3aa3c7 34 {
valavanisalex 10:167d0aa1c9b3 35 #ifdef WITH_TESTING
valavanisalex 10:167d0aa1c9b3 36 int number_of_failures = run_all_tests();
valavanisalex 10:167d0aa1c9b3 37
valavanisalex 10:167d0aa1c9b3 38 if(number_of_failures > 0) return number_of_failures;
valavanisalex 10:167d0aa1c9b3 39 #endif
valavanisalex 10:167d0aa1c9b3 40
eencae 3:910d7e87f367 41 int fps = 8; // frames per second
eencae 0:e1442f3aa3c7 42
eencae 6:d9d05b321b4d 43 init(); // initialise and then display welcome screen...
eencae 6:d9d05b321b4d 44 welcome(); // waiting for the user to start
eencae 1:25a839625a1e 45
eencae 6:d9d05b321b4d 46 render(); // first draw the initial frame
eencae 6:d9d05b321b4d 47 wait(1.0f/fps); // and wait for one frame period
eencae 6:d9d05b321b4d 48
eencae 0:e1442f3aa3c7 49
eencae 4:d349e5d847cf 50 // game loop - read input, update the game state and render the display
eencae 0:e1442f3aa3c7 51 while (1) {
eencae 1:25a839625a1e 52 pong.read_input(pad);
eencae 1:25a839625a1e 53 pong.update(pad);
eencae 0:e1442f3aa3c7 54 render();
eencae 0:e1442f3aa3c7 55 wait(1.0f/fps);
eencae 0:e1442f3aa3c7 56 }
eencae 0:e1442f3aa3c7 57 }
eencae 0:e1442f3aa3c7 58
eencae 6:d9d05b321b4d 59 // initialies all classes and libraries
eencae 0:e1442f3aa3c7 60 void init()
eencae 0:e1442f3aa3c7 61 {
eencae 3:910d7e87f367 62 // need to initialise LCD and Gamepad
eencae 0:e1442f3aa3c7 63 lcd.init();
eencae 0:e1442f3aa3c7 64 pad.init();
eencae 3:910d7e87f367 65
eencae 6:d9d05b321b4d 66 // initialise the game with correct ball and paddle sizes
eencae 4:d349e5d847cf 67 pong.init(PADDLE_WIDTH,PADDLE_HEIGHT,BALL_SIZE,BALL_SPEED);
eencae 0:e1442f3aa3c7 68
eencae 0:e1442f3aa3c7 69 }
eencae 0:e1442f3aa3c7 70
eencae 6:d9d05b321b4d 71 // this function draws each frame on the LCD
eencae 0:e1442f3aa3c7 72 void render()
eencae 0:e1442f3aa3c7 73 {
eencae 3:910d7e87f367 74 // clear screen, re-draw and refresh
eencae 3:910d7e87f367 75 lcd.clear();
eencae 1:25a839625a1e 76 pong.draw(lcd);
eencae 0:e1442f3aa3c7 77 lcd.refresh();
eencae 3:910d7e87f367 78 }
eencae 3:910d7e87f367 79
eencae 6:d9d05b321b4d 80 // simple splash screen displayed on start-up
eencae 3:910d7e87f367 81 void welcome() {
eencae 3:910d7e87f367 82
eencae 4:d349e5d847cf 83 lcd.printString(" Pong! ",0,1);
eencae 4:d349e5d847cf 84 lcd.printString(" Press Start ",0,4);
eencae 3:910d7e87f367 85 lcd.refresh();
eencae 3:910d7e87f367 86
eencae 3:910d7e87f367 87 // wait flashing LEDs until start button is pressed
eencae 3:910d7e87f367 88 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
eencae 3:910d7e87f367 89 pad.leds_on();
eencae 3:910d7e87f367 90 wait(0.1);
eencae 3:910d7e87f367 91 pad.leds_off();
eencae 3:910d7e87f367 92 wait(0.1);
eencae 3:910d7e87f367 93 }
eencae 3:910d7e87f367 94
eencae 0:e1442f3aa3c7 95 }