Toluwalakin Owoso 201231164

Dependencies:   mbed ELEC2645_Project_el18to

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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