Pong game for ELEC1620 board.

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?

UserRevisionLine numberNew 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 }