프로젝트

나도 메이커! 메이커스 여러분들의 작품/프로젝트를 공유하는 공간입니다.

두더지 잡기 게임

2015-04-06 23:59:17

LED와 스위치로 간단한 두더지 잡기 게임을 구현해봤습니다.

Image and video hosting by TinyPic

 

 

Image and video hosting by TinyPic

Image and video hosting by TinyPic

 

 

 

----  소스 코드 알려드려요~* ----

int ResetSW=0;    //재시작 스위치 핀 번호
int piezo=10;   //게임소리용 피에조 부저
int led[]={1,2,3,4,5,6,7,8,9};            //두더지 9마리
int sw[]={11,12,13,A0,A1,A2,A3,A4,A5}; //두더지 잡는 스위치 9개
int ending=0;     //게임종료용 변수
int dudog=0;      //두더지 잡은 수
int fin=5;          //잡을 두더지 마리 수
long randNumber;  //무작위로 튀어나올 두더지와 스위치 번호
int i;

void setup() {
    for(i=0; i<9; i++) {
        pinMode(led[i], OUTPUT);        //1~9번 두더지 사용
        pinMode(sw[i], INPUT_PULLUP);   //1~9번 두더지 스위치 사용(풀업)
    }
    pinMode(ResetSW, INPUT_PULLUP);     //리셋용 스위치 사용(풀업)
    pinMode(piezo, OUTPUT);       //게임소리 부저 사용
}

void loop() {
    if(ending==1) {

        //게임 재시작 스위치 입력 시 (게임종료에 관한 변수 초기화)
        if(digitalRead(ResetSW) == LOW) {    
            ending = 0;
            dudog=0;
            //게임 시작 소리
            tone(piezo, 880);  //5옥 라
            delay(200);
            tone(piezo, 932.33);  //5옥 라
            delay(200);
            noTone(piezo);
        }


    }
    else if (dudog==fin) {
        //엔딩 소리 (빠밤~빠밤빠~ 소라!)
        tone(piezo, 880);  //5옥 라
        delay(250);
        noTone(piezo);
        delay(100);
        tone(piezo, 880);  //5옥 라
        delay(1000);
        noTone(piezo);
        delay(100);
        tone(piezo, 880);  //5옥 라
        delay(500);
        noTone(piezo);
        delay(100);
        tone(piezo, 932.33);  //5옥 시
        delay(500);
        noTone(piezo);
        delay(100);
        tone(piezo, 1107.73);  //6옥 도#
        delay(500);
        noTone(piezo);
        delay(100);
        tone(piezo, 1174.66);  //6옥 레
        delay(250);
        noTone(piezo);
        delay(100);
        tone(piezo, 1174.66);  //6옥 레
        delay(250);
        noTone(piezo);     //소리 끄기

        ending = 1; //엔딩소리 더 이상 출력 안함 + 게임종료
    }
    else {
        randNumber = random(0,4); // 0번~4번 두더지까지 무작위로 선정!

        switch(randNumber) {
        case 0:
            dudogi();
            break;
        case 1:
            dudogi();
            break;
        case 2:
            dudogi();
            break;
        case 3:
            dudogi();
            break;
        case 4:
            dudogi();
            break;
        case 5:
            dudogi();
            break;
        case 6:
            dudogi();
            break;
        case 7:
            dudogi();
            break;
        case 8:
            dudogi();
            break;
        }
    }  

delay(1000); // 다음 두더지 튀어나올 대기시간

}
void dudogi()
{
    for (int count=0; count < 30; count++) {  
        if (dudog==fin) {    // 모든 두더지 잡았을 경우 for문 아웃->게임종료 
                            // for문 시작전 판단한다.
            break;
        }                      
        else if (digitalRead(sw[randNumber]) == LOW) {
            digitalWrite(led[randNumber], LOW);

            //두더지 죽는 소리
            tone(piezo, 440);  //솔
            delay(50);
            noTone(piezo);
            delay(50);
            tone(piezo, 440);  //솔
            delay(50);
            noTone(piezo);
            delay(50);
            tone(piezo, 523);  //라
            delay(200);
            noTone(piezo);     //소리 끄기         

            dudog++; // 두더지 잡은 숫자 증가
            break; // 두더지 잡으면 for문 종료해서 다른 두더지 찾음.
        }
        else    // 두더지 튀어나오기!
            digitalWrite(led[randNumber], HIGH);

        delay(100); // 0.1초마다 입력들어왔는지 확인
        digitalWrite(led[randNumber], LOW); // 3초동안 입력 없으면 불 꺼짐.

    }
}

 

노짱명지대학교