Craig Evans
/
ELEC2645_Pong2021
Pong game for ELEC1620 board.
main.cpp@2:482d74ef09c8, 2021-03-10 (annotated)
- Committer:
- eencae
- Date:
- Wed Mar 10 16:37:52 2021 +0000
- Revision:
- 2:482d74ef09c8
- Parent:
- 1:d63a63f0d397
- Child:
- 3:5746c6833d73
Added re-bound off back wall and paddle collisions.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
eencae | 0:be41a15e7a86 | 1 | |
eencae | 1:d63a63f0d397 | 2 | ///////////// includes ///////////////////// |
eencae | 0:be41a15e7a86 | 3 | #include "mbed.h" |
eencae | 0:be41a15e7a86 | 4 | #include "platform/mbed_thread.h" |
eencae | 0:be41a15e7a86 | 5 | #include "Joystick.h" |
eencae | 0:be41a15e7a86 | 6 | #include "N5110.h" |
eencae | 1:d63a63f0d397 | 7 | #include "ShiftReg.h" |
eencae | 1:d63a63f0d397 | 8 | #include "PongEngine.h" |
eencae | 1:d63a63f0d397 | 9 | #include "Utils.h" |
eencae | 1:d63a63f0d397 | 10 | ///////////// defines ///////////////////// |
eencae | 1:d63a63f0d397 | 11 | #define PADDLE_WIDTH 2 |
eencae | 1:d63a63f0d397 | 12 | #define PADDLE_HEIGHT 8 |
eencae | 1:d63a63f0d397 | 13 | #define BALL_SIZE 2 |
eencae | 1:d63a63f0d397 | 14 | #define BALL_SPEED 3 |
eencae | 1:d63a63f0d397 | 15 | ///////////// objects /////////////////// |
eencae | 0:be41a15e7a86 | 16 | N5110 lcd(p14,p8,p9,p10,p11,p13,p21); |
eencae | 1:d63a63f0d397 | 17 | Joystick joystick(p20,p19); |
eencae | 1:d63a63f0d397 | 18 | DigitalIn buttonA(p29); |
eencae | 1:d63a63f0d397 | 19 | BusOut leds(LED4,LED3,LED2,LED1); |
eencae | 1:d63a63f0d397 | 20 | ShiftReg seven_seg; |
eencae | 1:d63a63f0d397 | 21 | PongEngine pong; |
eencae | 1:d63a63f0d397 | 22 | ///////////// prototypes /////////////// |
eencae | 1:d63a63f0d397 | 23 | void init(); |
eencae | 1:d63a63f0d397 | 24 | void render(); |
eencae | 1:d63a63f0d397 | 25 | void welcome(); |
eencae | 1:d63a63f0d397 | 26 | //////////////////////////////////////// |
eencae | 0:be41a15e7a86 | 27 | |
eencae | 1:d63a63f0d397 | 28 | int main() { |
eencae | 1:d63a63f0d397 | 29 | init(); // initialise devices and objects |
eencae | 1:d63a63f0d397 | 30 | welcome(); // waiting for the user to start |
eencae | 1:d63a63f0d397 | 31 | render(); // first draw the initial frame |
eencae | 2:482d74ef09c8 | 32 | int fps = 1000/10; // 10 fps |
eencae | 2:482d74ef09c8 | 33 | thread_sleep_for(fps); // and wait for one frame period - millseconds |
eencae | 1:d63a63f0d397 | 34 | |
eencae | 1:d63a63f0d397 | 35 | while (1) { |
eencae | 1:d63a63f0d397 | 36 | // read the joystick input and store in a struct |
eencae | 1:d63a63f0d397 | 37 | UserInput input = {joystick.get_direction(),joystick.get_mag()}; |
eencae | 1:d63a63f0d397 | 38 | pong.update(input); // update the game engine based on input |
eencae | 1:d63a63f0d397 | 39 | render(); // draw frame on screen |
eencae | 2:482d74ef09c8 | 40 | thread_sleep_for(fps); // and wait for one frame period - ms |
eencae | 1:d63a63f0d397 | 41 | } |
eencae | 1:d63a63f0d397 | 42 | } |
eencae | 0:be41a15e7a86 | 43 | |
eencae | 1:d63a63f0d397 | 44 | void init() { |
eencae | 1:d63a63f0d397 | 45 | seven_seg.write(0x00); // turn of 7-seg display |
eencae | 0:be41a15e7a86 | 46 | lcd.init(); |
eencae | 0:be41a15e7a86 | 47 | lcd.setContrast(0.5); |
eencae | 0:be41a15e7a86 | 48 | joystick.init(); |
eencae | 1:d63a63f0d397 | 49 | pong.init(2,8,2,2,2); // paddle x position, paddle_height,paddle_width,ball_size,speed |
eencae | 1:d63a63f0d397 | 50 | } |
eencae | 1:d63a63f0d397 | 51 | |
eencae | 1:d63a63f0d397 | 52 | void render() { // clear screen, re-draw and refresh |
eencae | 1:d63a63f0d397 | 53 | lcd.clear(); |
eencae | 1:d63a63f0d397 | 54 | pong.draw(lcd); |
eencae | 1:d63a63f0d397 | 55 | lcd.refresh(); |
eencae | 1:d63a63f0d397 | 56 | } |
eencae | 1:d63a63f0d397 | 57 | |
eencae | 1:d63a63f0d397 | 58 | void welcome() { // splash screen |
eencae | 1:d63a63f0d397 | 59 | lcd.printString(" Pong! ",0,1); |
eencae | 1:d63a63f0d397 | 60 | lcd.printString(" Press A ",0,4); |
eencae | 1:d63a63f0d397 | 61 | lcd.refresh(); |
eencae | 1:d63a63f0d397 | 62 | |
eencae | 1:d63a63f0d397 | 63 | // wait flashing LEDs until button A is pressed |
eencae | 1:d63a63f0d397 | 64 | while ( buttonA.read() == 0) { |
eencae | 1:d63a63f0d397 | 65 | leds = 0b1111; |
eencae | 1:d63a63f0d397 | 66 | thread_sleep_for(100); |
eencae | 1:d63a63f0d397 | 67 | leds = 0b0000; |
eencae | 1:d63a63f0d397 | 68 | thread_sleep_for(100); |
eencae | 0:be41a15e7a86 | 69 | } |
eencae | 1:d63a63f0d397 | 70 | } |