콘솔로 체스 게임을 진행할 수 있는 미션을 진행한다. 체스판에서 각 진영은 대문자 소문자로 구분한다.
- 체스 게임을 시작한다
- 체스판 상황을 보여준다
- 체스말을 옮긴다
- 왕(king)을 잡으면 게임이 끝난다
- 현재 남아있는 말의 점수를 보여준다
- 체스판에서 말의 위치는 가로는 a ~ h, 세로는 1 ~ 8로 구현한다
- 각 말은 알파벳 한글자로 표현한다. P는 pawn, R은 rook, N은 knight, B는 bishop, Q는 queen, K는 king을 의미한다
- 체스말 움직임은 (시작 위치, 옮기는 위치)로 이동한다
- "status" 명령을 입력하면 각 진영의 점수를 출력하고 어느 진영이 이겼는지 결과 확인해야 한다
- queen은 9점, rook은 5점, bishop은 3점, knight는 2.5점이고 pawn은 1점인데 같은 세로줄에 같은 색의 pawn이 있으면 0.5점이다
- king은 잡히면 경기가 끝나기 때문에 점수 계산 하지 않는다
- 체스판
- 체스판 초기화 하기 (기물 배치하기)
- 검은 색, 흰 색 진영 구분하여 소문자 대문자로 진영 나누기
- 체스판 현재 상황 보여주기
- 빈칸 처리하기
- 체스
- move source_위치 target_위치로 움직이기
- Pawn, Rook, Knight, Bishop, Queen, King 기물의 행마법에 따라 움직이기
- 나의 기물이 상대 기물에 갈 수 있으면 상대 기물을 잡아내기
- king을 잡아내면 게임 끝내기
- "status" 명령을 입력하면 현재 체스 기물 점수 합으로 승리 결정
- 예외처리 함수인데 검증이 실패하면 에러메세지를 보내고 게임이 종료(게임이 종료되지 않기를 원할 때) => 같은 함수를 리턴하면서 재귀로 처리함(inputCommandWithValidation)
- static을 쓰는 클래스와 안쓰는 클래스 => static 써도 될 거 같은데 굳이 안쓴 클래스 (Calculator) => 의존성을 위해 클래스 내부에서 생성해준 것 같다
- final을 정확히 언제 써야하는지 의문 / 매개변수로 final이 붙을 때 무슨 뜻인가 => 매서드 안에서 변수 변경 불가 => 다른 클래스에서 변수 변경하면 반영되는가?
- 모든 예외처리를 재귀로 처리할 순 없을까? => try catch 사용해서 해당 에러를 만나면 됨 => 이외 다른 에러를 만나면 프로그램 종료됨