ELEC2645 (2017/18) / Mbed 2 deprecated el16a2t

Dependencies:   mbed

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?

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