기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다.
같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고,
그 힌트를 이용해서 먼저 상대방의 수를 맞추면 승리한다.
[예] 상대방의 수가 425일 때,
123을 제시한 경우 : 1 스트라이크
456을 제시한 경우 : 1 스트라이크 1볼
789를 제시한 경우 : 낫싱
위 숫자 야구게임에서 상대방의 역할을 컴퓨터가 한다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다.
게임 플레이어는 컴퓨터가 생각하고 있는 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과를 출력한다.
이 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임이 종료된다.
게임 진행 결과는 다음과 같다.
숫자를 입력해주세요 ex)123 : 123
1 스트라이크 1볼
숫자를 입력해주세요 ex)123 : 145
1볼
숫자를 입력해주세요 ex)123 : 671
2볼
숫자를 입력해주세요 ex)123 : 216
1 스트라이크
숫자를 입력해주세요 ex)123 : 713
3 스트라이크
3개의 숫자를 모두 맞히셨습니다! 게임 종료
- 함수(또는 메소드) 하나의 크기가 최대 10라인을 넘지 않도록 구현한다.
- 함수(또는 메소드)가 한 가지 일만 하도록 최대한 작게 만들어라.
- indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다.
- 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
- 전역 변수를 사용하지 않는다.
컴퓨터가 3개의 값을 선택할 때 각 언어별 random 함수(또는 메소드) 또는 shuffle 함수(또는 메소드)를 이용하면 편한다.
반복문을 2중(반복문 안의 반복문)으로 사용하면 한번에 고려할 부분이 많다.
2중 반복문을 1중 반복문 2개로 나누어 처리하는 방법은 없는지 고려해 본다.
indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다.
작업 기간 : 1 주일
개발 언어 : JAVA
-
컴퓨터 생성 : makeCom() , 사용자 생성 : makeUser()
-
에러 처리 : errCheck() 에서 한꺼번에 처리 - [ posCheck() : 자리수 체크, userOverlap() : 사용자 숫자 중복 체크 ] comOverlap() : 컴퓨터 숫자 중복 체크
-
비교 연산 : compare() 를 통해 컴퓨터와 사용자 숫자 비교
-
루프는 무한 반복 "3 STRICK" 가 나올 때 빠져 나옴
-
depth < 3 을 맞추기 위해 이중 For문을 단일 For문으로 수정
-
중복 체크 과정에서 숫자 3개를 사용할 때는 이상 없이 돌아 가지만 4개 이상(maxNum > = 4)일 때 문제 발생
2018-08-03 (금) 07:29 박재성 (pobi) 교수님의 코드 리뷰
안녕하세요. 코드스쿼드 백엔드 마스터즈 코스를 담당하고 있는 박재성입니다. 제출한 과제에 대한 코드 리뷰 결과 공유하니 피드백 내용 반영 후 다시 제출해 보시기 바랍니다.
- indent가 2depth 규칙에 맞춰 구현을 잘함.
- 메소드 분리를 잘 했음.
- 예외 처리를 철저하게 잘 했음.
- main()의 maxNum은 변하지 않는 상수 값임. 상수 값으로 구현해 모든 메소드에 전달하는 maxNum 인자를 제거한다.
- 힌트 : 자바의 상수는 static final로 구현 가능함
- comOverlap()에 2개의 인자가 전달되고 있다. comOverlap()을 아무런 인자도 전달하지 않고 구현한다.
- 힌트 : maxNum은 상수로 추출해 전달할 필요 없음. comArr는 comOverlap()에서 생성해 return
- makeUser()에서 마지막에 에러 체크를 하고 있는데 사용자 값을 입력한 후 바로 posCheck() 메소드 호출, 값을 3개로 분리한 후 userOverlap() 메소드 호출로 나누어 구현한다.
- 스트라이크는 영어로 strick이 아니라 strike임
- 3 스트라이크를 하면 게임이 종료되는 것으로 구현했다. 3 스트라이크를 하면 게임을 종료하는 것이 아니라 게임을 새로 시작할 수 있도록 개선한다.
감사합니다.
- 2018-08-03 11:00 코드 수정 완료