Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[숫자 야구 게임] 임주민 과제 제출 PR입니다. #10

Open
wants to merge 12 commits into
base: main
Choose a base branch
from

Conversation

jumining
Copy link

@jumining jumining commented Jun 30, 2023

⚾️ 숫자 야구 게임 과제 제출

🗒 구현한 기능 목록

1️⃣ 랜덤 숫자 생성

  • 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 생성
  • createRandomNumber()

2️⃣ 숫자 입력

  • 사용자로부터 숫자를 입력받는다.
  • 올바른 값을 입력받았는지 유효성을 체크한다.
  • inputUserNumber()

3️⃣ 정확도 체크

  • 두 수를 비교하여 스트라이크의 수와 볼의 수를 계산한다.
  • checkAccuracy()

4️⃣ 정확도 출력

  • 계산된 스트라이크의 수와 볼의 수를 조건대로 출력한다.
  • printAccuracy()

5️⃣ 게임 진행

  • 랜덤으로 생성된 컴퓨터의 숫자와, 입력받는 사용자의 숫자가 맞을 때까지 위의 2-4 과정을 반복한다.
  • playNumberBaseBallGame()

6️⃣ 게임 종료 여부

  • 맞춘 경우, 종료 여부를 사용자에게 물어본다.
  • 입력 받은 수가 1과 2가 맞는지 유효성을 체크한다.
  • 사용자로부터 1 입력받을 시 -> 재시작
  • 사용자로부터 2 입력받을 시 -> 종료
  • isEndGame()

7️⃣ 게임 시작

  • 게임 종료까지 게임 진행을 반복한다.
  • Application의 main에서 호출한다.
  • startNumberBaseBallGame()



🗂 폴더링

📦 baseball/
|
+ 🗂 Application/
|
+ 🗂 Constants/
│        
+-------🗂 Number 
|          : 게임에 사용되는 숫자 상수들을 모아놓은 클래스
|
+-------🗂 Symbol 
|          : 게임에 사용되는 문자 상수들을 모아놓은 클래스
|
+-------🗂 GameMessage 
|          : 게임에 사용되는 안내 메세지들을 모아놓은 클래스
|
+-------🗂 ExceptionNumber 
|          : 예외에 사용되는 메세지들을 모아놓은 클래스
           

@jumining jumining self-assigned this Jun 30, 2023
@sunwootest
Copy link
Collaborator

요구사항을 충족하지 못합니다. 테스트 코드를 실행시킨 후 통과되도록 코드를 수정해주세요.

Copy link
Collaborator

@sunwootest sunwootest left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확실히 협업경험이 있어서 그런지 신경써서 코드 작성한 티가 납니다!

요구사항 2가지 정도를 처리 안한 것 같은데 테스트 결과를 바탕으로 어디에서 문제가 발생했는지 파악해보세요! 차근차근 리팩토링 해봅시다.

Comment on lines +3 to +30
public final class Constants {
public final class Number {
public static final int LENGTH = 3;
public static final int MIN_VALUE = 1;
public static final int MAX_VALUE = 9;
}

public final class Symbol {
public static final String END_GAME = "2";
public static final String RESTART_GAME = "1";
}

public final class GameMessage {
public static final String INPUT_NUMBER = "숫자를 입력해주세요 : ";
public static final String END_GAME = "개의 숫자를 모두 맞히셨습니다! 게임 종료";
public static final String RE_GAME = "게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.";
public static final String STRIKES = "스트라이크";
public static final String BALLS = "볼 ";
public static final String NOTHING_ = "낫싱";
}

public final class ExceptionMessage {
public static final String USER_INPUT = "1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 입력해주세요.";
public static final String STATE_OF_GAME = "1 또는 2를 입력해주세요.";
}

public static final String REGEX_PATTERN = "^[1-9](?!.*([1-9]).*\1)[1-9](?!.*\2)[1-9]$";
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

내부 클래스는 가능하면 static으로 선언하도록합시다. 왜 그런지 한 번 알아보세요 :)

디렉토리를 하나 생성해서 그 안에 클래스들을 포함시키는 것도 대안일 것 같습니다.

Comment on lines +12 to +13
private Vector<Integer> userNumber;
private Vector<Integer> computerNumber;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C++과 다르게 Java에서 Vector는 사실상 deprecated입니다. 대안을 찾아봅시다.


private void createRandomNumber() {
computerNumber = new Vector<>();
while(computerNumber.size() < Constants.Number.LENGTH) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

조건들을 메소드로 분리시켜봅시다.

computerNumber.size() < Constants.Number.LENGTH

while문이 실행될 조건이 한눈에 보이게 리팩토링 해주세요.

Comment on lines +37 to +42
private void validTestInputUserNumber(String input) {
boolean isValid = Pattern.matches(Constants.REGEX_PATTERN, input);
if(!isValid) {
throw new IllegalArgumentException(Constants.ExceptionMessage.USER_INPUT);
}
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

isValid는 변수로 선언하기 보다 메소드로 분리시키는 것이 더 나아보입니다. 그러면 메소드명은 더 구체적으로 작성해야겠죠?

Comment on lines +104 to +108
private void validTestStateOfGame(String state) {
if(!state.equals(Constants.Symbol.END_GAME) && !state.equals(Constants.Symbol.RESTART_GAME)) {
throw new IllegalArgumentException(Constants.ExceptionMessage.STATE_OF_GAME);
}
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

조건문도 가독성을 향상시키는 방향으로 리팩토링 할 수 있겠네요. 드모르간 법칙을 이용해봅시다!

static import를 적용해봅시다. 해당하는 코드에 커서를 올린 후 Option + L을 눌러보세요 :)

Comment on lines +4 to +8
public final class Number {
public static final int LENGTH = 3;
public static final int MIN_VALUE = 1;
public static final int MAX_VALUE = 9;
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 값들을 잘 활용할 수 있도록 리팩토링 해봅시다.

@jumining jumining removed their assignment Jul 9, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants