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@12:c36bc59d120e, 2018-05-07 (annotated)
- Committer:
- el16a2t
- Date:
- Mon May 07 00:02:49 2018 +0000
- Revision:
- 12:c36bc59d120e
- Parent:
- 11:4907e6e7e855
- Child:
- 13:61aeeb4e4e47
also created another random variable so that each car sprite uses its own random variable rather than both having their co-ordinate set by the same random number. This stops both carsw being in the same lane one after another
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 | 7:d1a1f7c5eb0d | 31 | while (1) { |
| el16a2t | 7:d1a1f7c5eb0d | 32 | |
| el16a2t | 7:d1a1f7c5eb0d | 33 | newGame(); |
| el16a2t | 7:d1a1f7c5eb0d | 34 | gameOver(); |
| el16a2t | 7:d1a1f7c5eb0d | 35 | } |
| el16a2t | 2:a48df109588e | 36 | } |
| el16a2t | 1:a3c9025e0dad | 37 | |
| el16a2t | 2:a48df109588e | 38 | void init() |
| el16a2t | 1:a3c9025e0dad | 39 | { |
| el16a2t | 1:a3c9025e0dad | 40 | |
| el16a2t | 1:a3c9025e0dad | 41 | // initialise the lcd and gamepad |
| el16a2t | 1:a3c9025e0dad | 42 | lcd.init(); |
| el16a2t | 7:d1a1f7c5eb0d | 43 | lcd.setContrast(0.3); |
| el16a2t | 1:a3c9025e0dad | 44 | pad.init (); |
| el16a2t | 7:d1a1f7c5eb0d | 45 | //set initial number of lives to 1 |
| el16a2t | 7:d1a1f7c5eb0d | 46 | lives = 1; |
| el16a2t | 7:d1a1f7c5eb0d | 47 | //set initial location conditions for the player and car(s) and score |
| el16a2t | 7:d1a1f7c5eb0d | 48 | x_player = 24; |
| el16a2t | 7:d1a1f7c5eb0d | 49 | y_player = 29; |
| el16a2t | 11:4907e6e7e855 | 50 | |
| el16a2t | 7:d1a1f7c5eb0d | 51 | |
| el16a2t | 11:4907e6e7e855 | 52 | |
| el16a2t | 7:d1a1f7c5eb0d | 53 | x_car = 4; |
| el16a2t | 7:d1a1f7c5eb0d | 54 | y_car = 0; |
| el16a2t | 8:8d25574b14cd | 55 | x_car2 = 24; |
| el16a2t | 10:e81aacef805b | 56 | y_car2 = -50; |
| el16a2t | 7:d1a1f7c5eb0d | 57 | |
| el16a2t | 7:d1a1f7c5eb0d | 58 | |
| el16a2t | 7:d1a1f7c5eb0d | 59 | //(re)set score to 0 |
| el16a2t | 7:d1a1f7c5eb0d | 60 | score = 0; |
| el16a2t | 2:a48df109588e | 61 | } |
| el16a2t | 1:a3c9025e0dad | 62 | |
| el16a2t | 2:a48df109588e | 63 | |
| el16a2t | 2:a48df109588e | 64 | void startUp() |
| el16a2t | 2:a48df109588e | 65 | { |
| el16a2t | 2:a48df109588e | 66 | //print start screen |
| el16a2t | 2:a48df109588e | 67 | while ( pad.check_event(Gamepad::START_PRESSED) == false) { |
| el16a2t | 11:4907e6e7e855 | 68 | lcd.drawSprite (1,1,20,70,(int*) titlescreen); |
| el16a2t | 11:4907e6e7e855 | 69 | lcd.printString ("PRESS START", 3,5); |
| el16a2t | 11:4907e6e7e855 | 70 | lcd.printString ("SPEED", 3,3); |
| el16a2t | 11:4907e6e7e855 | 71 | pot_value = pad.read_pot(); |
| el16a2t | 11:4907e6e7e855 | 72 | if(pot_value>9.9) { |
| el16a2t | 11:4907e6e7e855 | 73 | pot_value=9.9; |
| el16a2t | 11:4907e6e7e855 | 74 | } |
| el16a2t | 11:4907e6e7e855 | 75 | sprintf (speed, "%.1f", (pot_value*10)); //convert an integer to pointer |
| el16a2t | 11:4907e6e7e855 | 76 | lcd.printString(speed,55,3); |
| el16a2t | 11:4907e6e7e855 | 77 | lcd.refresh(); |
| el16a2t | 11:4907e6e7e855 | 78 | wait(0.2); |
| el16a2t | 2:a48df109588e | 79 | } |
| el16a2t | 2:a48df109588e | 80 | } |
| el16a2t | 2:a48df109588e | 81 | |
| el16a2t | 4:a6ca44e29e97 | 82 | |
| el16a2t | 2:a48df109588e | 83 | |
| el16a2t | 8:8d25574b14cd | 84 | void newGame() |
| el16a2t | 8:8d25574b14cd | 85 | { |
| el16a2t | 11:4907e6e7e855 | 86 | printf("newgamereached\n"); //checking if new game function reached |
| el16a2t | 1:a3c9025e0dad | 87 | |
| el16a2t | 11:4907e6e7e855 | 88 | int Index = rand() % 3; //picks a random number between 1 and 3 |
| el16a2t | 11:4907e6e7e855 | 89 | printf ("Index = %d\n", Index); |
| el16a2t | 11:4907e6e7e855 | 90 | int arr[3] = {4, 24, 44}; //array corresponding to the x values of the 3 lanes of traffic |
| el16a2t | 11:4907e6e7e855 | 91 | int random_number = arr[Index]; //pick number at Index value from array, assign to random_number |
| el16a2t | 11:4907e6e7e855 | 92 | printf ("random_number = %d\n", random_number); |
| el16a2t | 11:4907e6e7e855 | 93 | |
| el16a2t | 11:4907e6e7e855 | 94 | int Index2 = rand() % 3; |
| el16a2t | 11:4907e6e7e855 | 95 | int arr2[3] = {4, 24, 44}; |
| el16a2t | 11:4907e6e7e855 | 96 | int random_number2 = arr2[Index2]; |
| el16a2t | 11:4907e6e7e855 | 97 | |
| el16a2t | 1:a3c9025e0dad | 98 | |
| el16a2t | 1:a3c9025e0dad | 99 | |
| el16a2t | 1:a3c9025e0dad | 100 | |
| el16a2t | 7:d1a1f7c5eb0d | 101 | |
| el16a2t | 11:4907e6e7e855 | 102 | lcd.clear(); |
| el16a2t | 11:4907e6e7e855 | 103 | |
| el16a2t | 11:4907e6e7e855 | 104 | lcd.drawSprite(x_player,y_player,20,15,(int*) player); //print the player sprite |
| el16a2t | 11:4907e6e7e855 | 105 | |
| el16a2t | 11:4907e6e7e855 | 106 | //if X pressed, move player left, if B pressed, move player right |
| el16a2t | 11:4907e6e7e855 | 107 | if ( pad.check_event(Gamepad::X_PRESSED) == true) { |
| el16a2t | 11:4907e6e7e855 | 108 | |
| el16a2t | 11:4907e6e7e855 | 109 | x_player = x_player-20; |
| el16a2t | 11:4907e6e7e855 | 110 | } |
| el16a2t | 11:4907e6e7e855 | 111 | //car cannot go further left than the left lane etc |
| el16a2t | 11:4907e6e7e855 | 112 | if (x_player <4) { |
| el16a2t | 11:4907e6e7e855 | 113 | x_player = 4; |
| el16a2t | 11:4907e6e7e855 | 114 | } |
| el16a2t | 11:4907e6e7e855 | 115 | if ( pad.check_event(Gamepad::B_PRESSED) == true) { |
| el16a2t | 1:a3c9025e0dad | 116 | |
| el16a2t | 11:4907e6e7e855 | 117 | x_player = x_player+20; |
| el16a2t | 11:4907e6e7e855 | 118 | } |
| el16a2t | 11:4907e6e7e855 | 119 | if (x_player >44) { |
| el16a2t | 11:4907e6e7e855 | 120 | x_player = 44; |
| el16a2t | 11:4907e6e7e855 | 121 | } |
| el16a2t | 11:4907e6e7e855 | 122 | |
| el16a2t | 1:a3c9025e0dad | 123 | |
| el16a2t | 11:4907e6e7e855 | 124 | //print road lines |
| el16a2t | 11:4907e6e7e855 | 125 | lcd.drawLine(1,1,1,1500,2); |
| el16a2t | 1:a3c9025e0dad | 126 | |
| el16a2t | 11:4907e6e7e855 | 127 | lcd.drawLine(21,1,21,1500,2); |
| el16a2t | 11:4907e6e7e855 | 128 | |
| el16a2t | 11:4907e6e7e855 | 129 | lcd.drawLine(41,1,41,1500,2); |
| el16a2t | 11:4907e6e7e855 | 130 | |
| el16a2t | 11:4907e6e7e855 | 131 | lcd.drawLine(61,1,61,1500,2); |
| el16a2t | 2:a48df109588e | 132 | |
| el16a2t | 2:a48df109588e | 133 | |
| el16a2t | 2:a48df109588e | 134 | |
| el16a2t | 2:a48df109588e | 135 | |
| el16a2t | 11:4907e6e7e855 | 136 | //cars move down the road |
| el16a2t | 10:e81aacef805b | 137 | |
| el16a2t | 11:4907e6e7e855 | 138 | lcd.drawSprite(x_car,y_car,20,15,(int*) car); |
| el16a2t | 11:4907e6e7e855 | 139 | y_car++; |
| el16a2t | 11:4907e6e7e855 | 140 | lcd.drawSprite(x_car2,y_car2,20,15,(int*) car2); |
| el16a2t | 11:4907e6e7e855 | 141 | y_car2++; |
| el16a2t | 7:d1a1f7c5eb0d | 142 | |
| el16a2t | 11:4907e6e7e855 | 143 | // re-generate cars continously |
| el16a2t | 7:d1a1f7c5eb0d | 144 | |
| el16a2t | 1:a3c9025e0dad | 145 | |
| el16a2t | 11:4907e6e7e855 | 146 | int YIndex = rand() % 4; |
| el16a2t | 11:4907e6e7e855 | 147 | int array[5] = {50, 55, 60, 65, 70}; |
| el16a2t | 11:4907e6e7e855 | 148 | int nextCar = array[YIndex]; |
| el16a2t | 1:a3c9025e0dad | 149 | |
| el16a2t | 11:4907e6e7e855 | 150 | if (y_car == nextCar) { |
| el16a2t | 11:4907e6e7e855 | 151 | x_car = random_number; |
| el16a2t | 11:4907e6e7e855 | 152 | y_car = -24; |
| el16a2t | 7:d1a1f7c5eb0d | 153 | |
| el16a2t | 7:d1a1f7c5eb0d | 154 | |
| el16a2t | 11:4907e6e7e855 | 155 | } |
| el16a2t | 7:d1a1f7c5eb0d | 156 | |
| el16a2t | 11:4907e6e7e855 | 157 | int YIndex2 = rand() % 4; |
| el16a2t | 11:4907e6e7e855 | 158 | int array2[5] = {50, 55, 60, 65, 70}; |
| el16a2t | 11:4907e6e7e855 | 159 | int nextCar2 = array2[YIndex2]; |
| el16a2t | 7:d1a1f7c5eb0d | 160 | |
| el16a2t | 11:4907e6e7e855 | 161 | if (y_car2 == nextCar2) { |
| el16a2t | 11:4907e6e7e855 | 162 | x_car2 = random_number2; |
| el16a2t | 11:4907e6e7e855 | 163 | y_car2 = -24; |
| el16a2t | 2:a48df109588e | 164 | |
| el16a2t | 7:d1a1f7c5eb0d | 165 | |
| el16a2t | 11:4907e6e7e855 | 166 | } |
| el16a2t | 2:a48df109588e | 167 | |
| el16a2t | 2:a48df109588e | 168 | |
| el16a2t | 2:a48df109588e | 169 | |
| el16a2t | 2:a48df109588e | 170 | |
| el16a2t | 11:4907e6e7e855 | 171 | score++;//increase score |
| el16a2t | 11:4907e6e7e855 | 172 | |
| el16a2t | 11:4907e6e7e855 | 173 | // difficulty = read_pot(); |
| el16a2t | 11:4907e6e7e855 | 174 | sprintf (str, "%d", score); //convert an integer to pointer |
| el16a2t | 11:4907e6e7e855 | 175 | lcd.printString(str,64,1); |
| el16a2t | 1:a3c9025e0dad | 176 | |
| el16a2t | 1:a3c9025e0dad | 177 | |
| el16a2t | 11:4907e6e7e855 | 178 | //if there is a collision, display "game over" screen |
| el16a2t | 11:4907e6e7e855 | 179 | if (x_car == x_player && y_car > 12 && y_car < 50) { |
| el16a2t | 11:4907e6e7e855 | 180 | printf("collision1\n");// so i can tell which car sprite the collision was with |
| el16a2t | 11:4907e6e7e855 | 181 | y_car = y_car; |
| el16a2t | 11:4907e6e7e855 | 182 | y_car2 = y_car2; |
| el16a2t | 11:4907e6e7e855 | 183 | score=score; |
| el16a2t | 11:4907e6e7e855 | 184 | lives--; |
| el16a2t | 11:4907e6e7e855 | 185 | printf("lives=%d\n", lives); |
| el16a2t | 11:4907e6e7e855 | 186 | |
| el16a2t | 11:4907e6e7e855 | 187 | } |
| el16a2t | 11:4907e6e7e855 | 188 | if (x_car2 == x_player && y_car2 > 12 && y_car2 < 50) { |
| el16a2t | 11:4907e6e7e855 | 189 | printf("collision2\n"); |
| el16a2t | 11:4907e6e7e855 | 190 | y_car2 = y_car2; |
| el16a2t | 11:4907e6e7e855 | 191 | y_car = y_car; |
| el16a2t | 11:4907e6e7e855 | 192 | score=score; |
| el16a2t | 11:4907e6e7e855 | 193 | lives--; |
| el16a2t | 11:4907e6e7e855 | 194 | printf("lives=%d\n", lives); |
| el16a2t | 11:4907e6e7e855 | 195 | |
| el16a2t | 11:4907e6e7e855 | 196 | } |
| el16a2t | 11:4907e6e7e855 | 197 | |
| el16a2t | 11:4907e6e7e855 | 198 | if ( pad.check_event(Gamepad::X_PRESSED) == true) { |
| el16a2t | 11:4907e6e7e855 | 199 | |
| el16a2t | 11:4907e6e7e855 | 200 | x_player = x_player-20; |
| el16a2t | 11:4907e6e7e855 | 201 | } |
| el16a2t | 11:4907e6e7e855 | 202 | //car cannot go further left than the left lane etc |
| el16a2t | 11:4907e6e7e855 | 203 | if (x_player <4) { |
| el16a2t | 11:4907e6e7e855 | 204 | x_player = 4; |
| el16a2t | 11:4907e6e7e855 | 205 | } |
| el16a2t | 11:4907e6e7e855 | 206 | if ( pad.check_event(Gamepad::B_PRESSED) == true) { |
| el16a2t | 11:4907e6e7e855 | 207 | |
| el16a2t | 11:4907e6e7e855 | 208 | x_player = x_player+20; |
| el16a2t | 11:4907e6e7e855 | 209 | } |
| el16a2t | 11:4907e6e7e855 | 210 | if (x_player >44) { |
| el16a2t | 11:4907e6e7e855 | 211 | x_player = 44; |
| el16a2t | 11:4907e6e7e855 | 212 | } |
| el16a2t | 11:4907e6e7e855 | 213 | |
| el16a2t | 11:4907e6e7e855 | 214 | pot_value = pad.read_pot(); |
| el16a2t | 11:4907e6e7e855 | 215 | printf("pot_value = %f\n", pot_value); |
| el16a2t | 11:4907e6e7e855 | 216 | float wait_time = pot_value/10; |
| el16a2t | 11:4907e6e7e855 | 217 | |
| el16a2t | 11:4907e6e7e855 | 218 | lcd.refresh(); |
| el16a2t | 11:4907e6e7e855 | 219 | |
| el16a2t | 11:4907e6e7e855 | 220 | wait(0.1-wait_time); |
| el16a2t | 1:a3c9025e0dad | 221 | |
| el16a2t | 1:a3c9025e0dad | 222 | |
| el16a2t | 1:a3c9025e0dad | 223 | |
| el16a2t | 1:a3c9025e0dad | 224 | |
| el16a2t | 1:a3c9025e0dad | 225 | |
| el16a2t | 1:a3c9025e0dad | 226 | |
| el16a2t | 1:a3c9025e0dad | 227 | |
| el16a2t | 11:4907e6e7e855 | 228 | |
| el16a2t | 7:d1a1f7c5eb0d | 229 | |
| el16a2t | 7:d1a1f7c5eb0d | 230 | |
| el16a2t | 2:a48df109588e | 231 | } |
| el16a2t | 1:a3c9025e0dad | 232 | |
| el16a2t | 7:d1a1f7c5eb0d | 233 | void gameOver() |
| el16a2t | 7:d1a1f7c5eb0d | 234 | { |
| el16a2t | 7:d1a1f7c5eb0d | 235 | printf("reached gameover\n"); |
| el16a2t | 11:4907e6e7e855 | 236 | if (lives ==0) { |
| el16a2t | 11:4907e6e7e855 | 237 | |
| el16a2t | 7:d1a1f7c5eb0d | 238 | |
| el16a2t | 11:4907e6e7e855 | 239 | while ( pad.check_event(Gamepad::START_PRESSED) == false) { |
| el16a2t | 11:4907e6e7e855 | 240 | |
| el16a2t | 11:4907e6e7e855 | 241 | printf("gameoverlives=%d\n", lives); |
| el16a2t | 11:4907e6e7e855 | 242 | lcd.clear(); |
| el16a2t | 10:e81aacef805b | 243 | |
| el16a2t | 11:4907e6e7e855 | 244 | lcd.printString(str,64,1); |
| el16a2t | 11:4907e6e7e855 | 245 | lcd.printString ("GAME OVER", 3,1); |
| el16a2t | 11:4907e6e7e855 | 246 | lcd.printString ("PRESS START", 3,3); |
| el16a2t | 11:4907e6e7e855 | 247 | lcd.refresh(); |
| el16a2t | 11:4907e6e7e855 | 248 | wait(0.2); |
| el16a2t | 11:4907e6e7e855 | 249 | } |
| el16a2t | 11:4907e6e7e855 | 250 | init (); |
| el16a2t | 7:d1a1f7c5eb0d | 251 | } |
| el16a2t | 11:4907e6e7e855 | 252 | } |