mbedアプリケーションボード( http://developer.mbed.org/cookbook/mbed-application-board )を使用した、簡単なシューティングゲーム

Dependencies:   C12832 MMA7660 mbed

main.cpp

Committer:
Arsenic
Date:
2015-04-15
Revision:
1:f5dbfedf7489
Parent:
0:6ab01cb28fd0

File content as of revision 1: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++;
        }
    }
}