Stick_Runner

Dependencies:   FXOS8700CQ Gamepad N5110 SDFileSystem mbed

Fork of Stick_Runner by Samrudh Sharma

Committer:
el15ss
Date:
Fri Apr 28 09:00:21 2017 +0000
Revision:
0:12cfe63faa6a
Child:
1:db9ff66f67c8
Version1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el15ss 0:12cfe63faa6a 1 ///////// pre-processor directives ////////
el15ss 0:12cfe63faa6a 2 #include "mbed.h"
el15ss 0:12cfe63faa6a 3 #include "Gamepad.h"
el15ss 0:12cfe63faa6a 4 #include "N5110.h"
el15ss 0:12cfe63faa6a 5 #include "Character.h"
el15ss 0:12cfe63faa6a 6 #include "Obstacles.h"
el15ss 0:12cfe63faa6a 7 #include "Gems.h"
el15ss 0:12cfe63faa6a 8 #include <iostream>
el15ss 0:12cfe63faa6a 9
el15ss 0:12cfe63faa6a 10 #define OBS 8
el15ss 0:12cfe63faa6a 11 #define GEMS 4
el15ss 0:12cfe63faa6a 12
el15ss 0:12cfe63faa6a 13 int i,j;
el15ss 0:12cfe63faa6a 14
el15ss 0:12cfe63faa6a 15 /////////////// structs /////////////////
el15ss 0:12cfe63faa6a 16 struct UserInput {
el15ss 0:12cfe63faa6a 17 Direction d;
el15ss 0:12cfe63faa6a 18 float mag;
el15ss 0:12cfe63faa6a 19 };
el15ss 0:12cfe63faa6a 20 /////////////// objects ///////////////
el15ss 0:12cfe63faa6a 21 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
el15ss 0:12cfe63faa6a 22 Gamepad pad;
el15ss 0:12cfe63faa6a 23 Character c;
el15ss 0:12cfe63faa6a 24 Obstacles obstacle[OBS];
el15ss 0:12cfe63faa6a 25 Gems gems[GEMS];
el15ss 0:12cfe63faa6a 26
el15ss 0:12cfe63faa6a 27
el15ss 0:12cfe63faa6a 28
el15ss 0:12cfe63faa6a 29 ///////////// prototypes ///////////////
el15ss 0:12cfe63faa6a 30 void init();
el15ss 0:12cfe63faa6a 31 void update_game(UserInput input);
el15ss 0:12cfe63faa6a 32 void render();
el15ss 0:12cfe63faa6a 33 void welcome();
el15ss 0:12cfe63faa6a 34 void menu();
el15ss 0:12cfe63faa6a 35 void over();
el15ss 0:12cfe63faa6a 36 void Instructions();
el15ss 0:12cfe63faa6a 37 ///////////// functions ////////////////
el15ss 0:12cfe63faa6a 38 int main()
el15ss 0:12cfe63faa6a 39 {
el15ss 0:12cfe63faa6a 40 int fps = 8; // frames per second
el15ss 0:12cfe63faa6a 41
el15ss 0:12cfe63faa6a 42 init();
el15ss 0:12cfe63faa6a 43 welcome();
el15ss 0:12cfe63faa6a 44 wait(1.0f/fps);
el15ss 0:12cfe63faa6a 45
el15ss 0:12cfe63faa6a 46
el15ss 0:12cfe63faa6a 47
el15ss 0:12cfe63faa6a 48 render(); // draw initial frame
el15ss 0:12cfe63faa6a 49 wait(1.0f/fps);
el15ss 0:12cfe63faa6a 50
el15ss 0:12cfe63faa6a 51 // game loop - read input, update the game state and render the display
el15ss 0:12cfe63faa6a 52 while (1) {
el15ss 0:12cfe63faa6a 53
el15ss 0:12cfe63faa6a 54
el15ss 0:12cfe63faa6a 55
el15ss 0:12cfe63faa6a 56 c.update(pad.get_direction(),pad.get_mag());
el15ss 0:12cfe63faa6a 57 if(pad.check_event(Gamepad::BACK_PRESSED))
el15ss 0:12cfe63faa6a 58 {
el15ss 0:12cfe63faa6a 59 lcd.clear();
el15ss 0:12cfe63faa6a 60 lcd.refresh();
el15ss 0:12cfe63faa6a 61 //lcd.printString(" Game Paused! ",0,1);
el15ss 0:12cfe63faa6a 62 //lcd.printString("Press Start to continue ",0,4);
el15ss 0:12cfe63faa6a 63 //lcd.refresh();
el15ss 0:12cfe63faa6a 64 // welcome();
el15ss 0:12cfe63faa6a 65 menu();
el15ss 0:12cfe63faa6a 66 }
el15ss 0:12cfe63faa6a 67
el15ss 0:12cfe63faa6a 68 for(i=0;i<OBS;i++)
el15ss 0:12cfe63faa6a 69 {
el15ss 0:12cfe63faa6a 70 obstacle[i].Obstacles_Status(obstacle[i].get_pos());
el15ss 0:12cfe63faa6a 71
el15ss 0:12cfe63faa6a 72 if(!obstacle[i].get_status())
el15ss 0:12cfe63faa6a 73 {
el15ss 0:12cfe63faa6a 74 obstacle[i].init();
el15ss 0:12cfe63faa6a 75 }
el15ss 0:12cfe63faa6a 76 c.Character_Status(obstacle[i].get_pos());
el15ss 0:12cfe63faa6a 77 }
el15ss 0:12cfe63faa6a 78
el15ss 0:12cfe63faa6a 79
el15ss 0:12cfe63faa6a 80 for(j=0;j<GEMS;j++)
el15ss 0:12cfe63faa6a 81 {
el15ss 0:12cfe63faa6a 82 gems[j].Gems_Status(gems[i].get_pos());
el15ss 0:12cfe63faa6a 83
el15ss 0:12cfe63faa6a 84 if(!gems[j].get_status())
el15ss 0:12cfe63faa6a 85 {
el15ss 0:12cfe63faa6a 86 gems[j].init();
el15ss 0:12cfe63faa6a 87 }
el15ss 0:12cfe63faa6a 88 gems[j].Gems_Score(gems[j].get_pos());
el15ss 0:12cfe63faa6a 89 }
el15ss 0:12cfe63faa6a 90 i =0;
el15ss 0:12cfe63faa6a 91
el15ss 0:12cfe63faa6a 92 for(i=0;i<OBS;i++)
el15ss 0:12cfe63faa6a 93 {
el15ss 0:12cfe63faa6a 94 obstacle[i].update();
el15ss 0:12cfe63faa6a 95 }
el15ss 0:12cfe63faa6a 96
el15ss 0:12cfe63faa6a 97
el15ss 0:12cfe63faa6a 98 j =0;
el15ss 0:12cfe63faa6a 99
el15ss 0:12cfe63faa6a 100 for(j=0;j<GEMS;j++)
el15ss 0:12cfe63faa6a 101 {
el15ss 0:12cfe63faa6a 102 gems[j].update();
el15ss 0:12cfe63faa6a 103 }
el15ss 0:12cfe63faa6a 104
el15ss 0:12cfe63faa6a 105 render();
el15ss 0:12cfe63faa6a 106
el15ss 0:12cfe63faa6a 107 wait(1.0f/fps);
el15ss 0:12cfe63faa6a 108 }
el15ss 0:12cfe63faa6a 109 }
el15ss 0:12cfe63faa6a 110
el15ss 0:12cfe63faa6a 111 void init()
el15ss 0:12cfe63faa6a 112 {
el15ss 0:12cfe63faa6a 113 // need to initialise LCD and Gamepad
el15ss 0:12cfe63faa6a 114 lcd.init();
el15ss 0:12cfe63faa6a 115 pad.init();
el15ss 0:12cfe63faa6a 116 c.init();
el15ss 0:12cfe63faa6a 117
el15ss 0:12cfe63faa6a 118 for(i=0;i<OBS;i++)
el15ss 0:12cfe63faa6a 119 {
el15ss 0:12cfe63faa6a 120 obstacle[i].init();
el15ss 0:12cfe63faa6a 121 }
el15ss 0:12cfe63faa6a 122 for(j=0;j<GEMS;j++)
el15ss 0:12cfe63faa6a 123 {
el15ss 0:12cfe63faa6a 124 gems[j].init();
el15ss 0:12cfe63faa6a 125 }
el15ss 0:12cfe63faa6a 126
el15ss 0:12cfe63faa6a 127
el15ss 0:12cfe63faa6a 128
el15ss 0:12cfe63faa6a 129 }
el15ss 0:12cfe63faa6a 130
el15ss 0:12cfe63faa6a 131 void render()
el15ss 0:12cfe63faa6a 132 {
el15ss 0:12cfe63faa6a 133 // clear screen, re-draw and refresh
el15ss 0:12cfe63faa6a 134 lcd.clear();
el15ss 0:12cfe63faa6a 135 if(!c.get_status())
el15ss 0:12cfe63faa6a 136 {
el15ss 0:12cfe63faa6a 137 over();
el15ss 0:12cfe63faa6a 138 }
el15ss 0:12cfe63faa6a 139 if(c.get_status())
el15ss 0:12cfe63faa6a 140 {
el15ss 0:12cfe63faa6a 141 c.draw(lcd);
el15ss 0:12cfe63faa6a 142 }
el15ss 0:12cfe63faa6a 143 //obstacle[i].draw(lcd);
el15ss 0:12cfe63faa6a 144
el15ss 0:12cfe63faa6a 145 for(i=0;i<OBS;i++)
el15ss 0:12cfe63faa6a 146 {
el15ss 0:12cfe63faa6a 147 if(obstacle[i].get_status())
el15ss 0:12cfe63faa6a 148 {
el15ss 0:12cfe63faa6a 149 obstacle[i].draw(lcd);
el15ss 0:12cfe63faa6a 150 }
el15ss 0:12cfe63faa6a 151
el15ss 0:12cfe63faa6a 152 }
el15ss 0:12cfe63faa6a 153
el15ss 0:12cfe63faa6a 154 for(j=0;j<GEMS;j++)
el15ss 0:12cfe63faa6a 155 {
el15ss 0:12cfe63faa6a 156 if(gems[j].get_status())
el15ss 0:12cfe63faa6a 157 {
el15ss 0:12cfe63faa6a 158 gems[j].draw(lcd);
el15ss 0:12cfe63faa6a 159 }
el15ss 0:12cfe63faa6a 160
el15ss 0:12cfe63faa6a 161 }
el15ss 0:12cfe63faa6a 162 lcd.refresh();
el15ss 0:12cfe63faa6a 163 }
el15ss 0:12cfe63faa6a 164
el15ss 0:12cfe63faa6a 165 void welcome() {
el15ss 0:12cfe63faa6a 166
el15ss 0:12cfe63faa6a 167 lcd.printString("Stick Runner! ",0,1);
el15ss 0:12cfe63faa6a 168 lcd.printString(" Press Start ",0,4);
el15ss 0:12cfe63faa6a 169 lcd.refresh();
el15ss 0:12cfe63faa6a 170 pad.tone(1500.0,0.5);
el15ss 0:12cfe63faa6a 171 pad.tone(1500.0,0.5);
el15ss 0:12cfe63faa6a 172
el15ss 0:12cfe63faa6a 173
el15ss 0:12cfe63faa6a 174 // wait flashing LEDs until start button is pressed
el15ss 0:12cfe63faa6a 175 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
el15ss 0:12cfe63faa6a 176 pad.leds_on();
el15ss 0:12cfe63faa6a 177 wait(0.1);
el15ss 0:12cfe63faa6a 178 pad.leds_off();
el15ss 0:12cfe63faa6a 179 wait(0.1);
el15ss 0:12cfe63faa6a 180
el15ss 0:12cfe63faa6a 181 }
el15ss 0:12cfe63faa6a 182 menu();
el15ss 0:12cfe63faa6a 183 }
el15ss 0:12cfe63faa6a 184
el15ss 0:12cfe63faa6a 185 void over() {
el15ss 0:12cfe63faa6a 186 lcd.clear();
el15ss 0:12cfe63faa6a 187 lcd.printString(" GAME ",0,1);
el15ss 0:12cfe63faa6a 188 lcd.printString(" OVER!!!!! ",0,2);
el15ss 0:12cfe63faa6a 189 lcd.printString(" PRESS START ",0,4);
el15ss 0:12cfe63faa6a 190
el15ss 0:12cfe63faa6a 191 lcd.refresh();
el15ss 0:12cfe63faa6a 192
el15ss 0:12cfe63faa6a 193 // wait flashing LEDs until start button is pressed
el15ss 0:12cfe63faa6a 194 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
el15ss 0:12cfe63faa6a 195 pad.leds_on();
el15ss 0:12cfe63faa6a 196 pad.tone(1000.0,0.5);
el15ss 0:12cfe63faa6a 197 wait(0.1);
el15ss 0:12cfe63faa6a 198 pad.leds_off();
el15ss 0:12cfe63faa6a 199 pad.tone(1000.0,0.5);
el15ss 0:12cfe63faa6a 200 wait(0.1);
el15ss 0:12cfe63faa6a 201 if( pad.check_event(Gamepad::START_PRESSED)) {
el15ss 0:12cfe63faa6a 202 main();
el15ss 0:12cfe63faa6a 203 wait(1);
el15ss 0:12cfe63faa6a 204 }
el15ss 0:12cfe63faa6a 205 }
el15ss 0:12cfe63faa6a 206
el15ss 0:12cfe63faa6a 207 }
el15ss 0:12cfe63faa6a 208
el15ss 0:12cfe63faa6a 209 void menu() {
el15ss 0:12cfe63faa6a 210 int fps =8;
el15ss 0:12cfe63faa6a 211 bool i = true;
el15ss 0:12cfe63faa6a 212 while(i == true)
el15ss 0:12cfe63faa6a 213 {
el15ss 0:12cfe63faa6a 214 lcd.printString(" Menu ",0,1);
el15ss 0:12cfe63faa6a 215 lcd.printString("A)New Game ",0,2);
el15ss 0:12cfe63faa6a 216 lcd.printString("B)Continue ",0,3);
el15ss 0:12cfe63faa6a 217 lcd.printString("X)Instructions ",0,4);
el15ss 0:12cfe63faa6a 218
el15ss 0:12cfe63faa6a 219 lcd.refresh();
el15ss 0:12cfe63faa6a 220
el15ss 0:12cfe63faa6a 221 // wait flashing LEDs until start button is pressed
el15ss 0:12cfe63faa6a 222 if( pad.check_event(Gamepad::A_PRESSED) ) {
el15ss 0:12cfe63faa6a 223 pad.tone(1000.0,0.5);
el15ss 0:12cfe63faa6a 224 i = false;
el15ss 0:12cfe63faa6a 225 lcd.clear();
el15ss 0:12cfe63faa6a 226 lcd.refresh();
el15ss 0:12cfe63faa6a 227
el15ss 0:12cfe63faa6a 228 //break;
el15ss 0:12cfe63faa6a 229 }
el15ss 0:12cfe63faa6a 230
el15ss 0:12cfe63faa6a 231 else if( pad.check_event(Gamepad::B_PRESSED) ) {
el15ss 0:12cfe63faa6a 232 //lcd.clear();
el15ss 0:12cfe63faa6a 233 pad.tone(1000.0,0.5);
el15ss 0:12cfe63faa6a 234 i = false;
el15ss 0:12cfe63faa6a 235 lcd.refresh();
el15ss 0:12cfe63faa6a 236
el15ss 0:12cfe63faa6a 237
el15ss 0:12cfe63faa6a 238 }
el15ss 0:12cfe63faa6a 239
el15ss 0:12cfe63faa6a 240 else if( pad.check_event(Gamepad::X_PRESSED) ) {
el15ss 0:12cfe63faa6a 241 pad.tone(1000.0,0.5);
el15ss 0:12cfe63faa6a 242 Instructions();
el15ss 0:12cfe63faa6a 243 wait(100.0f/fps);
el15ss 0:12cfe63faa6a 244 i = false;
el15ss 0:12cfe63faa6a 245 }
el15ss 0:12cfe63faa6a 246
el15ss 0:12cfe63faa6a 247
el15ss 0:12cfe63faa6a 248 }
el15ss 0:12cfe63faa6a 249 }
el15ss 0:12cfe63faa6a 250
el15ss 0:12cfe63faa6a 251 void Instructions()
el15ss 0:12cfe63faa6a 252 {
el15ss 0:12cfe63faa6a 253 bool i = true;
el15ss 0:12cfe63faa6a 254 lcd.clear();
el15ss 0:12cfe63faa6a 255 lcd.printString("INSTURCTIONS: ",0,1);
el15ss 0:12cfe63faa6a 256 lcd.printString("Collect the ",0,2);
el15ss 0:12cfe63faa6a 257 lcd.printString("gems to get ",0,3);
el15ss 0:12cfe63faa6a 258 lcd.printString("points ",0,4);
el15ss 0:12cfe63faa6a 259 lcd.refresh();
el15ss 0:12cfe63faa6a 260
el15ss 0:12cfe63faa6a 261 while(i == true){
el15ss 0:12cfe63faa6a 262
el15ss 0:12cfe63faa6a 263 if( pad.check_event(Gamepad::BACK_PRESSED) ) {
el15ss 0:12cfe63faa6a 264 pad.tone(1000.0,0.5);
el15ss 0:12cfe63faa6a 265 i = false;
el15ss 0:12cfe63faa6a 266 menu();
el15ss 0:12cfe63faa6a 267 }
el15ss 0:12cfe63faa6a 268 }
el15ss 0:12cfe63faa6a 269
el15ss 0:12cfe63faa6a 270 }