Dependencies:   C12832 MMA7660 mbed

Fork of shot_game by Takuma Miyazaki

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "C12832.h"
00003 #include "MMA7660.h"
00004 
00005 C12832 lcd(p5, p7, p6, p8, p11);
00006 BusIn joy(p15, p16, p12, p16);
00007 DigitalIn fire(p14);
00008 DigitalIn up(p15);
00009 DigitalIn down(p12);
00010 DigitalIn right(p16);
00011 DigitalIn left(p13);
00012 BusOut leds(LED1,LED2,LED3,LED4);
00013 PwmOut speaker(p26);
00014 PwmOut r (p23);
00015 PwmOut g (p24);
00016 PwmOut b (p25);
00017 MMA7660 MMA(p28, p27);
00018 AnalogIn pot1(p19);
00019 AnalogIn pot2(p20);
00020 Ticker timeInt;
00021 
00022 /*ゲームステータス*/
00023 int rocket,shot,enemyX=127,enemyY,enemyX2,life=3,lifeLED=3,lvl=2,score=0;
00024 unsigned int randoms=0;
00025 
00026 void setHz(int Hz){
00027     float sycle;
00028     sycle = (float)1/Hz;
00029     speaker.period(sycle);
00030     speaker = 0.3;
00031 }
00032 
00033 void end(){
00034     timeInt.detach();
00035     r = g = b = 1;
00036     lcd.cls();
00037     lcd.locate(0, 0);
00038     lcd.printf("SCORE:%d", score);
00039     wait(2);
00040     speaker = 0;
00041     while(1);
00042 }
00043 
00044 
00045 void timeIntFunc(){
00046     static unsigned int sownd=0,safeTime=40;
00047     
00048     lcd.cls();
00049     
00050     if(shot){
00051         if(sownd<9)sownd = 1;
00052         lcd.rect(9, (rocket*8)+3, 127, (rocket*8)+4, 1);
00053     }
00054     
00055     if(safeTime>0){
00056         safeTime--;
00057         enemyY = randoms % 4;
00058     }
00059     else if(enemyY == rocket && shot){
00060         if(sownd<9)sownd = 5;
00061         score++;
00062 //        lcd.fillcircle(enemyX+3, (enemyY*8)+4, 14, 1); //爆破エフェクト、ONにすると動作が不安定になる。
00063         enemyX = 127;
00064         enemyY = randoms%4;
00065         if(!(score%20)){
00066             lvl++;
00067         }
00068     }else{
00069         enemyX -= lvl;
00070     }
00071     
00072     if(enemyX < 1){
00073         life--;
00074         sownd = 9;
00075         enemyX = 127;
00076         safeTime = 40;
00077     }
00078     
00079     if(enemyX > 120)enemyX2 = 127;
00080     else enemyX2 = enemyX+7;
00081     if(!safeTime)lcd.fillrect(enemyX, enemyY*8, enemyX2, (enemyY*8)+7, 1);
00082     lcd.rect(0, rocket*8, 7, (rocket*8)+7, 1);
00083     
00084     switch(sownd){
00085         case 0:
00086         speaker = 0;
00087         sownd = 0;
00088         break;
00089         case 1:
00090         setHz(1000);
00091         sownd++;
00092         break;
00093         case 2:
00094         setHz(660);
00095         sownd++;
00096         break;
00097         case 3:
00098         setHz(440);
00099         sownd++;
00100         break;
00101         case 4:
00102         setHz(200);
00103         sownd = 0;
00104         break;
00105         
00106         case 5:
00107         setHz(150);
00108         sownd++;
00109         break;
00110         case 6:
00111         setHz(100);
00112         sownd++;
00113         break;
00114         case 7:
00115         setHz(150);
00116         sownd++;
00117         break;
00118         case 8:
00119         setHz(100);
00120         sownd = 0;
00121         break;
00122         
00123         case 9:
00124         setHz(100);
00125         sownd++;
00126         lifeLED = life;
00127         break;
00128         case 10:
00129         setHz(150);
00130         sownd++;
00131         lifeLED = life+1;
00132         break;
00133         case 11:
00134         setHz(300);
00135         sownd++;
00136         lifeLED = life;
00137         break;
00138         case 12:
00139         setHz(150);
00140         sownd++;
00141         lifeLED = life+1;
00142         break;
00143         case 13:
00144         setHz(300);
00145         sownd++;
00146         lifeLED = life;
00147         break;
00148         case 14:
00149         setHz(150);
00150         sownd++;
00151         lifeLED = life+1;
00152         break;
00153         case 15:
00154         setHz(100);
00155         sownd = 0;
00156         lifeLED = life;
00157         if(life == 0){
00158             end();
00159         }
00160         break;
00161     }
00162     switch(lifeLED){
00163         case 0:
00164         r = b = g = 1;
00165         break;
00166         case 1:
00167         r = 0;
00168         g = 1;
00169         break;
00170         case 2:
00171         r = g = 0;
00172         break;
00173         case 3:
00174         g = 0;
00175         r = 1;
00176         break;
00177     }
00178     shot = 0;
00179 }
00180 
00181 int main() {
00182     int upE,downE,rightE,leftE,fireE;
00183     lcd.cls();
00184     speaker = 0;
00185     r.period(0.01);
00186     g.period(0.01);
00187     b.period(0.01);
00188     r = g = b = 1;
00189     lcd.locate(0, 0);
00190     lcd.printf("PLEASE PRESS\n    ANY BUTTON");
00191     while(!joy && !fire);
00192     timeInt.attach(&timeIntFunc, 0.050);
00193     while(1){
00194         randoms++;
00195         if(!up)upE = 1;
00196         if(!down)downE = 1;
00197         if(!right)rightE = 1;
00198         if(!left)leftE = 1;
00199         if(!fire)fireE = 1;
00200         if(fire && fireE){
00201             randoms = 0;
00202             fireE = 0;
00203             shot = 1;
00204         }else if(up && upE && rocket!=0){
00205             randoms = 0;
00206             upE = 0;
00207             rocket--;
00208         }else if(down && downE && rocket!=3){
00209             randoms = 0;
00210             downE = 0;
00211             rocket++;
00212         }
00213     }
00214 }