/java-hang-man

3주차 미션

Primary LanguageJava

미션 - 행맨 (hang-man)


테스트 실행 가이드

  • 터미널에서 java -version을 실행하여 Java 버전이 17인지 확인한다. 또는 Eclipse 또는 IntelliJ IDEA와 같은 IDE에서 Java 17로 실행되는지 확인한다.
  • 터미널에서 Mac 또는 Linux 사용자의 경우 ./gradlew clean test 명령을 실행하고,
    Windows 사용자의 경우 gradlew.bat clean test 명령을 실행할 때 모든 테스트가 아래와 같이 통과하는지 확인한다.
BUILD SUCCESSFUL in 0s

🌈 기능 요구사항

제시된 단어를 유추하여 맞추는 게임이다.
행맨 그림이 완성되기 전에 단어를 맞추면 게임 승리

  • 단어는 목록에서 랜덤으로 한 개가 선택된다.
  • 사용자에게는 단어의 글자수만 제시된다.
  • 사용자는 a부터 z중 하나의 알파벳 또는 유추한 단어를 입력할 수 있다.
    1. 알파벳을 입력하는 경우
      • 알파벳은 소문자만 입력할 수 있다.
      • 이미 입력했던 알파벳은 입력할 수 없다.
    2. 단어를 입력하는 경우
      • 2개 이상의 알파벳을 입력하는 경우부터 단어로 인정한다.
      • 제시된 글자수보다 적거나 초과되게 입력할 수 없다.
      • 이미 입력했던 단어는 입력할 수 없다.
      • 공백을 입력할 수 없다.
  • 입력한 알파벳이 단어에 포함되어 있으면, 화면에 출력한다.
  • 입력한 알파벳이 포함되어 있지 않으면, 행맨이 하나씩 그려진다.
  • 유추한 단어가 맞으면, 게임이 끝난다.
  • 유추한 단어가 틀리면, 행맨 그림이 그려진다.
  • 그림이 모두 그려지면, 게임이 끝난다.
  • 게임이 끝나면 시도횟수와 게임 결과를 출력한다.
  • 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException를 발생시키고, "[ERROR]"로 시작하는 에러 메시지를 출력 후 그 부분부터 입력을 다시 받는다.

📂 입출력 요구사항

파일 입출력

  • 게임에서 제시할 단어들을 파일 입출력을 통해 불러온다.
  • src/main/resources/words.md 파일을 이용한다.
  • 파일의 내용은 수정이 가능하다. 수정 시 중복되는 단어는 입력할 수 없다.
  • 파일 입출력 방법은 자바 파일 읽기나 자바 파일 입출력과 같은 키워드로 구글링해서 찾을 수 있다.

게임 시작 문구

행맨 게임을 시작합니다.
제시된 단어는 4글자 입니다.

단어 : _ _ _ _

🖥 입력

유추한 알파벳 또는 단어를 입력해 주세요.
a

행맨 출력

  • 시도가 틀릴 때마다 한 줄씩 출력되어야 합니다.
    그림 예시)
  ------ 
 /      \
   X  X
     3
 \      /
  ------
ㄴ|     |ㄱ

차수별 결과 출력

정답 예시)


정답입니다. 

단어 : _ a _ _

오답 예시)


오답입니다.
  ------ 
  
단어 : _ _ _ _

게임 결과 문구 출력

게임에서 이길 경우)

축하합니다! 4번의 시도 끝에 단어를 맞췄습니다.

게임에서 질 경우)

행맨이 완성되었습니다. 게임 실패!

차수별 실행 결과

유추할 알파벳 또는 단어를 입력해 주세요.
b

오답입니다.
  ------ 

단어 : _ _ _ _
유추할 알파벳 또는 단어를 입력해주세요.
c

정답입니다.
  ------ 

단어 : c _ _ _
유추할 알파벳 또는 단어를 입력해주세요.
e

정답입니다.
  ------ 

단어 : c _ _ e
유추할 알파벳 또는 단어를 입력해주세요.
r

오답입니다.
  ------ 
 /      \

단어 : c _ _ e
유추할 알파벳 또는 단어를 입력해주세요.
a

정답입니다.
  ------ 
 /      \
 
단어 : c a _ e
유추할 알파벳 또는 단어를 입력해주세요.
k

정답입니다.
  ------ 
 /      \
 
단어 : c a k e

축하합니다! 6번의 시도 끝에 단어를 맞췄습니다.

에러 처리

  • 예외 상황 시 에러 문구를 출력해야 한다. 단, 에러 문구는 [ERROR] 로 시작해야 한다. (예외 메시지는 예외 상황에 맞도록 자유롭게 정한다.)
[ERROR] 대문자는 입력할 수 없습니다.

🎱 프로그래밍 요구사항

  • 프로그램을 실행하는 시작점은 Applicationmain()이다.
  • 자바 코드 컨벤션을 지키면서 프로그래밍 하는 것을 추천한다.
  • indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 노력한다. (2까지만 허용)
    • 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2 이다.
    • 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다.
  • 3항 연산자를 쓰지 않는다.
  • 프로그래밍 요구사항에서 별도로 변경 불가 안내가 없는 경우 파일 수정과 패키지 이동을 자유롭게 할 수 있다.
  • 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 노력한다.
    • 함수(또는 메소드)가 한 가지 일만 하도록 최대한 작게 만들도록 노력한다.
  • else 예약어를 쓰지 않으려 노력한다.
    • 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다.
    • else 대신에 switch/case를 사용하지 않도록 노력한다.

▶ 과제 진행 요구 사항

  • 미션은 java-hang-man 저장소를 Fork & Clone해 시작한다.
  • 기능을 구현하기 전 docs/README.md에 구현할 기능 목록을 정리해 추가한다.
  • Git의 커밋 단위는 앞 단계에서 docs/README.md에 정리한 기능 목록 단위로 추가한다.