Toluwalakin Owoso 201231164
Dependencies: mbed ELEC2645_Project_el18to
main.cpp
00001 /* ELEC2645 Gamepad Test 00002 * 2nd Generation 00003 * January 2020 00004 * Dr Craig A. Evans & Joshua Davy 00005 */ 00006 00007 00008 00009 // Includes 00010 #include "mbed.h" 00011 #include "Gamepad.h" 00012 #include "N5110.h" 00013 00014 //gdf; 00015 00016 Gamepad pad; 00017 N5110 lcd; 00018 00019 const int bigwh[10][10] = { 00020 { 0,0,0,1,1,1,1,0,0,0 }, 00021 { 0,0,1,0,0,0,0,1,0,0 }, 00022 { 0,1,0,0,0,0,0,0,1,0 }, 00023 { 1,0,0,0,0,0,0,0,0,1 }, 00024 { 1,1,1,0,0,0,0,1,1,1 }, 00025 { 1,1,1,1,1,1,1,1,1,1 }, 00026 { 1,0,0,0,1,1,0,0,0,1 }, 00027 { 0,1,0,0,1,1,0,0,1,0 }, 00028 { 0,0,1,0,1,1,0,1,0,0 }, 00029 { 0,0,0,1,1,1,1,0,0,0 }, 00030 }; 00031 00032 const int wheel[5][5] = { 00033 { 0,1,1,1,0 }, 00034 { 1,0,0,0,1 }, 00035 { 1,1,1,1,1 }, 00036 { 1,0,1,0,1 }, 00037 { 0,1,1,1,0 }, 00038 }; 00039 00040 const int rcar[10][10] = { 00041 { 0,0,0,0,1,1,0,0,0,0 }, 00042 { 0,0,1,1,1,1,1,1,0,0 }, 00043 { 0,0,1,0,1,1,0,1,0,0 }, 00044 { 0,0,1,0,1,1,0,1,0,0 }, 00045 { 0,0,0,1,1,1,1,0,0,0 }, 00046 { 0,0,0,1,0,0,1,0,0,0 }, 00047 { 0,0,1,1,0,0,1,1,0,0 }, 00048 { 0,0,1,1,0,0,1,1,0,0 }, 00049 { 0,0,0,1,0,0,1,0,0,0 }, 00050 { 0,0,0,0,1,1,0,0,0,0 }, 00051 }; 00052 00053 const int ucar[10][10] = { 00054 { 0,0,0,0,0,0,0,0,0,0 }, 00055 { 0,0,0,1,1,1,1,0,0,0 }, 00056 { 0,0,1,1,0,0,1,1,0,0 }, 00057 { 0,0,1,1,0,0,1,1,0,0 }, 00058 { 0,0,0,1,1,1,1,0,0,0 }, 00059 { 0,0,0,1,0,0,1,0,0,0 }, 00060 { 0,0,1,1,0,0,1,1,0,0 }, 00061 { 0,0,1,1,0,0,1,1,0,0 }, 00062 { 0,0,0,1,1,1,1,0,0,0 }, 00063 { 0,0,0,0,0,0,0,0,0,0 }, 00064 }; 00065 00066 const int dcar[10][10] = { 00067 { 0,0,0,0,0,0,0,0,0,0 }, 00068 { 0,0,0,1,1,1,1,0,0,0 }, 00069 { 0,0,1,1,0,0,1,1,0,0 }, 00070 { 0,0,1,1,0,0,1,1,0,0 }, 00071 { 0,0,0,1,0,0,1,0,0,0 }, 00072 { 0,0,0,1,1,1,1,0,0,0 }, 00073 { 0,0,1,1,0,0,1,1,0,0 }, 00074 { 0,0,1,1,0,0,1,1,0,0 }, 00075 { 0,0,0,1,1,1,1,0,0,0 }, 00076 { 0,0,0,0,0,0,0,0,0,0 }, 00077 00078 }; 00079 00080 const int full_crash[10][10] = { 00081 { 0,0,1,0,0,0,0,0,1,0 }, 00082 { 0,0,0,1,1,0,0,1,0,0 }, 00083 { 0,0,1,1,0,1,1,0,1,0 }, 00084 { 0,0,0,1,0,0,0,0,1,0 }, 00085 { 0,0,0,0,1,0,0,1,0,0 }, 00086 { 0,0,0,1,0,0,0,0,1,0 }, 00087 { 0,0,1,0,0,1,1,1,0,0 }, 00088 { 0,0,1,1,0,0,0,1,0,0 }, 00089 { 0,0,0,0,1,1,1,0,0,0 }, 00090 { 0,1,1,0,0,0,0,0,0,1 }, 00091 00092 }; 00093 00094 volatile int x = 29; 00095 volatile int y = 36; 00096 volatile int xw = 4; 00097 volatile int yw = 17; 00098 volatile int y_u = 48; 00099 volatile int y_d = 0; 00100 volatile int c = 0; 00101 volatile int y_di0 = 15; 00102 volatile int y_di1 = 1; 00103 volatile int y_di2 = 36; 00104 volatile int y_di3 = 45; 00105 volatile int y_di4 = 23; 00106 volatile int spe = 0; 00107 volatile int spec = 0; 00108 volatile int specc = 0; 00109 volatile int i = 2000; 00110 volatile int i1 = 500; 00111 volatile int is = 30; 00112 volatile int iis; 00113 volatile int g = 0; 00114 volatile int length1; 00115 volatile int length2; 00116 volatile int tt; 00117 00118 void start_page(); 00119 void check_start(); 00120 void bound_check(); 00121 void pos_update(); 00122 void map(); 00123 void traffic(); 00124 void dirt(); 00125 void check_crash(); 00126 void game(); 00127 void game_over(); 00128 void game_modes(); 00129 void info(); 00130 void count1(); 00131 void count2(); 00132 void tail(); 00133 void time_heist(); 00134 00135 int main() 00136 { 00137 lcd.init(); 00138 lcd.setContrast(0.5); 00139 pad.init(); 00140 while(1) { 00141 check_start(); 00142 while(g != 50) { 00143 pad.leds_on(); 00144 lcd.clear(); 00145 game(); 00146 lcd.refresh(); 00147 wait_ms(30); 00148 } 00149 while(pad.start_pressed() == false) { 00150 00151 } 00152 game_over(); 00153 g = 0; 00154 xw = 4; 00155 yw = 17; 00156 } 00157 } 00158 00159 void start_page() 00160 { 00161 Direction D = pad.get_direction(); 00162 bool Yes = pad.B_pressed(); 00163 lcd.printString("DRIIIIIVE!",12,0); 00164 lcd.printString("GAME MODES",12,2); 00165 lcd.printString("INFO",30,3); 00166 if(D == S) { 00167 xw = 24; 00168 yw = 25; 00169 } 00170 if(D == N) { 00171 xw = 4; 00172 yw = 17; 00173 } 00174 lcd.drawSprite(xw,yw,5,5,( int*)wheel); 00175 lcd.refresh(); 00176 00177 if(Yes == true && xw == 4 && yw == 17) { 00178 g = 1; 00179 xw = 24; 00180 yw = 17; 00181 } 00182 if(Yes == true && xw == 24 && yw == 25) { 00183 g = 2; 00184 } 00185 } 00186 00187 void game_modes() 00188 { 00189 Direction D = pad.get_direction(); 00190 bool Yes = pad.B_pressed(); 00191 bool Back = pad.A_pressed(); 00192 lcd.printString("GAME MODES",12,0); 00193 lcd.printString("TAIL",30,2); 00194 lcd.printString("TIME HEIST",12,3); 00195 if(D == S) { 00196 xw = 4; 00197 yw = 25; 00198 } 00199 if(D == N) { 00200 xw = 24; 00201 yw = 17; 00202 } 00203 lcd.drawSprite(xw,yw,5,5,( int*)wheel); 00204 lcd.refresh(); 00205 00206 if(Yes == true && xw == 24 && yw == 17) { 00207 g = 13; 00208 } 00209 if(Yes == true && xw == 4 && yw == 25) { 00210 g = 24; 00211 } 00212 if(Back == true) { 00213 g = 0; 00214 start_page(); 00215 xw = 4; 00216 yw = 17; 00217 } 00218 } 00219 00220 void info() 00221 { 00222 bool Back = pad.A_pressed(); 00223 lcd.printString("INFO",30,0); 00224 lcd.refresh(); 00225 if(Back == true) { 00226 g = 0; 00227 start_page(); 00228 xw = 4; 00229 yw = 17; 00230 } 00231 } 00232 00233 void check_start() 00234 { 00235 while(g < 10) { 00236 while(pad.B_pressed() == false && g == 0) { 00237 lcd.clear(); 00238 wait_ms(100); 00239 pad.leds_on(); 00240 wait_ms(100); 00241 pad.leds_off(); 00242 00243 start_page(); 00244 } 00245 00246 while(pad.B_pressed() == false && g == 1) { 00247 lcd.clear(); 00248 wait_ms(100); 00249 pad.leds_on(); 00250 wait_ms(100); 00251 pad.leds_off(); 00252 00253 game_modes(); 00254 } 00255 00256 while(pad.B_pressed() == false && g == 2) { 00257 lcd.clear(); 00258 wait_ms(100); 00259 pad.leds_on(); 00260 wait_ms(100); 00261 pad.leds_off(); 00262 00263 info(); 00264 } 00265 } 00266 } 00267 00268 void bound_check() 00269 { 00270 /*if(x > 76) { 00271 x = 76; 00272 } 00273 if(x < 0) { 00274 x = 0; 00275 }*/ 00276 if(x < 25) { 00277 x = 25; 00278 //c = c + 1; 00279 } 00280 if(x > 50) { 00281 x = 50; 00282 //c = c + 1; 00283 } 00284 if(y > 38) { 00285 y = 38; 00286 } 00287 if(y < 0) { 00288 y = 0; 00289 } 00290 if(y > 35) { 00291 y = 35; 00292 } 00293 if(y < 20) { 00294 y = 20; 00295 } 00296 } 00297 00298 00299 void pos_update() 00300 { 00301 Direction D = pad.get_direction(); 00302 float Mag = pad.get_mag(); 00303 00304 if(Mag > 0.2) { 00305 spec = 1; 00306 wait_ms(10); 00307 spec = 3; 00308 } 00309 00310 if(pad.B_held() == true) { 00311 wait_ms(10); 00312 y = y - 1; 00313 } 00314 if(pad.Y_held() == true) { 00315 wait_ms(10); 00316 y = y + 1; 00317 } 00318 00319 00320 if(D == NE) { 00321 wait_ms(10); 00322 x = x + spec; 00323 } 00324 if(D == E) { 00325 wait_ms(10); 00326 x = x + spec; 00327 } 00328 if(D == SE) { 00329 wait_ms(10); 00330 x = x + spec; 00331 } 00332 if(D == SW) { 00333 wait_ms(10); 00334 x = x - spec; 00335 } 00336 if(D == W) { 00337 wait_ms(10); 00338 x = x - spec; 00339 } 00340 if(D == NW) { 00341 wait_ms(10); 00342 x = x - spec; 00343 } 00344 bound_check(); 00345 lcd.drawSprite(x,y,10,10,( int*)rcar); 00346 lcd.refresh(); 00347 00348 if(c == 3) { 00349 game_over(); 00350 } 00351 00352 00353 } 00354 00355 void map() 00356 { 00357 lcd.drawLine(26,0,26,48,1); 00358 lcd.drawLine(40,0,40,48,1); 00359 lcd.drawLine(44,0,44,48,1); 00360 lcd.drawLine(58,0,58,48,1); 00361 lcd.drawLine(24,0,24,48,2); 00362 lcd.drawLine(60,0,60,48,2); 00363 //traffic(); 00364 dirt(); 00365 00366 } 00367 00368 void traffic() 00369 { 00370 lcd.drawSprite(29,y_u,10,10,( int*)ucar); 00371 lcd.drawSprite(47,y_d,10,10,( int*)dcar); 00372 y_u = y_u - 1; 00373 y_d = y_d + 1; 00374 00375 if (y_u == 0) { 00376 y_u = 48; 00377 } 00378 00379 if (y_d == 48) { 00380 y_d = 0; 00381 } 00382 00383 wait_ms(10); 00384 00385 } 00386 00387 void dirt() 00388 { 00389 bool Acc = pad.B_held(); 00390 bool Break = pad.Y_pressed(); 00391 bool Reverse = pad.Y_held(); 00392 Direction D = pad.get_direction(); 00393 float Mag = pad.get_mag(); 00394 lcd.drawRect(1,y_di0,2,2,FILL_TRANSPARENT); 00395 lcd.drawRect(5,y_di1,2,2,FILL_TRANSPARENT); 00396 lcd.drawRect(10,y_di2,2,2,FILL_TRANSPARENT); 00397 lcd.drawRect(15,y_di3,2,2,FILL_TRANSPARENT); 00398 lcd.drawRect(20,y_di4,2,2,FILL_TRANSPARENT); 00399 lcd.drawRect(65,y_di0,2,2,FILL_TRANSPARENT); 00400 lcd.drawRect(73,y_di1,2,2,FILL_TRANSPARENT); 00401 lcd.drawRect(62,y_di2,2,2,FILL_TRANSPARENT); 00402 lcd.drawRect(79,y_di3,2,2,FILL_TRANSPARENT); 00403 lcd.drawRect(81,y_di4,2,2,FILL_TRANSPARENT); 00404 00405 spe = 1; 00406 00407 if(Acc == true) { 00408 wait_ms(50); 00409 y_di0 = y_di0 + spe; 00410 y_di1 = y_di1 + spe; 00411 y_di2 = y_di2 + spe; 00412 y_di3 = y_di3 + spe; 00413 y_di4 = y_di4 + spe; 00414 } 00415 if(Break == true) { 00416 wait_ms(50); 00417 y_di0 = y_di0; 00418 y_di1 = y_di1; 00419 y_di2 = y_di2; 00420 y_di3 = y_di3; 00421 y_di4 = y_di4; 00422 } 00423 if(Reverse == true) { 00424 wait_ms(50); 00425 y_di0 = y_di0 - 1; 00426 y_di1 = y_di1 - 1; 00427 y_di2 = y_di2 - 1; 00428 y_di3 = y_di3 - 1; 00429 y_di4 = y_di4 - 1; 00430 } 00431 if(D == NE) { 00432 wait_ms(10); 00433 y_di0 = y_di0 + spe; 00434 y_di1 = y_di1 + spe; 00435 y_di2 = y_di2 + spe; 00436 y_di3 = y_di3 + spe; 00437 y_di4 = y_di4 + spe; 00438 } 00439 if(D == SE) { 00440 wait_ms(10); 00441 y_di0 = y_di0 - spe; 00442 y_di1 = y_di1 - spe; 00443 y_di2 = y_di2 - spe; 00444 y_di3 = y_di3 - spe; 00445 y_di4 = y_di4 - spe; 00446 } 00447 if(D == SW) { 00448 wait_ms(10); 00449 y_di0 = y_di0 - spe; 00450 y_di1 = y_di1 - spe; 00451 y_di2 = y_di2 - spe; 00452 y_di3 = y_di3 - spe; 00453 y_di4 = y_di4 - spe; 00454 } 00455 if(D == NW) { 00456 wait_ms(50); 00457 y_di0 = y_di0 + spe; 00458 y_di1 = y_di1 + spe; 00459 y_di2 = y_di2 + spe; 00460 y_di3 = y_di3 + spe; 00461 y_di4 = y_di4 + spe; 00462 } 00463 00464 if(y_di0 > 48) { 00465 y_di0 = 0; 00466 } 00467 if(y_di0 < 0) { 00468 y_di0 = 48; 00469 } 00470 if(y_di1 > 48) { 00471 y_di1 = 0; 00472 } 00473 if(y_di1 < 0) { 00474 y_di1 = 48; 00475 } 00476 if(y_di2 > 48) { 00477 y_di2 = 0; 00478 } 00479 if(y_di2 < 0) { 00480 y_di2 = 48; 00481 } 00482 if(y_di3 > 48) { 00483 y_di3 = 0; 00484 } 00485 if(y_di3 < 0) { 00486 y_di3 = 48; 00487 } 00488 if(y_di4 > 48) { 00489 y_di4 = 0; 00490 } 00491 if(y_di4 < 0) { 00492 y_di4 = 48; 00493 } 00494 } 00495 00496 void check_crash() 00497 { 00498 if(c == 3) { 00499 lcd.drawSprite(x,y,10,10,( int*)full_crash); 00500 lcd.refresh(); 00501 wait_ms(100); 00502 } 00503 } 00504 00505 void tail() 00506 { 00507 count1(); 00508 map(); 00509 pos_update(); 00510 check_crash(); 00511 00512 if (i >= 3500) { 00513 g = 50; 00514 game_over(); 00515 } 00516 } 00517 00518 void time_heist() 00519 { 00520 count2(); 00521 map(); 00522 pos_update(); 00523 check_crash(); 00524 00525 if (is <= 0) { 00526 g = 50; 00527 game_over(); 00528 } 00529 } 00530 00531 void game() 00532 { 00533 if(g == 13) { 00534 tail(); 00535 } 00536 if(g == 24) { 00537 time_heist(); 00538 } 00539 lcd.refresh(); 00540 } 00541 00542 void game_over() 00543 { 00544 lcd.clear(); 00545 lcd.refresh(); 00546 lcd.printString("GAME OVER!",12,2); 00547 lcd.printString("Press start",10,4); 00548 i = 2000; 00549 i1 = 500; 00550 is = 30; 00551 } 00552 00553 void count1() 00554 { 00555 bool cou = pad.B_held(); 00556 bool couu = pad.B_pressed(); 00557 bool cu = pad.Y_held(); 00558 bool cuu = pad.Y_pressed(); 00559 00560 int length; 00561 char buffer[5]; 00562 if(cou == true || couu == true) { 00563 i = i - 5; 00564 } 00565 if(cou == false || couu == false) { 00566 i = i + 2; 00567 } 00568 if(cu == true || cuu == true) { 00569 i = i + 4; 00570 } 00571 00572 if(i < 0) { 00573 i = 0; 00574 } 00575 length = sprintf(buffer, "%2dM", i); 00576 if(length <= 5) { 00577 lcd.printString(buffer,0,0); 00578 } 00579 } 00580 00581 void count2() 00582 { 00583 char buffer1[5]; 00584 char buffer2[3]; 00585 bool cou = pad.B_held(); 00586 bool couu = pad.B_pressed(); 00587 bool cu = pad.Y_held(); 00588 bool cuu = pad.Y_pressed(); 00589 00590 length1 = sprintf(buffer1, "%2dM", i1); 00591 length2 = sprintf(buffer2, "%2dS", is); 00592 if(length1 <= 5) { 00593 lcd.printString(buffer1,0,0); 00594 } 00595 if(cou == true || couu == true) { 00596 i1 = i1 - 5; 00597 } 00598 if(cu == true || cuu == true) { 00599 i1 = i1 + 3; 00600 } 00601 00602 if(i1 < 0) { 00603 i1 = 500; 00604 is = 30; 00605 } 00606 if(length2 <= 3) { 00607 lcd.printString(buffer2,61,0); 00608 } 00609 00610 iis = 30; 00611 tt = tt + 1; 00612 if(iis == tt){ 00613 tt = 0; 00614 is = is - 1; 00615 } 00616 } 00617
Generated on Sun Jul 17 2022 01:15:51 by
1.7.2