Craig Evans
/
ELEC2645_Pong2021
Pong game for ELEC1620 board.
main.cpp@1:d63a63f0d397, 2021-03-05 (annotated)
- Committer:
- eencae
- Date:
- Fri Mar 05 16:58:05 2021 +0000
- Revision:
- 1:d63a63f0d397
- Parent:
- 0:be41a15e7a86
- Child:
- 2:482d74ef09c8
Version ported to ELEC1620 development board.
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 | 1:d63a63f0d397 | 32 | thread_sleep_for(500); // and wait for one frame period (100 ms - 10 fps |
eencae | 1:d63a63f0d397 | 33 | |
eencae | 1:d63a63f0d397 | 34 | while (1) { |
eencae | 1:d63a63f0d397 | 35 | // read the joystick input and store in a struct |
eencae | 1:d63a63f0d397 | 36 | UserInput input = {joystick.get_direction(),joystick.get_mag()}; |
eencae | 1:d63a63f0d397 | 37 | pong.update(input); // update the game engine based on input |
eencae | 1:d63a63f0d397 | 38 | render(); // draw frame on screen |
eencae | 1:d63a63f0d397 | 39 | thread_sleep_for(500); // 100 ms - 10 f.p.s |
eencae | 1:d63a63f0d397 | 40 | } |
eencae | 1:d63a63f0d397 | 41 | } |
eencae | 0:be41a15e7a86 | 42 | |
eencae | 1:d63a63f0d397 | 43 | void init() { |
eencae | 1:d63a63f0d397 | 44 | seven_seg.write(0x00); // turn of 7-seg display |
eencae | 0:be41a15e7a86 | 45 | lcd.init(); |
eencae | 0:be41a15e7a86 | 46 | lcd.setContrast(0.5); |
eencae | 0:be41a15e7a86 | 47 | joystick.init(); |
eencae | 1:d63a63f0d397 | 48 | pong.init(2,8,2,2,2); // paddle x position, paddle_height,paddle_width,ball_size,speed |
eencae | 1:d63a63f0d397 | 49 | } |
eencae | 1:d63a63f0d397 | 50 | |
eencae | 1:d63a63f0d397 | 51 | void render() { // clear screen, re-draw and refresh |
eencae | 1:d63a63f0d397 | 52 | lcd.clear(); |
eencae | 1:d63a63f0d397 | 53 | pong.draw(lcd); |
eencae | 1:d63a63f0d397 | 54 | lcd.refresh(); |
eencae | 1:d63a63f0d397 | 55 | } |
eencae | 1:d63a63f0d397 | 56 | |
eencae | 1:d63a63f0d397 | 57 | void welcome() { // splash screen |
eencae | 1:d63a63f0d397 | 58 | lcd.printString(" Pong! ",0,1); |
eencae | 1:d63a63f0d397 | 59 | lcd.printString(" Press A ",0,4); |
eencae | 1:d63a63f0d397 | 60 | lcd.refresh(); |
eencae | 1:d63a63f0d397 | 61 | |
eencae | 1:d63a63f0d397 | 62 | // wait flashing LEDs until button A is pressed |
eencae | 1:d63a63f0d397 | 63 | while ( buttonA.read() == 0) { |
eencae | 1:d63a63f0d397 | 64 | leds = 0b1111; |
eencae | 1:d63a63f0d397 | 65 | thread_sleep_for(100); |
eencae | 1:d63a63f0d397 | 66 | leds = 0b0000; |
eencae | 1:d63a63f0d397 | 67 | thread_sleep_for(100); |
eencae | 0:be41a15e7a86 | 68 | } |
eencae | 1:d63a63f0d397 | 69 | } |