Pong game for ELEC1620 board.

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?

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