Mbed project for a FRDM-K64F microcontroller. Game made out of five sub-games including flappy birds, snake, stack, trivia and space invaders.
Fork of The_Children_of_Cronos_el15mggr by
Stymphalianlib.cpp
00001 #include "mbed.h" 00002 #include "N5110.h" 00003 #include "Gamepad.h" 00004 #include "Stymphalianlib.h" 00005 00006 //constructor 00007 Stymphalianlib::Stymphalianlib() 00008 { 00009 00010 } 00011 //die bool function for passing dead variable result to main file 00012 bool Stymphalianlib::die () 00013 { 00014 if (_dead) { 00015 return true; 00016 } 00017 return false; 00018 } 00019 00020 //initial values and arrays 00021 // disp to false and bullets to true(no bullets in the screen) 00022 void Stymphalianlib::init() 00023 { 00024 00025 _bullet.x=widthB/2; 00026 _bullet.y=heightB-5; 00027 _spacecraft.x=widthB/2; 00028 _spacecraft.y=heightB-5; 00029 _bullet0.x=rand()%6+1; 00030 _bullet1.x=rand()%8+1; 00031 _bullet2.x=rand()%10+1; 00032 _bullet0.y=3; 00033 _bullet1.y=-10; 00034 _bullet2.y=-23; 00035 _lifes=7; 00036 _score=0; 00037 00038 _bulletcheck=true; 00039 _alienbullet0=true; 00040 _alienbullet1=true; 00041 _alienbullet2=true; 00042 _dead=false; 00043 00044 _alienXbig[0]=1; 00045 _alienYbig[0]=3; 00046 _alienXbig[1]=2; 00047 _alienYbig[1]=3; 00048 _alienXbig[2]=3; 00049 _alienYbig[2]=3; 00050 _alienXbig[3]=4; 00051 _alienYbig[3]=3; 00052 _alienXbig[4]=5; 00053 _alienYbig[4]=3; 00054 _alienXbig[5]=6; 00055 _alienYbig[5]=3; 00056 _alienXbig[6]=7; 00057 _alienYbig[6]=3; 00058 00059 _alienXmedium[0]=1; 00060 _alienYmedium[0]=-10; 00061 _alienXmedium[1]=2; 00062 _alienYmedium[1]=-10; 00063 _alienXmedium[2]=3; 00064 _alienYmedium[2]=-10; 00065 _alienXmedium[3]=4; 00066 _alienYmedium[3]=-10; 00067 _alienXmedium[4]=5; 00068 _alienYmedium[4]=-10; 00069 _alienXmedium[5]=6; 00070 _alienYmedium[5]=-10; 00071 _alienXmedium[6]=7; 00072 _alienYmedium[6]=-10; 00073 _alienXmedium[7]=8; 00074 _alienYmedium[7]=-10; 00075 _alienXmedium[8]=9; 00076 _alienYmedium[8]=-10; 00077 00078 _alienXsmall[0]=1; 00079 _alienYsmall[0]=-23; 00080 _alienXsmall[1]=2; 00081 _alienYsmall[1]=-23; 00082 _alienXsmall[2]=3; 00083 _alienYsmall[2]=-23; 00084 _alienXsmall[3]=4; 00085 _alienYsmall[3]=-23; 00086 _alienXsmall[4]=5; 00087 _alienYsmall[4]=-23; 00088 _alienXsmall[5]=6; 00089 _alienYsmall[5]=-23; 00090 _alienXsmall[6]=7; 00091 _alienYsmall[6]=-23; 00092 _alienXsmall[7]=8; 00093 _alienYsmall[7]=-23; 00094 _alienXsmall[8]=9; 00095 _alienYsmall[8]=-23; 00096 _alienXsmall[9]=10; 00097 _alienYsmall[9]=-23; 00098 _alienXsmall[10]=11; 00099 _alienYsmall[10]=-23; 00100 } 00101 00102 //if alien y position higher than 40 (spacecraft position), then return true 00103 bool Stymphalianlib::destruction() 00104 { 00105 for (int i=0; i<7; i++) { 00106 if( _alienYbig[i]>40) { 00107 return true; 00108 } 00109 } 00110 for (int i=0; i<9; i++) { 00111 if(_alienYmedium[i]>40) { 00112 return true; 00113 } 00114 } 00115 for (int i=0; i<11; i++) { 00116 if(_alienYsmall[i]>40) { 00117 return true; 00118 } 00119 } 00120 00121 return false; 00122 } 00123 00124 00125 00126 //direction commands 00127 //if there was no player bullet on the screen, then if r or l pressed shoot the bullet from spacecraft position 00128 void Stymphalianlib::commands(Gamepad &pad,DigitalOut &l,DigitalOut &b,DigitalOut &x,DigitalOut &r) 00129 { 00130 Direction d = pad.get_direction(); 00131 if (d==W) { 00132 _spacecraft.x=_spacecraft.x-1; 00133 } else if(d==E) { 00134 _spacecraft.x=_spacecraft.x+1; 00135 } 00136 if (x) { 00137 _spacecraft.x=_spacecraft.x-1; 00138 } else if(b) { 00139 _spacecraft.x=_spacecraft.x+1; 00140 } 00141 00142 if (_spacecraft.x<1) { 00143 _spacecraft.x=1; 00144 } 00145 if (_spacecraft.x>78) { 00146 _spacecraft.x=78; 00147 } 00148 00149 if (_bulletcheck==true) { 00150 if (l) { 00151 pad.tone(NOTE_AS2,0.5); 00152 _bullet.x=_spacecraft.x; 00153 _bullet.y=_spacecraft.y; 00154 _bulletcheck=false; 00155 } 00156 00157 if(r) { 00158 pad.tone(NOTE_DS3,0.5); 00159 _bullet.x=_spacecraft.x+6; 00160 _bullet.y=_spacecraft.y; 00161 _bulletcheck=false; 00162 } 00163 } 00164 } 00165 00166 00167 //move y position of aliens 00168 void Stymphalianlib::move() 00169 { 00170 00171 for (int i=0; i<7; i++) { 00172 _alienYbig[i]++; 00173 } 00174 00175 for (int i=0; i<9; i++) { 00176 _alienYmedium[i]++; 00177 } 00178 for (int i=0; i<11; i++) { 00179 _alienYsmall[i]++; 00180 } 00181 } 00182 00183 void Stymphalianlib::leds(Gamepad &pad) 00184 { 00185 for(int i=1; i<_lifes; i++) { 00186 pad.led(i,1); 00187 } 00188 } 00189 00190 //check if any pixel of players bullet hitted any alien(in that case increse score and delete players bullet) 00191 //also put alien far away from the screen for appearing then as the player keeps killing aliens 00192 void Stymphalianlib::touch() 00193 { 00194 for(int i=0; i<7; i++) { 00195 00196 if( ( (_bullet.x==(_alienXbig[i]*10)) || (_bullet.x==(_alienXbig[i]*10+1)) || 00197 (_bullet.x+1==(_alienXbig[i]*10)) || (_bullet.x+1==(_alienXbig[i]*10+1))|| 00198 (_bullet.x==(_alienXbig[i]*10+2)) || (_bullet.x+1==(_alienXbig[i]*10+2)) )&& _bullet.y<(_alienYbig[i]+4)) { 00199 00200 _bulletcheck= true; 00201 _bullet.x=_spacecraft.x; 00202 _bullet.y=_spacecraft.y; 00203 _alienYbig[i]=-35; 00204 _score++; 00205 } 00206 } 00207 00208 for(int i=0; i<9; i++) { 00209 00210 if( ( (_bullet.x==(_alienXmedium[i]*8)) || (_bullet.x==(_alienXmedium[i]*8+1)) || 00211 (_bullet.x+1==(_alienXmedium[i]*8)) || (_bullet.x+1==(_alienXmedium[i]*8+1)) )&& _bullet.y<(_alienYmedium[i]+4)) { 00212 00213 _bulletcheck= true; 00214 _bullet.x=_spacecraft.x; 00215 _bullet.y=_spacecraft.y; 00216 _alienYmedium[i]=-48; 00217 _score+=2; 00218 } 00219 } 00220 00221 00222 for(int i=0; i<11; i++) { 00223 00224 if( ( (_bullet.x==(_alienXsmall[i]*7)) || (_bullet.x==(_alienXsmall[i]*7+1)) || 00225 (_bullet.x+1==(_alienXsmall[i]*7)) || (_bullet.x+1==(_alienXsmall[i]*7+1)) )&& _bullet.y<(_alienYsmall[i]+4)) { 00226 00227 _bulletcheck= true; 00228 _bullet.x=_spacecraft.x; 00229 _bullet.y=_spacecraft.y; 00230 _alienYsmall[i]=-61; 00231 _score+=3; 00232 } 00233 } 00234 //check if any alien bullet hitted the player or if they arrived to his y position(destruction) 00235 //in that case dead is true 00236 if((_spacecraft.x-1==_bullet0.x*10 && _bullet0.y>40) || 00237 (_spacecraft.x==_bullet0.x*10 && _bullet0.y>40) || 00238 (_spacecraft.x+1==_bullet0.x*10 && _bullet0.y>40) || 00239 (_spacecraft.x+2==_bullet0.x*10 && _bullet0.y>40) || 00240 (_spacecraft.x+3==_bullet0.x*10 && _bullet0.y>40) || 00241 (_spacecraft.x+4==_bullet0.x*10 && _bullet0.y>40) || 00242 (_spacecraft.x+5==_bullet0.x*10 && _bullet0.y>40) || 00243 (_spacecraft.x+6==_bullet0.x*10 && _bullet0.y>40) || 00244 (_spacecraft.x+7==_bullet0.x*10 && _bullet0.y>40)|| Stymphalianlib::destruction()) { 00245 _dead=true; 00246 } 00247 00248 if((_spacecraft.x-1==_bullet1.x*8 && _bullet1.y>40) || 00249 (_spacecraft.x==_bullet1.x*8 && _bullet1.y>40) || 00250 (_spacecraft.x+1==_bullet1.x*8 && _bullet1.y>40) || 00251 (_spacecraft.x+2==_bullet1.x*8 && _bullet1.y>40) || 00252 (_spacecraft.x+3==_bullet1.x*8 && _bullet1.y>40) || 00253 (_spacecraft.x+4==_bullet1.x*8 && _bullet1.y>40) || 00254 (_spacecraft.x+5==_bullet1.x*8 && _bullet1.y>40) || 00255 (_spacecraft.x+6==_bullet1.x*8 && _bullet1.y>40) || 00256 (_spacecraft.x+7==_bullet1.x*8 && _bullet1.y>40)|| Stymphalianlib::destruction()) { 00257 _dead=true; 00258 } 00259 00260 if((_spacecraft.x==_bullet2.x*7 && _bullet2.y>40) || 00261 (_spacecraft.x==_bullet2.x*7 && _bullet2.y>40) || 00262 (_spacecraft.x+1==_bullet2.x*7 && _bullet2.y>40) || 00263 (_spacecraft.x+2==_bullet2.x*7 && _bullet2.y>40) || 00264 (_spacecraft.x+3==_bullet2.x*7 && _bullet2.y>40) || 00265 (_spacecraft.x+4==_bullet2.x*7 && _bullet2.y>40) || 00266 (_spacecraft.x+5==_bullet2.x*7 && _bullet2.y>40) || 00267 (_spacecraft.x+6==_bullet2.x*7 && _bullet2.y>40) || 00268 (_spacecraft.x+7==_bullet2.x*7 && _bullet2.y>40)|| Stymphalianlib::destruction()) { 00269 _dead=true; 00270 } 00271 } 00272 //game over screen 00273 //if restart pressed, set values to original ones as well as the arrays to initial state 00274 void Stymphalianlib::gameover(N5110 &lcd,DigitalOut &start,Gamepad &pad) 00275 { 00276 lcd.clear(); 00277 lcd.printString("GAME OVER",10,2); 00278 sprintf(_buffer,"Score=%2d ",_score); 00279 lcd.printString(_buffer,10,4); // print formatted data to buffer 00280 lcd.refresh(); 00281 00282 if(start) { 00283 pad.leds_off(); 00284 _dead=false; 00285 _bullet0.y=0; 00286 _bullet1.y=0; 00287 _bullet2.y=0; 00288 _lifes=_lifes-1; 00289 _spacecraft.x=widthB/2; 00290 _spacecraft.y=heightB-5; 00291 _score=0; 00292 _alienXbig[0]=1; 00293 _alienYbig[0]=3; 00294 _alienXbig[1]=2; 00295 _alienYbig[1]=3; 00296 _alienXbig[2]=3; 00297 _alienYbig[2]=3; 00298 _alienXbig[3]=4; 00299 _alienYbig[3]=3; 00300 _alienXbig[4]=5; 00301 _alienYbig[4]=3; 00302 _alienXbig[5]=6; 00303 _alienYbig[5]=3; 00304 _alienXbig[6]=7; 00305 _alienYbig[6]=3; 00306 00307 _alienXmedium[0]=1; 00308 _alienYmedium[0]=-10; 00309 _alienXmedium[1]=2; 00310 _alienYmedium[1]=-10; 00311 _alienXmedium[2]=3; 00312 _alienYmedium[2]=-10; 00313 _alienXmedium[3]=4; 00314 _alienYmedium[3]=-10; 00315 _alienXmedium[4]=5; 00316 _alienYmedium[4]=-10; 00317 _alienXmedium[5]=6; 00318 _alienYmedium[5]=-10; 00319 _alienXmedium[6]=7; 00320 _alienYmedium[6]=-10; 00321 _alienXmedium[7]=8; 00322 _alienYmedium[7]=-10; 00323 _alienXmedium[8]=9; 00324 _alienYmedium[8]=-10; 00325 00326 _alienXsmall[0]=1; 00327 _alienYsmall[0]=-23; 00328 _alienXsmall[1]=2; 00329 _alienYsmall[1]=-23; 00330 _alienXsmall[2]=3; 00331 _alienYsmall[2]=-23; 00332 _alienXsmall[3]=4; 00333 _alienYsmall[3]=-23; 00334 _alienXsmall[4]=5; 00335 _alienYsmall[4]=-23; 00336 _alienXsmall[5]=6; 00337 _alienYsmall[5]=-23; 00338 _alienXsmall[6]=7; 00339 _alienYsmall[6]=-23; 00340 _alienXsmall[7]=8; 00341 _alienYsmall[7]=-23; 00342 _alienXsmall[8]=9; 00343 _alienYsmall[8]=-23; 00344 _alienXsmall[9]=10; 00345 _alienYsmall[9]=-23; 00346 _alienXsmall[10]=11; 00347 _alienYsmall[10]=-23; 00348 } 00349 } 00350 00351 00352 //draws all the bullets,aliens,and player 00353 //clears some pixels for improving appearance 00354 void Stymphalianlib::draw(N5110 &lcd) 00355 { 00356 lcd.clear(); 00357 lcd.drawRect(_bullet.x,_bullet.y,2,2,FILL_BLACK); 00358 for (int i=0; i<7; i++) { 00359 lcd.drawRect(_bullet0.x*10,_bullet0.y,2,2,FILL_BLACK); 00360 } 00361 for (int i=0; i<9; i++) { 00362 lcd.drawRect(_bullet1.x*8,_bullet1.y,2,2,FILL_BLACK); 00363 } 00364 for (int i=0; i<11; i++) { 00365 lcd.drawRect(_bullet2.x*7,_bullet2.y,2,2,FILL_BLACK); 00366 } 00367 00368 for (int i=0; i<7; i++) { 00369 00370 lcd.drawRect(_alienXbig[i]*10,_alienYbig[i],3,3,FILL_BLACK); 00371 lcd.setPixel(_alienXbig[i]*10+1,_alienYbig[i]+1,0); 00372 } 00373 for (int i=0; i<9; i++) { 00374 lcd.drawRect(_alienXmedium[i]*8,_alienYmedium[i],2,2,FILL_BLACK); 00375 lcd.setPixel(_alienXmedium[i]*8+1,_alienYmedium[i],0); 00376 } 00377 for (int i=0; i<11; i++) { 00378 lcd.drawRect(_alienXsmall[i]*7,_alienYsmall[i],2,2,FILL_BLACK); 00379 lcd.setPixel(_alienXsmall[i]*7+1,_alienYsmall[i]+1,0); 00380 lcd.setPixel(_alienXsmall[i]*7,_alienYsmall[i]+1,0); 00381 } 00382 00383 lcd.drawRect(_spacecraft.x,_spacecraft.y,8,2,FILL_BLACK); 00384 lcd.drawRect(_spacecraft.x,_spacecraft.y+-1,2,2,FILL_BLACK); 00385 lcd.drawRect(_spacecraft.x+6,_spacecraft.y-1,2,2,FILL_BLACK); 00386 lcd.drawLine(_spacecraft.x+2,_spacecraft.y+1,_spacecraft.x+6,_spacecraft.y+2,0); 00387 lcd.refresh(); 00388 } 00389 00390 00391 00392 //if players bullet on the screen move it two pixels each time 00393 //if bullet got away from screen make it to appear again in spacecraft position 00394 void Stymphalianlib::updatescr() 00395 { 00396 00397 if(_bullet.y<2) { 00398 _bulletcheck=true; 00399 _bullet.x=_spacecraft.x; 00400 _bullet.y=_spacecraft.y; 00401 } 00402 00403 if(_bulletcheck==false) { 00404 _bullet.x=_bullet.x; 00405 _bullet.y += -2; 00406 } 00407 00408 if(_bulletcheck==true) { 00409 _bullet.x=_spacecraft.x; 00410 _bullet.y=_spacecraft.y; 00411 } 00412 00413 //*****************FIRST UPDATE BULLET0***********////////// 00414 //if the alien is not in the screen dont let the bullet to be shooted 00415 for (int i=0; i<7; i++) { 00416 if(_alienYbig[i]<3 && _bullet0.x==i) { 00417 _alienbullet0=true; 00418 } 00419 } 00420 //if the alien bullet got away from the screen generate a new bullet in random position 00421 if(_bullet0.y>48) { 00422 _alienbullet0=true; 00423 } 00424 //if alien bullet in the screen move it two pixels each time 00425 if(_alienbullet0==false) { 00426 _bullet0.x=_bullet0.x; 00427 _bullet0.y+=2; 00428 } 00429 00430 //*****************SECOND UPDATE BULLET1***********////////// 00431 for (int i=0; i<9; i++) { 00432 if(_alienYmedium[i]<3 && _bullet1.x==i) { 00433 _alienbullet1=true; 00434 } 00435 } 00436 00437 if(_bullet1.y>48) { 00438 _alienbullet1=true; 00439 } 00440 00441 00442 if(_alienbullet1==false) { 00443 _bullet1.x=_bullet1.x; 00444 _bullet1.y+=2; 00445 } 00446 //*****************THIRD UPDATE BULLET2***********////////// 00447 for (int i=0; i<11; i++) { 00448 if(_alienYsmall[i]<3 && _bullet2.x==i) { 00449 _alienbullet2=true; 00450 } 00451 } 00452 00453 if(_bullet2.y>48 ) { 00454 _alienbullet2=true; 00455 } 00456 00457 00458 if(_alienbullet2==false) { 00459 _bullet2.x=_bullet2.x; 00460 _bullet2.y+=2; 00461 } 00462 } 00463 //generate alien bullets in random position where the aliens are 00464 //afterwards set alienbullet to false as there is a bullet in the screen 00465 void Stymphalianlib::auxiliar() 00466 { 00467 if(_alienbullet0==true) { 00468 _bullet0.x=rand()%6+1; 00469 _bullet0.y=_alienYbig[_bullet0.x-1]; 00470 _alienbullet0=false; 00471 } 00472 if(_alienbullet1==true) { 00473 _bullet1.x=rand()%8+1; 00474 _bullet1.y=_alienYmedium[_bullet1.x-1]; 00475 _alienbullet1=false; 00476 } 00477 if(_alienbullet2==true) { 00478 _bullet2.x=rand()%10+1; 00479 _bullet2.y=_alienYsmall[_bullet2.x-1]; 00480 _alienbullet2=false; 00481 } 00482 } 00483 00484 int Stymphalianlib::score () 00485 { 00486 return _score; 00487 }
Generated on Wed Jul 13 2022 07:38:17 by
1.7.2
