게임의 전체코드
#include<IRremote.h>
#include<stdllib.h>
int rows[]={2,3,4,5,6,7,8,9,}; //핀번호설정
int cols[]={10,11,12,13,A0,A1,A2,A3};
int rc=A5;
IRrecv irrecv(rc);
decode_results results;
int stage =1;
int point =0;
int LEDran[25];
int input[25];
int result =0;
void setup() //핀을 출력용도로 설정
{
for (int i=0; i< 8 ; i++) {
pinMode(rows[i] , OUTPUT);
pinMode(cols[i] , OUTPUT);
}
pinMode(rc , INPUT);
Serial.begin(9600);
irrecv.enableIRIn();
}
void clear() //모든LED끄는함수
{
for ( I=0 ; i<8 ; I++) {
digitalWrite(rows[i], LOW);
digitalWrite(cols[[i],HIGH);
}
}
void ready(){ //문제출제후 대각선으로 LED출력함수
for ( i=0 ; i<8 ; I++){
digitalWrite(rows[i+2], HIGH);
digitalWrite(cols[[i], LOW);
delay(300);
clear();
}
}
void all() { //모든LED켜는함수 사용자 입력을 기다림
digitalWrite(rows[2], HIGH) ;
digitalWrite(rows[3], HIGH) ;
digitalWrite(rows[4], HIGH) ;
digitalWrite(rows[5], HIGH) ;
digitalWrite(rows[6], HIGH) ;
digitalWrite(rows[7], HIGH) ;
digitalWrite(cols[0], LOW) ;
digitalWrite(cols[1], LOW) ;
digitalWrite(cols[2], LOW) ;
digitalWrite(cols[3], LOW) ;
digitalWrite(cols[4], LOW) ;
digitalWrite(cols[5], LOW) ;
delay(500);
clear();
}
void LED( int NUM) { //NUM이라는 숫자 보턴값을 매개변수로전달받아
int garo[2]; //특정번호의 LED가 켜지도록 하는 함수
int sero[2];
if ( NUM <3){
garo[0] =2;
sero[0] = ( 2*NUM);
}
else if ( NUM <6 ) {
garo[0] =4;
sero[0]= (2*(NUM-3));
}
else {
garo[0]= 6;
sero[0]= (2*(NUM-6)) ;
}
sero[1]= sero[0]+1;
garo[1]= garo[[0]+1;
digitalWrite(rows[garo[0]], HIGH);
digitalWrite(rows[garo[1]], HIGH);
digitalWrite(cols[sero[0]], LOW);
digitalWrite(cols[sero[1]], LOW);
delay(500);
clear();
}
int Decoder( int button) {
switch(button) {
case 0x2FD807F:
return 0:
break;
case 0x2FD40BF:
return 1:
break;
case 0x2FDC03F:
return 2:
break;
case 0x2FD20DF:
return 3:
break;
case 0x2FDA05F:
return 4:
break;
case 0x2FD609F:
return 5:
break;
case 0x2FDE01F:
return 6:
break;
case 0x2FD10EF:
return 7:
break;
case 0x2FD906F:
return 8:
break;
default ;
return 9;
break;
}
}
void incorrect() { // 정답이 틀렸을 때 x를 출력하는 함수
digitalWrite(rows[2], HIGH );
digitalWrite(cols[0], LOW );
digitalWrite(cols[5], LOW );
delay(200);
clear();
digitalWrite(rows[3], HIGH );
digitalWrite(cols[1], LOW );
digitalWrite(cols[4], LOW );
delay(200);
clear();
digitalWrite(rows[4], HIGH );
digitalWrite(cols[2], LOW );
digitalWrite(cols[3], LOW );
delay(200);
clear();
digitalWrite(rows[5], HIGH );
digitalWrite(cols[2], LOW );
digitalWrite(cols[3], LOW );
delay(200);
clear();
digitalWrite(rows[6], HIGH );
digitalWrite(cols[1], LOW );
digitalWrite(cols[4], LOW );
delay(200);
clear();
digitalWrite(rows[7], HIGH );
digitalWrite(cols[0], LOW );
digitalWrite(cols[5], LOW );
delay(200);
clear();
}
void correct() { // 정답이 맞았을 때 o를 출력하는 함수
digitalWrite(rows[2], HIGH );
digitalWrite(cols[2], LOW );
digitalWrite(cols[3], LOW );
delay(200);
clear();
digitalWrite(rows[3], HIGH );
digitalWrite(cols[1], LOW );
digitalWrite(cols[4], LOW );
delay(200);
clear();
digitalWrite(rows[4], HIGH );
digitalWrite(cols[0], LOW );
digitalWrite(cols[5], LOW );
delay(200);
clear();
digitalWrite(rows[5], HIGH );
digitalWrite(cols[0], LOW );
digitalWrite(cols[5], LOW );
delay(200);
clear();
digitalWrite(rows[6], HIGH );
digitalWrite(cols[1], LOW );
digitalWrite(cols[4], LOW );
delay(200);
clear();
digitalWrite(rows[7], HIGH );
digitalWrite(cols[2], LOW );
digitalWrite(cols[3], LOW );
delay(200);
clear();
}
void loop() {
Serial.print( " current stage : ") ;
Serial.println( stage , Dec) ;
Serial.print( " Point : ") ;
Serial.println( point , Dec) ;
clear() ;
ready();
for ( int i=0; i < stage ; i++) { // 단계에따라 문제로 출제할 숫자생성
LEDran[i] = (rand()) %9 ;
}
for ( int i=0 ; i< stage ; i++) { // 문제출제
LED( LEDran[i] ) ;
Serial.print( LEDran[i], DEC);
delay(100);
}
ready();
Serial.println (" " );
for ( int i = 0 ; i < stage ; i++ ) {
all();
if (irrecv.decode(&results)) { //사용자 입력을 받아 LED Matrix에 표시
input[i] = Decoder( results.value);
LED( input[i]);
delay(100);
clear();
Serial.print( input[i],DEC);
irrecv.resume();
}
}
all();
Serial.println ( " " );
for ( int i = 0; i < stage ; i++ ) { //사용자의 입력이 정답인지 검사
if ( LEDran [i] ! =input[i] ) result =1;
}
if (result ==0){ //정답이면 o를 출력
correct(); // 포인트 추가, 다음단계로 넘어감
point++;
stage++;
}
else{ //틀렸으면 x를 출력
incorrect();
}
result = 0;
}