- 터미널에서
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중 하나의 알파벳 또는 유추한 단어를 입력할 수 있다.
- 알파벳을 입력하는 경우
- 알파벳은 소문자만 입력할 수 있다.
- 이미 입력했던 알파벳은 입력할 수 없다.
- 단어를 입력하는 경우
- 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] 대문자는 입력할 수 없습니다.
- 프로그램을 실행하는 시작점은
Application
의main()
이다. - 자바 코드 컨벤션을 지키면서 프로그래밍 하는 것을 추천한다.
- 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
에 정리한 기능 목록 단위로 추가한다.- 커밋 메시지 컨벤션 가이드를 참고해 커밋 메시지를 작성한다.