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.
Dependencies: mbed
engine/main.cpp@4:a6ca44e29e97, 2018-05-01 (annotated)
- Committer:
- el16a2t
- Date:
- Tue May 01 10:03:55 2018 +0000
- Revision:
- 4:a6ca44e29e97
- Parent:
- 3:124a5eb55c77
- Child:
- 5:cd63b0b896aa
added a second car sprite, so 2 cars to dodge can be on the screen at the same time. added hard-coded condition that when one reaches a set y value, the other spawns (to be changed). cant compile at the mom so may be some errors that need addressing
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el16a2t | 1:a3c9025e0dad | 1 | /* |
el16a2t | 1:a3c9025e0dad | 2 | ELEC2645 Embedded Systems Project |
el16a2t | 1:a3c9025e0dad | 3 | School of Electronic & Electrical Engineering |
el16a2t | 1:a3c9025e0dad | 4 | University of Leeds |
el16a2t | 1:a3c9025e0dad | 5 | Name: Adam Thompson |
el16a2t | 1:a3c9025e0dad | 6 | Username: el16a2t |
el16a2t | 1:a3c9025e0dad | 7 | Student ID Number: 201047832 |
el16a2t | 1:a3c9025e0dad | 8 | Date: 17/4/18 |
el16a2t | 1:a3c9025e0dad | 9 | */ |
el16a2t | 1:a3c9025e0dad | 10 | #include "mbed.h" |
el16a2t | 1:a3c9025e0dad | 11 | #include "Gamepad.h" |
el16a2t | 1:a3c9025e0dad | 12 | #include "N5110.h" |
el16a2t | 1:a3c9025e0dad | 13 | #include "sprites.h" |
el16a2t | 1:a3c9025e0dad | 14 | #include "main.h" |
el16a2t | 1:a3c9025e0dad | 15 | |
el16a2t | 1:a3c9025e0dad | 16 | |
el16a2t | 1:a3c9025e0dad | 17 | N5110 lcd(PTC9, PTC0, PTC7, PTD2, PTD1, PTC11); |
el16a2t | 1:a3c9025e0dad | 18 | Gamepad pad; |
el16a2t | 1:a3c9025e0dad | 19 | |
el16a2t | 2:a48df109588e | 20 | void init(); |
el16a2t | 2:a48df109588e | 21 | void startUp(); |
el16a2t | 2:a48df109588e | 22 | void newGame(); |
el16a2t | 2:a48df109588e | 23 | void gameOver(); |
el16a2t | 1:a3c9025e0dad | 24 | |
el16a2t | 1:a3c9025e0dad | 25 | |
el16a2t | 1:a3c9025e0dad | 26 | int main() |
el16a2t | 2:a48df109588e | 27 | { |
el16a2t | 1:a3c9025e0dad | 28 | |
el16a2t | 2:a48df109588e | 29 | init(); |
el16a2t | 2:a48df109588e | 30 | startUp(); |
el16a2t | 2:a48df109588e | 31 | newGame(); |
el16a2t | 2:a48df109588e | 32 | gameOver(); |
el16a2t | 2:a48df109588e | 33 | } |
el16a2t | 1:a3c9025e0dad | 34 | |
el16a2t | 2:a48df109588e | 35 | void init() |
el16a2t | 1:a3c9025e0dad | 36 | { |
el16a2t | 1:a3c9025e0dad | 37 | |
el16a2t | 1:a3c9025e0dad | 38 | // initialise the lcd and gamepad |
el16a2t | 1:a3c9025e0dad | 39 | lcd.init(); |
el16a2t | 3:124a5eb55c77 | 40 | lcd.setContrast(0.4); |
el16a2t | 1:a3c9025e0dad | 41 | pad.init (); |
el16a2t | 2:a48df109588e | 42 | } |
el16a2t | 1:a3c9025e0dad | 43 | |
el16a2t | 2:a48df109588e | 44 | |
el16a2t | 2:a48df109588e | 45 | void startUp() |
el16a2t | 2:a48df109588e | 46 | { |
el16a2t | 2:a48df109588e | 47 | //print start screen |
el16a2t | 2:a48df109588e | 48 | lcd.drawSprite (1,1,8,20,(int*) titlescreen); |
el16a2t | 2:a48df109588e | 49 | lcd.printString ("PRESS START", 3,1); |
el16a2t | 2:a48df109588e | 50 | lcd.refresh(); |
el16a2t | 2:a48df109588e | 51 | while ( pad.check_event(Gamepad::START_PRESSED) == false) { |
el16a2t | 2:a48df109588e | 52 | |
el16a2t | 2:a48df109588e | 53 | } |
el16a2t | 2:a48df109588e | 54 | } |
el16a2t | 2:a48df109588e | 55 | |
el16a2t | 2:a48df109588e | 56 | void newGame() |
el16a2t | 2:a48df109588e | 57 | { |
el16a2t | 2:a48df109588e | 58 | |
el16a2t | 2:a48df109588e | 59 | |
el16a2t | 4:a6ca44e29e97 | 60 | //set initial location conditions for the player and car(s) and score |
el16a2t | 1:a3c9025e0dad | 61 | x_player = 24; |
el16a2t | 1:a3c9025e0dad | 62 | y_player = 29; |
el16a2t | 1:a3c9025e0dad | 63 | |
el16a2t | 2:a48df109588e | 64 | const int arrayNum[3] = {'4', '24', '44'}; |
el16a2t | 2:a48df109588e | 65 | int RandIndex = rand() % 3; |
el16a2t | 2:a48df109588e | 66 | |
el16a2t | 3:124a5eb55c77 | 67 | x_car = arrayNum[RandIndex]; |
el16a2t | 2:a48df109588e | 68 | y_car = 0; |
el16a2t | 4:a6ca44e29e97 | 69 | |
el16a2t | 4:a6ca44e29e97 | 70 | |
el16a2t | 2:a48df109588e | 71 | |
el16a2t | 2:a48df109588e | 72 | //set score |
el16a2t | 2:a48df109588e | 73 | score = 0; |
el16a2t | 2:a48df109588e | 74 | |
el16a2t | 2:a48df109588e | 75 | |
el16a2t | 2:a48df109588e | 76 | |
el16a2t | 2:a48df109588e | 77 | |
el16a2t | 2:a48df109588e | 78 | |
el16a2t | 2:a48df109588e | 79 | |
el16a2t | 2:a48df109588e | 80 | //main while loop |
el16a2t | 1:a3c9025e0dad | 81 | while (1) { |
el16a2t | 1:a3c9025e0dad | 82 | |
el16a2t | 1:a3c9025e0dad | 83 | lcd.clear(); |
el16a2t | 1:a3c9025e0dad | 84 | |
el16a2t | 1:a3c9025e0dad | 85 | |
el16a2t | 1:a3c9025e0dad | 86 | //print the player sprite |
el16a2t | 1:a3c9025e0dad | 87 | lcd.drawSprite(x_player,y_player,20,15,(int*) player); |
el16a2t | 2:a48df109588e | 88 | //if X pressed, move player left, if B pressed, move player right |
el16a2t | 2:a48df109588e | 89 | if ( pad.check_event(Gamepad::X_PRESSED) == true) { |
el16a2t | 1:a3c9025e0dad | 90 | |
el16a2t | 1:a3c9025e0dad | 91 | x_player = x_player-20; |
el16a2t | 1:a3c9025e0dad | 92 | } |
el16a2t | 3:124a5eb55c77 | 93 | //car cannot go further left than the left lane etc |
el16a2t | 1:a3c9025e0dad | 94 | if (x_player <4) { |
el16a2t | 1:a3c9025e0dad | 95 | x_player = 4; |
el16a2t | 1:a3c9025e0dad | 96 | } |
el16a2t | 2:a48df109588e | 97 | if ( pad.check_event(Gamepad::B_PRESSED) == true) { |
el16a2t | 1:a3c9025e0dad | 98 | |
el16a2t | 1:a3c9025e0dad | 99 | x_player = x_player+20; |
el16a2t | 1:a3c9025e0dad | 100 | } |
el16a2t | 1:a3c9025e0dad | 101 | if (x_player >44) { |
el16a2t | 1:a3c9025e0dad | 102 | x_player = 44; |
el16a2t | 1:a3c9025e0dad | 103 | } |
el16a2t | 1:a3c9025e0dad | 104 | |
el16a2t | 1:a3c9025e0dad | 105 | //print road lines |
el16a2t | 1:a3c9025e0dad | 106 | lcd.drawRect(1,1,1,1500,FILL_BLACK); |
el16a2t | 1:a3c9025e0dad | 107 | |
el16a2t | 1:a3c9025e0dad | 108 | lcd.drawRect(21,1,1,1500,FILL_BLACK); |
el16a2t | 1:a3c9025e0dad | 109 | |
el16a2t | 1:a3c9025e0dad | 110 | lcd.drawRect(41,1,1,1500,FILL_BLACK); |
el16a2t | 1:a3c9025e0dad | 111 | |
el16a2t | 1:a3c9025e0dad | 112 | lcd.drawRect(61,1,1,1500,FILL_BLACK); |
el16a2t | 2:a48df109588e | 113 | |
el16a2t | 2:a48df109588e | 114 | |
el16a2t | 2:a48df109588e | 115 | |
el16a2t | 2:a48df109588e | 116 | |
el16a2t | 2:a48df109588e | 117 | //cars move down the road |
el16a2t | 2:a48df109588e | 118 | |
el16a2t | 2:a48df109588e | 119 | lcd.drawSprite(x_car,y_car,20,15,(int*) car); |
el16a2t | 2:a48df109588e | 120 | y_car++; |
el16a2t | 4:a6ca44e29e97 | 121 | lcd.drawSprite(x_car2,y_car2,20,15,(int*) car2); |
el16a2t | 4:a6ca44e29e97 | 122 | y_car2++; |
el16a2t | 4:a6ca44e29e97 | 123 | |
el16a2t | 4:a6ca44e29e97 | 124 | // re-generate cars continously |
el16a2t | 4:a6ca44e29e97 | 125 | |
el16a2t | 4:a6ca44e29e97 | 126 | if (y_car = 20){ |
el16a2t | 4:a6ca44e29e97 | 127 | x_car2 = arrayNum[RandIndex]; |
el16a2t | 4:a6ca44e29e97 | 128 | y_car2 = -17; |
el16a2t | 4:a6ca44e29e97 | 129 | |
el16a2t | 4:a6ca44e29e97 | 130 | |
el16a2t | 4:a6ca44e29e97 | 131 | } |
el16a2t | 4:a6ca44e29e97 | 132 | |
el16a2t | 4:a6ca44e29e97 | 133 | if (y_car2 = 20){ |
el16a2t | 4:a6ca44e29e97 | 134 | x_car = arrayNum[RandIndex]; |
el16a2t | 4:a6ca44e29e97 | 135 | y_car = -17; |
el16a2t | 4:a6ca44e29e97 | 136 | |
el16a2t | 4:a6ca44e29e97 | 137 | |
el16a2t | 4:a6ca44e29e97 | 138 | } |
el16a2t | 1:a3c9025e0dad | 139 | |
el16a2t | 4:a6ca44e29e97 | 140 | //display score |
el16a2t | 2:a48df109588e | 141 | score++; |
el16a2t | 1:a3c9025e0dad | 142 | |
el16a2t | 2:a48df109588e | 143 | // difficulty = read_pot(); |
el16a2t | 2:a48df109588e | 144 | sprintf (str, "%d", score); |
el16a2t | 2:a48df109588e | 145 | lcd.printString(str,64,1); |
el16a2t | 4:a6ca44e29e97 | 146 | |
el16a2t | 4:a6ca44e29e97 | 147 | |
el16a2t | 4:a6ca44e29e97 | 148 | //if there is a collision, display "game over" screen |
el16a2t | 4:a6ca44e29e97 | 149 | if (x_car = x_player && y_car = 12){ |
el16a2t | 4:a6ca44e29e97 | 150 | printf("collision"); |
el16a2t | 4:a6ca44e29e97 | 151 | y_car = 12; |
el16a2t | 4:a6ca44e29e97 | 152 | score=score; |
el16a2t | 4:a6ca44e29e97 | 153 | wait(0.5); |
el16a2t | 4:a6ca44e29e97 | 154 | gameOver(); |
el16a2t | 4:a6ca44e29e97 | 155 | |
el16a2t | 4:a6ca44e29e97 | 156 | } |
el16a2t | 2:a48df109588e | 157 | |
el16a2t | 2:a48df109588e | 158 | |
el16a2t | 2:a48df109588e | 159 | |
el16a2t | 2:a48df109588e | 160 | |
el16a2t | 2:a48df109588e | 161 | |
el16a2t | 1:a3c9025e0dad | 162 | |
el16a2t | 1:a3c9025e0dad | 163 | |
el16a2t | 1:a3c9025e0dad | 164 | |
el16a2t | 1:a3c9025e0dad | 165 | lcd.refresh(); |
el16a2t | 2:a48df109588e | 166 | wait(0.1); |
el16a2t | 1:a3c9025e0dad | 167 | |
el16a2t | 1:a3c9025e0dad | 168 | |
el16a2t | 1:a3c9025e0dad | 169 | |
el16a2t | 1:a3c9025e0dad | 170 | |
el16a2t | 1:a3c9025e0dad | 171 | |
el16a2t | 1:a3c9025e0dad | 172 | |
el16a2t | 1:a3c9025e0dad | 173 | |
el16a2t | 1:a3c9025e0dad | 174 | } |
el16a2t | 4:a6ca44e29e97 | 175 | |
el16a2t | 4:a6ca44e29e97 | 176 | |
el16a2t | 2:a48df109588e | 177 | } |
el16a2t | 1:a3c9025e0dad | 178 | |
el16a2t | 4:a6ca44e29e97 | 179 | void gameOver(){ |
el16a2t | 1:a3c9025e0dad | 180 | |
el16a2t | 4:a6ca44e29e97 | 181 | lcd.clear(); |
el16a2t | 4:a6ca44e29e97 | 182 | lcd.printString(str,64,1); |
el16a2t | 4:a6ca44e29e97 | 183 | lcd.printString ("GAME OVER", 3,1); |
el16a2t | 4:a6ca44e29e97 | 184 | lcd.printString ("PRESS START TO TRY AGAIN ", 3,10); |
el16a2t | 4:a6ca44e29e97 | 185 | |
el16a2t | 4:a6ca44e29e97 | 186 | if ( pad.check_event(Gamepad::START_PRESSED) == true) { |
el16a2t | 4:a6ca44e29e97 | 187 | |
el16a2t | 4:a6ca44e29e97 | 188 | newGame(); |
el16a2t | 4:a6ca44e29e97 | 189 | |
el16a2t | 4:a6ca44e29e97 | 190 | } |