ELEC2645 (2017/18) / Mbed 2 deprecated el16a2t

Dependencies:   mbed

Committer:
el16a2t
Date:
Sun May 06 21:45:41 2018 +0000
Revision:
10:e81aacef805b
Parent:
9:514c6f98ca5a
Child:
11:4907e6e7e855
randomised when the next car spawns down the screen by using a range of values in an array that selects at which y value the next car spawns

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 8:8d25574b14cd 50
el16a2t 7:d1a1f7c5eb0d 51
el16a2t 8:8d25574b14cd 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 9:514c6f98ca5a 67 lcd.drawSprite (1,1,20,70,(int*) titlescreen);
el16a2t 9:514c6f98ca5a 68 lcd.printString ("PRESS START", 3,4);
el16a2t 2:a48df109588e 69 lcd.refresh();
el16a2t 2:a48df109588e 70 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
el16a2t 2:a48df109588e 71
el16a2t 2:a48df109588e 72 }
el16a2t 2:a48df109588e 73 }
el16a2t 2:a48df109588e 74
el16a2t 4:a6ca44e29e97 75
el16a2t 2:a48df109588e 76
el16a2t 8:8d25574b14cd 77 void newGame()
el16a2t 8:8d25574b14cd 78 {
el16a2t 8:8d25574b14cd 79 printf("newgamereached\n"); //checking if new game function reached
el16a2t 2:a48df109588e 80
el16a2t 8:8d25574b14cd 81 int Index = rand() % 3; //picks a random number between 1 and 3
el16a2t 8:8d25574b14cd 82 printf ("Index = %d\n", Index);
el16a2t 8:8d25574b14cd 83 int arr[3] = {4, 24, 44}; //array corresponding to the x values of the 3 lanes of traffic
el16a2t 8:8d25574b14cd 84 int random_number = arr[Index]; //pick number at Index value from array, assign to random_number
el16a2t 8:8d25574b14cd 85 printf ("random_number = %d\n", random_number);
el16a2t 10:e81aacef805b 86
el16a2t 10:e81aacef805b 87
el16a2t 1:a3c9025e0dad 88
el16a2t 10:e81aacef805b 89
el16a2t 1:a3c9025e0dad 90 lcd.clear();
el16a2t 1:a3c9025e0dad 91
el16a2t 8:8d25574b14cd 92 lcd.drawSprite(x_player,y_player,20,15,(int*) player); //print the player sprite
el16a2t 8:8d25574b14cd 93
el16a2t 7:d1a1f7c5eb0d 94 //if X pressed, move player left, if B pressed, move player right
el16a2t 2:a48df109588e 95 if ( pad.check_event(Gamepad::X_PRESSED) == true) {
el16a2t 1:a3c9025e0dad 96
el16a2t 1:a3c9025e0dad 97 x_player = x_player-20;
el16a2t 1:a3c9025e0dad 98 }
el16a2t 7:d1a1f7c5eb0d 99 //car cannot go further left than the left lane etc
el16a2t 1:a3c9025e0dad 100 if (x_player <4) {
el16a2t 1:a3c9025e0dad 101 x_player = 4;
el16a2t 1:a3c9025e0dad 102 }
el16a2t 2:a48df109588e 103 if ( pad.check_event(Gamepad::B_PRESSED) == true) {
el16a2t 1:a3c9025e0dad 104
el16a2t 1:a3c9025e0dad 105 x_player = x_player+20;
el16a2t 1:a3c9025e0dad 106 }
el16a2t 1:a3c9025e0dad 107 if (x_player >44) {
el16a2t 1:a3c9025e0dad 108 x_player = 44;
el16a2t 1:a3c9025e0dad 109 }
el16a2t 1:a3c9025e0dad 110
el16a2t 7:d1a1f7c5eb0d 111
el16a2t 8:8d25574b14cd 112 //print road lines
el16a2t 7:d1a1f7c5eb0d 113 lcd.drawLine(1,1,1,1500,2);
el16a2t 1:a3c9025e0dad 114
el16a2t 7:d1a1f7c5eb0d 115 lcd.drawLine(21,1,21,1500,2);
el16a2t 1:a3c9025e0dad 116
el16a2t 7:d1a1f7c5eb0d 117 lcd.drawLine(41,1,41,1500,2);
el16a2t 1:a3c9025e0dad 118
el16a2t 7:d1a1f7c5eb0d 119 lcd.drawLine(61,1,61,1500,2);
el16a2t 2:a48df109588e 120
el16a2t 2:a48df109588e 121
el16a2t 2:a48df109588e 122
el16a2t 2:a48df109588e 123
el16a2t 8:8d25574b14cd 124 //cars move down the road
el16a2t 2:a48df109588e 125
el16a2t 2:a48df109588e 126 lcd.drawSprite(x_car,y_car,20,15,(int*) car);
el16a2t 2:a48df109588e 127 y_car++;
el16a2t 4:a6ca44e29e97 128 lcd.drawSprite(x_car2,y_car2,20,15,(int*) car2);
el16a2t 4:a6ca44e29e97 129 y_car2++;
el16a2t 7:d1a1f7c5eb0d 130
el16a2t 8:8d25574b14cd 131 // re-generate cars continously
el16a2t 7:d1a1f7c5eb0d 132
el16a2t 10:e81aacef805b 133
el16a2t 10:e81aacef805b 134 int YIndex = rand() % 4;
el16a2t 10:e81aacef805b 135 int array[5] = {50, 55, 60, 65, 70};
el16a2t 10:e81aacef805b 136 int nextCar = array[YIndex];
el16a2t 10:e81aacef805b 137
el16a2t 10:e81aacef805b 138 if (y_car2 == nextCar) {
el16a2t 8:8d25574b14cd 139 x_car2 = random_number;
el16a2t 7:d1a1f7c5eb0d 140 y_car2 = -24;
el16a2t 7:d1a1f7c5eb0d 141
el16a2t 7:d1a1f7c5eb0d 142
el16a2t 10:e81aacef805b 143 }
el16a2t 10:e81aacef805b 144
el16a2t 10:e81aacef805b 145 if (y_car == nextCar) {
el16a2t 8:8d25574b14cd 146 x_car = random_number;
el16a2t 7:d1a1f7c5eb0d 147 y_car = -24;
el16a2t 7:d1a1f7c5eb0d 148
el16a2t 7:d1a1f7c5eb0d 149
el16a2t 7:d1a1f7c5eb0d 150 }
el16a2t 7:d1a1f7c5eb0d 151
el16a2t 7:d1a1f7c5eb0d 152
el16a2t 1:a3c9025e0dad 153
el16a2t 8:8d25574b14cd 154
el16a2t 8:8d25574b14cd 155 score++;//increase score
el16a2t 1:a3c9025e0dad 156
el16a2t 2:a48df109588e 157 // difficulty = read_pot();
el16a2t 8:8d25574b14cd 158 sprintf (str, "%d", score); //convert an integer to pointer
el16a2t 2:a48df109588e 159 lcd.printString(str,64,1);
el16a2t 7:d1a1f7c5eb0d 160
el16a2t 7:d1a1f7c5eb0d 161
el16a2t 8:8d25574b14cd 162 //if there is a collision, display "game over" screen
el16a2t 8:8d25574b14cd 163 if (x_car == x_player && y_car > 12 && y_car < 50) {
el16a2t 8:8d25574b14cd 164 printf("collision1\n");// so i can tell which car sprite the collision was with
el16a2t 7:d1a1f7c5eb0d 165 y_car = y_car;
el16a2t 6:933bb2b03b38 166 y_car2 = y_car2;
el16a2t 6:933bb2b03b38 167 score=score;
el16a2t 7:d1a1f7c5eb0d 168 lives--;
el16a2t 7:d1a1f7c5eb0d 169 printf("lives=%d\n", lives);
el16a2t 7:d1a1f7c5eb0d 170
el16a2t 7:d1a1f7c5eb0d 171 }
el16a2t 8:8d25574b14cd 172 if (x_car2 == x_player && y_car2 > 12 && y_car2 < 50) {
el16a2t 7:d1a1f7c5eb0d 173 printf("collision2\n");
el16a2t 7:d1a1f7c5eb0d 174 y_car2 = y_car2;
el16a2t 6:933bb2b03b38 175 y_car = y_car;
el16a2t 4:a6ca44e29e97 176 score=score;
el16a2t 7:d1a1f7c5eb0d 177 lives--;
el16a2t 7:d1a1f7c5eb0d 178 printf("lives=%d\n", lives);
el16a2t 7:d1a1f7c5eb0d 179
el16a2t 7:d1a1f7c5eb0d 180 }
el16a2t 7:d1a1f7c5eb0d 181
el16a2t 7:d1a1f7c5eb0d 182 if ( pad.check_event(Gamepad::X_PRESSED) == true) {
el16a2t 2:a48df109588e 183
el16a2t 7:d1a1f7c5eb0d 184 x_player = x_player-20;
el16a2t 7:d1a1f7c5eb0d 185 }
el16a2t 7:d1a1f7c5eb0d 186 //car cannot go further left than the left lane etc
el16a2t 7:d1a1f7c5eb0d 187 if (x_player <4) {
el16a2t 7:d1a1f7c5eb0d 188 x_player = 4;
el16a2t 7:d1a1f7c5eb0d 189 }
el16a2t 7:d1a1f7c5eb0d 190 if ( pad.check_event(Gamepad::B_PRESSED) == true) {
el16a2t 7:d1a1f7c5eb0d 191
el16a2t 7:d1a1f7c5eb0d 192 x_player = x_player+20;
el16a2t 7:d1a1f7c5eb0d 193 }
el16a2t 7:d1a1f7c5eb0d 194 if (x_player >44) {
el16a2t 7:d1a1f7c5eb0d 195 x_player = 44;
el16a2t 7:d1a1f7c5eb0d 196 }
el16a2t 2:a48df109588e 197
el16a2t 2:a48df109588e 198
el16a2t 2:a48df109588e 199
el16a2t 2:a48df109588e 200
el16a2t 1:a3c9025e0dad 201
el16a2t 1:a3c9025e0dad 202
el16a2t 1:a3c9025e0dad 203 lcd.refresh();
el16a2t 6:933bb2b03b38 204 //control the wait time using the potentiometer value to control difficulty
el16a2t 6:933bb2b03b38 205 //lower potentiometer = easier difficulty = longer wait time = cars and score move slower
el16a2t 7:d1a1f7c5eb0d 206 //e.g - use wait(1-potentiometer value) where potentiometer value 0<x<1 is difficulty
el16a2t 2:a48df109588e 207 wait(0.1);
el16a2t 1:a3c9025e0dad 208
el16a2t 1:a3c9025e0dad 209
el16a2t 1:a3c9025e0dad 210
el16a2t 1:a3c9025e0dad 211
el16a2t 1:a3c9025e0dad 212
el16a2t 1:a3c9025e0dad 213
el16a2t 1:a3c9025e0dad 214
el16a2t 4:a6ca44e29e97 215
el16a2t 7:d1a1f7c5eb0d 216
el16a2t 7:d1a1f7c5eb0d 217
el16a2t 2:a48df109588e 218 }
el16a2t 1:a3c9025e0dad 219
el16a2t 7:d1a1f7c5eb0d 220 void gameOver()
el16a2t 7:d1a1f7c5eb0d 221 {
el16a2t 7:d1a1f7c5eb0d 222 printf("reached gameover\n");
el16a2t 7:d1a1f7c5eb0d 223 if (lives ==0){
el16a2t 7:d1a1f7c5eb0d 224
el16a2t 7:d1a1f7c5eb0d 225
el16a2t 7:d1a1f7c5eb0d 226 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
el16a2t 7:d1a1f7c5eb0d 227
el16a2t 7:d1a1f7c5eb0d 228 printf("gameoverlives=%d\n", lives);
el16a2t 4:a6ca44e29e97 229 lcd.clear();
el16a2t 10:e81aacef805b 230
el16a2t 4:a6ca44e29e97 231 lcd.printString(str,64,1);
el16a2t 4:a6ca44e29e97 232 lcd.printString ("GAME OVER", 3,1);
el16a2t 7:d1a1f7c5eb0d 233 lcd.printString ("PRESS START", 3,3);
el16a2t 10:e81aacef805b 234 lcd.refresh();
el16a2t 7:d1a1f7c5eb0d 235 wait(0.2);
el16a2t 7:d1a1f7c5eb0d 236 }
el16a2t 7:d1a1f7c5eb0d 237 init ();
el16a2t 7:d1a1f7c5eb0d 238 }}