2.정답을 맞추기 위해 숫자를 입력하기
서로 다른 3자리 수를 입력할 수 있다.
동일한 숫자는 사용될 수 없다. 즉 숫자는 중복되지 않아야 한다.
숫자만 입력 가능하며, 문자는 작성할 수 없다.
3. 결과값 출력 및 게임 로직 적용하기
정답과 입력값을 비교해 힌트를 "볼,스트라이크,아웃" 으로 표시한다.
스트라이크 : 입력값과 정답을 비교해 같은 자리에 같은 숫자가 있는 경우
볼 : 숫자는 같지만, 자리는 다른 경우
아웃 : 숫자도 자리도 다른 경우
3스트라이크의 경우 정답에 해당하고, 게임이 종료됨
정답일 때, 표시하고 싶은 메세지를 지정할 것.
올바르지 않은 입력값에 대해서는 오류 문구를 출력
입력값이 문자, 중복되는 값처럼 요구사항과 맞지 않을 경우
EX) 숫자를 입력하세요 (정답이 456인경우) -> 435 -> 1스트라이크 1볼
-> 357 -> 1스트라이크
-> 123 -> 아웃
4.정답을 맞출 때까지 계속해서 시도할 수 있어야 하며, 정답을 맞추면 축하 메세지를 출력한다.
LEV2.
1.입력값이 유효한지 검사하기.
3자리 수인지 자릿수를 검사하기
중복된 숫자가 없는지 중복 숫자를 검사합니다.
입력값에 숫자만 포함되어 있는지 검사합니다.
유효하지 않는 값이 경우 "올바르지 않은 입력값입니다." 를 출력합니다,
2.출력 개선
프로그램을 시작할 때 안내문구를 보여주세요
"환영합니다!! 원하시는 번호를 입력해주세요."
1. 게임 시작하기 2. 게임 기록 보기 3. 종료하기
<게임을 시작합니다>
숫자를 입력하세요
이러한 규칙을 실행시킬 코드를 한 클래스 내에 작성하였다.
먼저 프로그램 안내 문구 규칙을 출력해줄 필요가 있었다.
while (running) {
// 프로그램 안내 문구 출력
System.out.println("환영합니다!!. 원하시는 번호를 입력해주세요");
System.out.println("1. 게임 시작하기");
System.out.println("2. 게임 기록보기");
System.out.println("3. 종료하기");
System.out.println("선택 : ");
String choice = sc.nextLine();
switch문을 통해서 1번 2번 3번 과 dafault 값을 세팅해서 게임을 실행하는 느낌을 주고 싶었다.
switch (choice) {
case "1":
System.out.println("<게임을 시작합니다>");
String record = startGame(sc);
records.add(record);
break;
case "2":
System.out.println("<게임 기록>");
if (records.isEmpty()) {
System.out.println("기록 없음");
} else {
for (String rec : records) {
System.out.println(rec);
}
}
break;
case "3":
System.out.println("<프로그램을 종료합니다>");
running = false;
break;
default:
System.out.println("잘못된 선택입니다. 다시 선택해주세요.");
시도 횟수를 기록하기 위해 attempts를 사용하였다.
# 시도 횟수 기록
int attempts = 0;
# 시도 횟수 증가
attempts++;
while문을 통해 반복 시행할 수 있도록 구성해야 했다.
while (true) {
System.out.println("서로 다른 3개의 숫자를 입력하세요 (1-9): ");
String input = sc.nextLine();
숫자를 입력함에 있어서 조건에 따른 숫자 입력이 필요해 보였고, 타당한지에 관한 문구 출력이 필요해 보였다.
#입력값 유효성 검사
if (!isValid(input)) {
System.out.println("잘못된 입력입니다. 1-9 사이의 서로 다른 세 자리 숫자를 입력하세요.");
continue;
}
# 입력값을 리스트로 변환
List<Integer> userInput = new ArrayList<>();
for (char c : input.toCharArray()) {
userInput.add(Character.getNumericValue(c));
}
3자리 숫자의 정답과 3자리 숫자 간의 결과를 비교할 필요가 있다.
정답 결과를 도출하기 위해 strike와 ball 에 관해 기본값을 넣어주었고, 조건문을 사용하였다.
#3. 결과 비교
int strike = 0;
int ball = 0;
# 스트라이크와 볼을 계산
for (int i = 0; i < 3; i++) {
if (userInput.get(i).equals(answer.get(i))) {
strike++;
} else if (answer.contains(userInput.get(i))) {
ball++;
}
}
결과를 비교 출력해야 했다.
#결과 출력
if (strike == 3) {
System.out.println("3스트라이크! 정답입니다!");
return "정답을 맞추셨습니다! 시도 횟수: " + attempts + "번"; // 게임 기록 반환
} else if (strike > 0 || ball > 0) {
System.out.println(strike + " 스트라이크, " + ball + " 볼");
} else {
System.out.println("아웃");
}
오늘 짠 코드는 여기까지이다.
추석이 지나고나서 할려고 하니 ,, 코딩이 너무 낯설게 느껴진 하루였다.