BASIC4MCU | 질문게시판 | 아두이노 8x8 led로 가위바위보 게임하기
페이지 정보
작성자 jsham21 작성일2022-04-02 17:36 조회10,760회 댓글3건본문
8x8 led로 가위바위보 게임을 하려고 합니다.
1과 3사이의 난수를 설정하여서 승패를 가려내려고 하는데
스위치를 한번 누르면 여러번 누른것으로 처리되어 결과가 제대로 나타나지 않습니다.
이를 해결할 수 있는 방법이 있을까요?
int i;
int j;
int k;
int randNumber;
int Row[8]={0b000001, 0b000010, 0b000001, 0b000010, 0b000100, 0b001000, 0b010000, 0b100000};
int Col[8]={0,0,0,0,0,0,0,0};
int Rock[8]={0x00,0x00,0x3C,0x3C,0x3C,0x7C,0x3C,0x00};
int Sci[8]={0x00,0x28,0x28,0x28,0x3C,0x7C,0x7C,0x3C};
int Pap[8]={0x00,0x08,0x1C,0x1E,0x5E,0x7E,0x3E,0x3E};
int Win[8]={0x18,0x24,0x42,0x00,0x7E,0x00,0x3C,0x3C};
int Draw[8]={0x18,0x24,0x42,0x42,0xE2,0x42,0x04,0x08};
int Lose[8]={0x00,0xA0,0xBF,0xAA,0xEA,0xBF,0xA0,0xA0};
void printing(void);
void setup() {
DDRD=0b11111111;
DDRB=0b000011;
DDRC=0b111111;
}
void loop() {
for (i=0;i<8;i++)
{
if(PINB&0b100000)
{
if(randNumber==1)
{
Col[i]=Draw[i];
}
else if(randNumber==2)
{
Col[i]=Win[i];
}
else
{
Col[i]=Lose[i];
}
}
else if(PINB&0b010000)
{
Col[i]=Sci[i];
}
else if(PINB&0b001000)
{
Col[i]=Pap[i];
}
else
{
Col[i]=Draw[i];
}
}
printing();
}
void printing(void){
i=0;
for(i=0;i<8;i++){
PORTD=~Col[i];
if(i<2)
{
PORTB=Row[i];
PORTC=0x00;
}
else
{
PORTB=0x00;
PORTC=Row[i];
}
delay(1);
}
}
댓글 3
조회수 10,760master님의 댓글
master 작성일
int Row[8]={0b000001,0b000010,0b000001,0b000010,0b000100,0b001000,0b010000,0b100000};
int Col[8]={0,0,0,0,0,0,0,0};
int Rock[8]={0x00,0x00,0x3C,0x3C,0x3C,0x7C,0x3C,0x00};
int Sci[8]={0x00,0x28,0x28,0x28,0x3C,0x7C,0x7C,0x3C};
int Pap[8]={0x00,0x08,0x1C,0x1E,0x5E,0x7E,0x3E,0x3E};
int Win[8]={0x18,0x24,0x42,0x00,0x7E,0x00,0x3C,0x3C};
int Draw[8]={0x18,0x24,0x42,0x42,0xE2,0x42,0x04,0x08};
int Lose[8]={0x00,0xA0,0xBF,0xAA,0xEA,0xBF,0xA0,0xA0};
//
int i,j,k,randNumber;
//
void printing(void){
i=0;
for(i=0;i<8;i++){
PORTD=~Col[i];
if(i<2){ PORTB=Row[i]; PORTC=0x00; }
else { PORTC=Row[i]; PORTB=0x00; }
delay(1);
}
}
//
void setup(){
DDRD=0b11111111;
DDRB=0b00000011;
DDRC=0b00111111;
}
//
void loop(){
for(i=0;i<8;i++){
if(PINB&0x20){
if (randNumber==1){ Col[i]=Draw[i]; }
else if(randNumber==2){ Col[i]=Win[i]; }
else { Col[i]=Lose[i]; }
}
else if(PINB&0x10){ Col[i]=Sci[i]; }
else if(PINB&0x08){ Col[i]=Pap[i]; }
else { Col[i]=Draw[i]; }
}
printing();
}
randNumber 변수 설정 관련 코드도 없고,
스위치 입력은 어느 스위치 입력이 문제가 된다는 것인지도 모르겠군요
jsham21님의 댓글
jsham21
답변 감사합니다.
사용자가 게임을 하기 위해서 스위치를 누르면 랜덤변수가 생성되어 승 패 무를 판단하게 하려고 합니다.
근데 스위치를 한번 누를때마다 변수를 설정하고 싶은데 바운싱(저도 검색해보고 알았습니다.)때문에 한번 누를 때마다 수십번의 승패 판정이 됩니다.
이를 해결하려면 어떤 방법을 써야할까요?
jsham21님의 댓글
jsham21 작성일
int i;
int j;
int k;
int randNumber;
int Row[8]={0b000001, 0b000010, 0b000001, 0b000010, 0b000100, 0b001000, 0b010000, 0b100000};
int Col[8]={0,0,0,0,0,0,0,0};
int Rock[8]={0x00,0x00,0x3C,0x3C,0x3C,0x7C,0x3C,0x00};
int Sci[8]={0x00,0x28,0x28,0x28,0x3C,0x7C,0x7C,0x3C};
int Pap[8]={0x00,0x08,0x1C,0x1E,0x5E,0x7E,0x3E,0x3E};
int Win[8]={0x18,0x24,0x42,0x00,0x7E,0x00,0x3C,0x3C};
int Draw[8]={0x3F,0x21,0x21,0xA9,0x71,0x21,0x01,0x3F};
int Lose[8]={0x00,0xA0,0xBF,0xAA,0xEA,0xBF,0xA0,0xA0};
void printing(void);
void setup() {
DDRD=0b11111111;
DDRB=0b000011;
DDRC=0b111111;
}
void loop() {
randNumber=random(1,4);
for (i=0;i<8;i++)
{
if(PINB&0b100000)
{
if(randNumber==1)
{
Col[i]=Draw[i];
}
else if(randNumber==2)
{
Col[i]=Win[i];
}
else
{
Col[i]=Lose[i];
}
}
else if(PINB&0b010000)
{
if(randNumber==1)
{
Col[i]=Lose[i];
}
else if(randNumber==2)
{
Col[i]=Draw[i];
}
else
{
Col[i]=Win[i];
}
}
else if(PINB&0b001000)
{
if(randNumber==1)
{
Col[i]=Win[i];
}
else if(randNumber==2)
{
Col[i]=Lose[i];
}
else
{
Col[i]=Draw[i];
}
}
else
{
Col[i]=Draw[i];
}
}
printing();
}
void printing(void){
i=0;
for(i=0;i<8;i++){
PORTD=~Col[i];
if(i<2)
{
PORTB=Row[i];
PORTC=0x00;
}
else
{
PORTB=0x00;
PORTC=Row[i];
}
delay(1);
}
}