Mateo Gomez-Randulfe / Mbed 2 deprecated The_Children_of_Cronos

Dependencies:   mbed

Fork of The_Children_of_Cronos_el15mggr by ELEC2645 (2016/17)

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Stymphalianlib.cpp Source File

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 }