Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@3:fe856d0890ee, 2019-03-23 (annotated)
- Committer:
- kocemax
- Date:
- Sat Mar 23 11:17:33 2019 +0000
- Revision:
- 3:fe856d0890ee
- Parent:
- 2:006a2ddfabb6
- Child:
- 4:0e01cbb95434
Have a working collision detection with the pad, if the ball falls below it game over. Will try to move some of the function around the make the code simpler and easier to read.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kocemax | 0:2f0362fef062 | 1 | /* |
kocemax | 0:2f0362fef062 | 2 | ELEC2645 Embedded Systems Project |
kocemax | 0:2f0362fef062 | 3 | School of Electronic & Electrical Engineering University of Leeds |
kocemax | 0:2f0362fef062 | 4 | Name: Kostadin Chakarov |
kocemax | 0:2f0362fef062 | 5 | Username: el17kec |
kocemax | 0:2f0362fef062 | 6 | Student ID Number:201171978 Date:11/03/2019 |
kocemax | 0:2f0362fef062 | 7 | */ |
kocemax | 2:006a2ddfabb6 | 8 | // Breakout++ logo sprite |
kocemax | 1:b82c4c2de9a8 | 9 | const int breakout[10][75] = { |
kocemax | 1:b82c4c2de9a8 | 10 | { 1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0 }, |
kocemax | 1:b82c4c2de9a8 | 11 | { 1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1 }, |
kocemax | 1:b82c4c2de9a8 | 12 | { 1,1,0,0,0,0,1,0,0,1,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,1,0,0,0,0 }, |
kocemax | 1:b82c4c2de9a8 | 13 | { 1,1,0,1,1,1,1,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0 }, |
kocemax | 1:b82c4c2de9a8 | 14 | { 1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0 }, |
kocemax | 1:b82c4c2de9a8 | 15 | { 1,1,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1 }, |
kocemax | 1:b82c4c2de9a8 | 16 | { 1,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,0 }, |
kocemax | 1:b82c4c2de9a8 | 17 | { 1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0 }, |
kocemax | 1:b82c4c2de9a8 | 18 | { 1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0 }, |
kocemax | 1:b82c4c2de9a8 | 19 | { 1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0 }, |
kocemax | 1:b82c4c2de9a8 | 20 | }; |
kocemax | 0:2f0362fef062 | 21 | |
kocemax | 1:b82c4c2de9a8 | 22 | ///////// pre-processor directives //////// |
kocemax | 0:2f0362fef062 | 23 | #include "mbed.h" |
kocemax | 1:b82c4c2de9a8 | 24 | #include "N5110.h" |
kocemax | 1:b82c4c2de9a8 | 25 | #include "Gamepad.h" |
kocemax | 2:006a2ddfabb6 | 26 | #include "PlayerControl.h" |
kocemax | 2:006a2ddfabb6 | 27 | #include "Ball.h" |
kocemax | 1:b82c4c2de9a8 | 28 | |
kocemax | 1:b82c4c2de9a8 | 29 | /////////////// objects /////////////// |
kocemax | 1:b82c4c2de9a8 | 30 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); // K64F - pwr from 3V3 |
kocemax | 1:b82c4c2de9a8 | 31 | Gamepad pad; // Gamepad buttons |
kocemax | 1:b82c4c2de9a8 | 32 | PlayerControl cont; // Object for player |
kocemax | 2:006a2ddfabb6 | 33 | Ball ball; |
kocemax | 1:b82c4c2de9a8 | 34 | |
kocemax | 1:b82c4c2de9a8 | 35 | ///////////// function prototypes /////////////// |
kocemax | 1:b82c4c2de9a8 | 36 | void init(); |
kocemax | 1:b82c4c2de9a8 | 37 | void welcome(); |
kocemax | 1:b82c4c2de9a8 | 38 | void render(); |
kocemax | 0:2f0362fef062 | 39 | |
kocemax | 1:b82c4c2de9a8 | 40 | ///////////// functions //////////////// |
kocemax | 1:b82c4c2de9a8 | 41 | int main() |
kocemax | 1:b82c4c2de9a8 | 42 | { |
kocemax | 1:b82c4c2de9a8 | 43 | int fps = 10; |
kocemax | 1:b82c4c2de9a8 | 44 | init(); |
kocemax | 1:b82c4c2de9a8 | 45 | welcome(); // waiting for the user to start |
kocemax | 1:b82c4c2de9a8 | 46 | while(1) |
kocemax | 1:b82c4c2de9a8 | 47 | { |
kocemax | 1:b82c4c2de9a8 | 48 | render(); |
kocemax | 1:b82c4c2de9a8 | 49 | wait(1.0f/fps); |
kocemax | 3:fe856d0890ee | 50 | if (ball.endCondition(pad)) |
kocemax | 3:fe856d0890ee | 51 | { |
kocemax | 2:006a2ddfabb6 | 52 | break; |
kocemax | 3:fe856d0890ee | 53 | } |
kocemax | 1:b82c4c2de9a8 | 54 | } |
kocemax | 2:006a2ddfabb6 | 55 | lcd.clear(); |
kocemax | 2:006a2ddfabb6 | 56 | lcd.printString("You Lose",20,3); |
kocemax | 2:006a2ddfabb6 | 57 | lcd.refresh(); |
kocemax | 1:b82c4c2de9a8 | 58 | } |
kocemax | 1:b82c4c2de9a8 | 59 | |
kocemax | 1:b82c4c2de9a8 | 60 | void init() |
kocemax | 1:b82c4c2de9a8 | 61 | { |
kocemax | 1:b82c4c2de9a8 | 62 | // need to initialise LCD and Gamepad |
kocemax | 1:b82c4c2de9a8 | 63 | lcd.init(); |
kocemax | 1:b82c4c2de9a8 | 64 | pad.init(); |
kocemax | 1:b82c4c2de9a8 | 65 | lcd.setContrast(0.55); // setting contrast to 55% seems good |
kocemax | 1:b82c4c2de9a8 | 66 | lcd.normalMode(); // normal colour mode |
kocemax | 1:b82c4c2de9a8 | 67 | lcd.setBrightness(0.5); // put LED backlight on 50% |
kocemax | 1:b82c4c2de9a8 | 68 | } |
kocemax | 1:b82c4c2de9a8 | 69 | |
kocemax | 1:b82c4c2de9a8 | 70 | void welcome() |
kocemax | 0:2f0362fef062 | 71 | { |
kocemax | 1:b82c4c2de9a8 | 72 | lcd.printString("Welcome to",12,0); |
kocemax | 1:b82c4c2de9a8 | 73 | // x origin, y origin, rows, cols, sprite |
kocemax | 1:b82c4c2de9a8 | 74 | lcd.drawSprite(5,15,10,75,(int *)breakout); |
kocemax | 1:b82c4c2de9a8 | 75 | lcd.printString("Press Start",9,4); |
kocemax | 1:b82c4c2de9a8 | 76 | lcd.refresh(); |
kocemax | 1:b82c4c2de9a8 | 77 | |
kocemax | 1:b82c4c2de9a8 | 78 | // flash the LEDs until start button is pressed |
kocemax | 1:b82c4c2de9a8 | 79 | while (pad.check_event(Gamepad::START_PRESSED) == false) |
kocemax | 1:b82c4c2de9a8 | 80 | { |
kocemax | 1:b82c4c2de9a8 | 81 | for (int i = 1; i < 7; i++) |
kocemax | 1:b82c4c2de9a8 | 82 | { |
kocemax | 1:b82c4c2de9a8 | 83 | pad.led(i,1); |
kocemax | 1:b82c4c2de9a8 | 84 | wait(0.1); |
kocemax | 1:b82c4c2de9a8 | 85 | pad.led(i,0); |
kocemax | 1:b82c4c2de9a8 | 86 | } |
kocemax | 1:b82c4c2de9a8 | 87 | } |
kocemax | 1:b82c4c2de9a8 | 88 | } |
kocemax | 0:2f0362fef062 | 89 | |
kocemax | 1:b82c4c2de9a8 | 90 | void render() { |
kocemax | 1:b82c4c2de9a8 | 91 | lcd.clear(); // initialise the LCD |
kocemax | 2:006a2ddfabb6 | 92 | cont.drawPlayer(lcd); |
kocemax | 3:fe856d0890ee | 93 | cont.controlPlayer(pad); |
kocemax | 3:fe856d0890ee | 94 | cont.get_padPos(pad); |
kocemax | 2:006a2ddfabb6 | 95 | ball.drawBall(lcd); |
kocemax | 3:fe856d0890ee | 96 | ball.get_ballPos(pad); |
kocemax | 2:006a2ddfabb6 | 97 | ball.moveBall(); |
kocemax | 3:fe856d0890ee | 98 | ball.hitPad(pad); |
kocemax | 1:b82c4c2de9a8 | 99 | lcd.refresh(); |
kocemax | 0:2f0362fef062 | 100 | } |