기술 글보기제목아두이노 야구게임 만들기2023-02-15 15:07작성자 biplane 아두이노를 가지고 놀던 중 어렸을 적 자주 했었던 야구게임이 떠 올라 구현을 해 보았습니다.야구게임은 4자리의 숫자를 맞추는 게임으로 4개의 숫자는 전부 달라야 하고, 0~9까지의 숫자여야 하며정해진 턴안에 숫자를 맞춰나가는 게임입니다.같은 자리에 같은 숫자가 있으면 스트라이크, 다른 자리에 숫자가 있으면 볼입니다.소스는 아래 블로그를 참조하였습니다.https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=roboholic84&logNo=220868255093 아두이노의 시리얼 통신을 이용하는 것으로, 아두이노에 MAX3232를 연결하면 하이텔 단말기 등 더미 터미널에서 게임을 하실 수 있습니다.<순서>1. SoftReset 라이브러리 설치https://github.com/WickedDevice/SoftReset 1) 아두이노 라이브러리 설치하기https://codingrun.com/1002. 아두이노 소스#include <SoftReset.h>long a,b,c,d;int count_A = -1;int count_B = -1;int count_C = -1;int count_D = -1;int strike_c = 0;int ball_c = 0;int errorlist = 3;int chance = 1;char data;int i = 0;char count[3];unsigned long currentTime;void setup() { Serial.begin(9600); randomSeed(analogRead(0));//random함수 반드시 필요! check(); //random으로 초기값 설정 Serial.println("Guess the four numbers! Within 5 minutes! The same number cannot be used."); currentTime = millis(); }void loop() { unsigned long millisTime = millis(); if (millisTime - currentTime > 300000) {//5분이 지나면 Serial.println("Five minutes passed! You lost!"); Serial.println(""); Serial.println(""); delay(1000); soft_restart();//reset } if (Serial.available()) {// 만약 시리얼 통신이 온다면 data = Serial.read(); // 시리얼 통신 값을 문자형변수 data에 저장 Serial.print(data); // 그 값을 출력 count_A = count[0] - '0';// 문자를 숫자로 변환 count_B = count[1] - '0';// 문자를 숫자로 변환 count_C = count[2] - '0';// 문자를 숫자로 변환 count_D = count[3] - '0';// 문자를 숫자로 변환 if (i == 3) { check_error();//동일 숫자 여부 확인 check_num();//문자 입력 여부 확인 if(errorlist == 0) {//동일 숫자가 입력되지 않았으면 currentTime = millis(); checkS(); checkB(); Serial.println(""); Serial.print(strike_c); Serial.print(" strike, "); Serial.print(ball_c); Serial.print(" ball, "); Serial.print(chance); Serial.println(" chance"); if (strike_c == 4) { Serial.println("You win!"); Serial.println(""); Serial.println(""); delay(1000); soft_restart();//reset } strike_c = 0; ball_c = 0; chance = chance + 1;//도전횟수 if (chance > 9) { Serial.println("You lost!"); Serial.print("Answer : "); Serial.print(a); Serial.print(b); Serial.print(c); Serial.println(d); Serial.println(""); Serial.println(""); delay(1000); soft_restart();//reset } } else if (errorlist == 1) { Serial.println(""); Serial.println("The same number cannot be used."); } else { Serial.println(""); Serial.println("Only numbers are allowed."); } i = -1; } count[i] = data; i++; } }void check(){ do { a = random(0,10); b = random(0,10); c = random(0,10); d = random(0,10); } while( a==b || a==c || a==d || b==c || b==d || c==d ); //do-while문은 최초 1회는 실행,거짓조건 출력}//random으로 초기값 설정///////////////////////////////void checkS(){ if(a == count_A || a == 9 && count_A == -1) strike_c = strike_c + 1; if(b == count_B || b == 9 && count_B == -1) strike_c = strike_c + 1; if(c == count_C || c == 9 && count_C == -1) strike_c = strike_c + 1; if(d == count_D || d == 9 && count_D == -1) strike_c = strike_c + 1;}//입력값과 정해준 값 비교(stike_c)///////////////////////////////void checkB(){ if(a == count_B || a == count_C || a == count_D) ball_c = ball_c + 1; if(b == count_A || b == count_C || b == count_D) ball_c = ball_c + 1; if(c == count_A || c == count_B || c == count_D) ball_c = ball_c + 1; if(d == count_A || d == count_B || d == count_C) ball_c = ball_c + 1;}//입력값과 정해준 값 비교(ball_c)///////////////////////////////void check_error(){ if(count_A == count_B || count_A == count_C || count_A == count_D || count_B == count_C || count_B == count_D || count_C == count_D ) errorlist = 1; else errorlist = 0;}//동일 숫자 입력 여부 확인///////////////////////////////void check_num(){ if(!isDigit(count[0]) || !isDigit(count[1]) || !isDigit(count[2]) || !isDigit(count[3])) errorlist = 2;}//문자 입력 여부 확인3. 시리얼 모니터 혹은 Putty 등에서 확인<참고 : 아두이노 나노 - MAX3232 연결>옛 실력이 아직 살아있어 9번 내에 거의 승리했습니다.오랜 만에 하니까 재미있네요 ^^여러분도 추억의 야구게임을 한번 해보심이~~~ 태그 목록글쓰기 댓글 [0] 댓글작성자(*)비밀번호(*)내용(*) 댓글 등록 더보기이전[Stable Diffusion] 설정집 만들기 biplane 2023-05-29-아두이노 야구게임 만들기 biplane 2023-02-15다음AVR 8Bit 컴퓨터 만들기 biplane 2023-02-15 Powered by MangBoard | 워드프레스 쇼핑몰 망보드 Share it now!