Dependencies: C12832 MMA7660 mbed
Fork of shot_game by
main.cpp
- Committer:
- Arsenic
- Date:
- 2015-04-15
- Revision:
- 2:f5dbfedf7489
- Parent:
- 0:6ab01cb28fd0
File content as of revision 2:f5dbfedf7489:
#include "mbed.h"
#include "C12832.h"
#include "MMA7660.h"
C12832 lcd(p5, p7, p6, p8, p11);
BusIn joy(p15, p16, p12, p16);
DigitalIn fire(p14);
DigitalIn up(p15);
DigitalIn down(p12);
DigitalIn right(p16);
DigitalIn left(p13);
BusOut leds(LED1,LED2,LED3,LED4);
PwmOut speaker(p26);
PwmOut r (p23);
PwmOut g (p24);
PwmOut b (p25);
MMA7660 MMA(p28, p27);
AnalogIn pot1(p19);
AnalogIn pot2(p20);
Ticker timeInt;
/*ゲームステータス*/
int rocket,shot,enemyX=127,enemyY,enemyX2,life=3,lifeLED=3,lvl=2,score=0;
unsigned int randoms=0;
void setHz(int Hz){
float sycle;
sycle = (float)1/Hz;
speaker.period(sycle);
speaker = 0.3;
}
void end(){
timeInt.detach();
r = g = b = 1;
lcd.cls();
lcd.locate(0, 0);
lcd.printf("SCORE:%d", score);
wait(2);
speaker = 0;
while(1);
}
void timeIntFunc(){
static unsigned int sownd=0,safeTime=40;
lcd.cls();
if(shot){
if(sownd<9)sownd = 1;
lcd.rect(9, (rocket*8)+3, 127, (rocket*8)+4, 1);
}
if(safeTime>0){
safeTime--;
enemyY = randoms % 4;
}
else if(enemyY == rocket && shot){
if(sownd<9)sownd = 5;
score++;
// lcd.fillcircle(enemyX+3, (enemyY*8)+4, 14, 1); //爆破エフェクト、ONにすると動作が不安定になる。
enemyX = 127;
enemyY = randoms%4;
if(!(score%20)){
lvl++;
}
}else{
enemyX -= lvl;
}
if(enemyX < 1){
life--;
sownd = 9;
enemyX = 127;
safeTime = 40;
}
if(enemyX > 120)enemyX2 = 127;
else enemyX2 = enemyX+7;
if(!safeTime)lcd.fillrect(enemyX, enemyY*8, enemyX2, (enemyY*8)+7, 1);
lcd.rect(0, rocket*8, 7, (rocket*8)+7, 1);
switch(sownd){
case 0:
speaker = 0;
sownd = 0;
break;
case 1:
setHz(1000);
sownd++;
break;
case 2:
setHz(660);
sownd++;
break;
case 3:
setHz(440);
sownd++;
break;
case 4:
setHz(200);
sownd = 0;
break;
case 5:
setHz(150);
sownd++;
break;
case 6:
setHz(100);
sownd++;
break;
case 7:
setHz(150);
sownd++;
break;
case 8:
setHz(100);
sownd = 0;
break;
case 9:
setHz(100);
sownd++;
lifeLED = life;
break;
case 10:
setHz(150);
sownd++;
lifeLED = life+1;
break;
case 11:
setHz(300);
sownd++;
lifeLED = life;
break;
case 12:
setHz(150);
sownd++;
lifeLED = life+1;
break;
case 13:
setHz(300);
sownd++;
lifeLED = life;
break;
case 14:
setHz(150);
sownd++;
lifeLED = life+1;
break;
case 15:
setHz(100);
sownd = 0;
lifeLED = life;
if(life == 0){
end();
}
break;
}
switch(lifeLED){
case 0:
r = b = g = 1;
break;
case 1:
r = 0;
g = 1;
break;
case 2:
r = g = 0;
break;
case 3:
g = 0;
r = 1;
break;
}
shot = 0;
}
int main() {
int upE,downE,rightE,leftE,fireE;
lcd.cls();
speaker = 0;
r.period(0.01);
g.period(0.01);
b.period(0.01);
r = g = b = 1;
lcd.locate(0, 0);
lcd.printf("PLEASE PRESS\n ANY BUTTON");
while(!joy && !fire);
timeInt.attach(&timeIntFunc, 0.050);
while(1){
randoms++;
if(!up)upE = 1;
if(!down)downE = 1;
if(!right)rightE = 1;
if(!left)leftE = 1;
if(!fire)fireE = 1;
if(fire && fireE){
randoms = 0;
fireE = 0;
shot = 1;
}else if(up && upE && rocket!=0){
randoms = 0;
upE = 0;
rocket--;
}else if(down && downE && rocket!=3){
randoms = 0;
downE = 0;
rocket++;
}
}
}
