본문 바로가기
[YERIEL] 개발일기/.etc

[C언어] 베이스볼게임 만들기

by YERIEL_염주둥 2021. 5. 13.
728x90

해당 글의 코드는 제가 학교 과제를 위해 만들었고 꽤 잘 만들었다고 생각해서 작성한 블로그입니다.

과제 시즌이 되었는지 이런 댓글이 남겨졌더라구요...
이 코드를 만든지 벌써 1년이나 지났지만 이 과제 하기 위해서 저도 꽤 많은 레퍼런스도 찾아보고 시간도 투자한 기억이 나고 꽤 많은 예외처리까지 잘한 코드라고 생각해서 자랑스럽게 블로그에 회고록을 남긴건데 연달아 댓글이 저렇게 달려버리니 속상하네요...
이 블로그 작성하면서 또 다른 이슈를 발견 했고 고쳐서 수정 할 수 있도록 하겠다고 물론 제가 글을 남겼지만 당연하듯 코드 수정됬냐고 물어보는 질문은 물론 그런 의도는 아니였을 수도 있지만 속상해서... ㅠㅠ 당분간 코드는 내려놓도록 하겠습니다. 
이 코드를 복사해서 실행해보고 정말 이슈가 있는지 테스트를 해봤는지는 모르겠지만 어떤 이슈가 있는지까지 적혀져있고 난이도가 높지 않은 이슈라 충분히 혼자 고민해보고 수정할 수 있는 이슈라고 생각도 하거든요...

그래도 저런 댓글이 남겨졌다는 것은 꽤 잘 만들어진 코드니까 달렸다고 조금이나마 위안삼아보겠습니다.

C언어를 이용해서 간단한 베이스볼 게임 만들기를 해보겠습니다.

 

1. 중복 되지 않는 난수 설정하기

게임 시작과 동시에 자동으로 중복 되지 않는 정수 3개를 설정해야합니다.

rand

세개의 정수를 담을 배열 answerArr[3]과, 반복문을 돌리기 위한 변수 i 와 sub_i를 선언합니다.

그러고나서 반복문과 rand()%9를 통해 0 ~ 9까지의 정수 3개를 생성하고 또 하나의 반복문으로 숫자가 중복이 되는지 확인합니다.

srand, time

srand 함수는 rand 함수에 사용될 수를 초기화 하는일인데요, 이 초기화를 매개변수로 받는 seed 값을 이용해서 합니다.

이 함수가 필요한 이유는 rand 함수만 사용해서 게임을 진행하게 되면 계속 똑같은 수만 생성이 됩니다. 첫 번째 게임, 두 번째 게임, 세 번째 게임 모두 똑같은 수로 게임을 진행 하게 되죠. 그래서 rand함수로 생성된 수를 초기화 해줄 srand 함수가 필요합니다.

srand 함수는 매개변수로 들어온 seed 값과 매칭되는 숫자가 정해집니다
그럼 seed값이 정해져있으면 숫자가 또 똑같겠군요. 그래서 매번 달라질수 있는 time함수를 사용합니다.

이렇게 해서 매 세트 반복 되지 않고 자리수가 중복 되지 않는 정수 3개를 생성했습니다.

 

2. 숫자 입력 받기

scanf

scanf 함수를 이용해서 정수 3개를 입력 받습니다.

이 때 inputArr이라는 배열을 선언에서 배열에 담아보도록 하겠습니다.

 

3. 10회 안에 스트라이크 3개 나오기

10회 동안 정수를 맞추지 못하면 게임이 종료 되도록 만들어 보겠습니다.

맞추는 횟수의 변수 retry와 스트라이크 변수 strkie, 볼 변수 ball 세개를 선언합니다.

retry가 10 미만과 strike가 3미만인 반복문은 선언 후 그 안에서 정수를 입력 받고 입력 받은 수와 생성 된 수가 일치하는지 확인하는 로직을 작성합니다.

그 후 결과를 나타내는 조건문을 작성합니다.

저는 한번에 맞췄을 경우 홈런이라는 멘트를, 10번 안에 성공했을 때는 성공, 그 외에는 Game over 라는 조건문을 작성했습니다.

4. 예외 처리

입력을 동시에 3개를 받다보니 띄어쓰기로 구분해서 받아야하는데, 띄어쓰기가 안되면 10을 넘는 정수로 입력이 된다. 이 경우와 중복 되는 정수를 입력 받게 되는 경우 두 가지 예외처리를 하고자 한다.

10이 넘는 정수를 입력 받았을 경우

입력된 정수가 9 초과 일경우 break로 for문 중단

중복되는 정수를 입력 받았을 경우

이 경우에는 반복문을 두번만 실행 하는데 첫번째 수와 두번째 수가 중복되거나, 두 번째 수와 세 번째 수가 중복 되는 경우를 만나면 for문이 중단 된다.

코드를 짤때는 몰랐는데 이 블로그를 정리하면서 보니 첫 번째 수와 세 번째 수가 중복 되는 경우가 처리가 안되어있다. 조만간 수정해서 블로그도 수정 할수 있도록 해야겠다.

반응형

'[YERIEL] 개발일기 > .etc' 카테고리의 다른 글

[AWS] Elastic Beanstalk EB CLI 설치  (0) 2023.12.13
jQurey - Ajax  (0) 2020.03.31
jQuery - json Ajax  (0) 2020.03.31
jQuery - Html Ajax  (0) 2020.03.31
객체 편집 메서드 실습  (0) 2020.03.31

댓글