ELEC2645 (2017/18) / Mbed 2 deprecated el16a2t

Dependencies:   mbed

Committer:
el16a2t
Date:
Tue May 01 12:35:55 2018 +0000
Revision:
6:933bb2b03b38
Parent:
5:cd63b0b896aa
Child:
7:d1a1f7c5eb0d
changed the titlescreen sprite

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 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 6:933bb2b03b38 48 lcd.drawSprite (1,1,16,40,(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 6:933bb2b03b38 106 lcd.drawLine(1,1,1,1500,unsigned int const step = (type==2));
el16a2t 1:a3c9025e0dad 107
el16a2t 6:933bb2b03b38 108 lcd.drawLine(21,1,21,1500,unsigned int const step = (type==2));
el16a2t 1:a3c9025e0dad 109
el16a2t 6:933bb2b03b38 110 lcd.drawLine(41,1,41,1500,unsigned int const step = (type==2));
el16a2t 1:a3c9025e0dad 111
el16a2t 6:933bb2b03b38 112 lcd.drawLine(61,1,61,1500,unsigned int const step = (type==2));
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 6:933bb2b03b38 152 y_car2 = y_car2;
el16a2t 6:933bb2b03b38 153 score=score;
el16a2t 6:933bb2b03b38 154 wait(0.5);
el16a2t 6:933bb2b03b38 155 gameOver();
el16a2t 6:933bb2b03b38 156
el16a2t 6:933bb2b03b38 157 }
el16a2t 6:933bb2b03b38 158 if (x_car2 = x_player && y_car2 = 12){
el16a2t 6:933bb2b03b38 159 printf("collision");
el16a2t 6:933bb2b03b38 160 y_car2 = 12;
el16a2t 6:933bb2b03b38 161 y_car = y_car;
el16a2t 4:a6ca44e29e97 162 score=score;
el16a2t 4:a6ca44e29e97 163 wait(0.5);
el16a2t 4:a6ca44e29e97 164 gameOver();
el16a2t 4:a6ca44e29e97 165
el16a2t 4:a6ca44e29e97 166 }
el16a2t 2:a48df109588e 167
el16a2t 2:a48df109588e 168
el16a2t 2:a48df109588e 169
el16a2t 2:a48df109588e 170
el16a2t 2:a48df109588e 171
el16a2t 1:a3c9025e0dad 172
el16a2t 1:a3c9025e0dad 173
el16a2t 1:a3c9025e0dad 174 lcd.refresh();
el16a2t 6:933bb2b03b38 175 //control the wait time using the potentiometer value to control difficulty
el16a2t 6:933bb2b03b38 176 //lower potentiometer = easier difficulty = longer wait time = cars and score move slower
el16a2t 6:933bb2b03b38 177 //e.g - use wait(1-potentiometer value) where potentiometer value 0<x<1 is difficulty
el16a2t 2:a48df109588e 178 wait(0.1);
el16a2t 1:a3c9025e0dad 179
el16a2t 1:a3c9025e0dad 180
el16a2t 1:a3c9025e0dad 181
el16a2t 1:a3c9025e0dad 182
el16a2t 1:a3c9025e0dad 183
el16a2t 1:a3c9025e0dad 184
el16a2t 1:a3c9025e0dad 185
el16a2t 1:a3c9025e0dad 186 }
el16a2t 4:a6ca44e29e97 187
el16a2t 4:a6ca44e29e97 188
el16a2t 2:a48df109588e 189 }
el16a2t 1:a3c9025e0dad 190
el16a2t 4:a6ca44e29e97 191 void gameOver(){
el16a2t 1:a3c9025e0dad 192
el16a2t 4:a6ca44e29e97 193 lcd.clear();
el16a2t 4:a6ca44e29e97 194 lcd.printString(str,64,1);
el16a2t 4:a6ca44e29e97 195 lcd.printString ("GAME OVER", 3,1);
el16a2t 4:a6ca44e29e97 196 lcd.printString ("PRESS START TO TRY AGAIN ", 3,10);
el16a2t 4:a6ca44e29e97 197
el16a2t 4:a6ca44e29e97 198 if ( pad.check_event(Gamepad::START_PRESSED) == true) {
el16a2t 4:a6ca44e29e97 199
el16a2t 4:a6ca44e29e97 200 newGame();
el16a2t 4:a6ca44e29e97 201
el16a2t 4:a6ca44e29e97 202 }