코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2015-04-06 23:59:17
LED와 스위치로 간단한 두더지 잡기 게임을 구현해봤습니다.
---- 소스 코드 알려드려요~* ----
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초동안 입력 없으면 불 꺼짐.
}
}
노짱명지대학교