ELEC2645 (2017/18) / Mbed 2 deprecated el16a2t

Dependencies:   mbed

Committer:
el16a2t
Date:
Tue May 01 12:02:38 2018 +0000
Revision:
5:cd63b0b896aa
Parent:
4:a6ca44e29e97
Child:
6:933bb2b03b38
changed road lines from drawRect functions to drawLine functions;

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 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 5:cd63b0b896aa 106 lcd.drawLine(1,1,1,1500,FILL_BLACK);
el16a2t 1:a3c9025e0dad 107
el16a2t 5:cd63b0b896aa 108 lcd.drawLine(21,1,21,1500,FILL_BLACK);
el16a2t 1:a3c9025e0dad 109
el16a2t 5:cd63b0b896aa 110 lcd.drawLine(41,1,41,1500,FILL_BLACK);
el16a2t 1:a3c9025e0dad 111
el16a2t 5:cd63b0b896aa 112 lcd.drawLine(61,1,61,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 }