Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
