체스 미션 저장소
-
공통 목표
- 객체간의 결합도가 낮은 코드 짜기
- TDD 스럽게 구현하기
- 에러를 받아도 사용자가 기분이 상하지 않게 구현하기
-
야호 목표
- 객체의 클래스를 Final 이나 Abstract 으로!
- 접근제어자를 적절하게 사용하기
-
아스피 목표
- 리뷰어한테 칭찬 받아보기
- 행동에 초점을 맞춰서 객체 구현
-
체스판 초기화
- 가로 위치 : 왼쪽부터 a~h
- 세로 위치 : 아래부터 1~8
- 흰색 : ♚♛♝♞♟♜
- 검은색 : ♔♕♗♘♙♖
-
게임 시작/종료 입력
- 시작 : start 로만 입력
- 초기화 된 체스판 보여주기
- 종료 : end 로만 입력
- 지정된 명령어 외의 입력에 대한 예외처리
- 시작 : start 로만 입력
-
1단계에서 변경된 부분
- 시작/종료 외에도 이동을 입력받는다.
- 움직이고자 하는 말의 위치 (source)
- 현재 순서의 팀의 말이 해당 위치에 있어야 한다.
- 목표하는 위치 (target)
- 같은 팀의 말이 있으면 안된다.
- 현재 위치의 말이 움직일 수 있는 위치여야 한다.
- 체스판 범위 내의 위치여야 한다.
- 문자열 길이가 2여야 한다.
- input 에서 대문자가 입력되면 lower case 로 변경해준다.
- 움직이고자 하는 말의 위치 (source)
- 시작/종료 외에도 이동을 입력받는다.
-
말들을 이동하는 기능
- king : 전후좌우 대각선 1칸씩
- queen : 전후좌우 대각선으로 칸 수 제한 없이
- knight : 전후좌우 두칸 전진한 상태에서 양옆으로 한칸씩 이동 가능
- bishop : 대각선으로 칸 수 제한 없이
- rook : 전후좌우로 칸 수 제한 없이
- pawn : 초기 상태에서는 한칸 혹은 두칸 전진 가능, 그 이후로는 한칸씩만 전진 가능, 잡는건 대각선으로만
- 2단계에서 변경된 부분
- 흰 말, 검은 말 순으로 번갈아가면서 진행된다.
- 에러 메세지를 사용자 친화적으로 작성한다. ^^
- 종료 조건
- end : 즉시 프로그램 종료
- king이 잡히면 status 나 end 만 입력 가능
- game 은 종료
- status
- 남아있는 말에 대한 점수를 계산
- king = 0점
- queen = 9점
- rook = 5점
- bishop = 3점
- knight = 2.5점
- pawn = 기본 1점 / 같은 세로줄에 같은 색의 폰이 있는 경우 0.5점
- 입력받은 문자열에 해당하는 값 반환
- 체스판 내의 칸(square)에 대한 연산 지원
- 필드 : file, rank
- 체스판 내의 칸에 대한 연산
- 수학에서 사용되는 벡터 연산
- 체스판 내의 칸끼리의 거리와 방향을 가짐
- 단위 벡터를 구하고 활용하는 기능을 가짐
- file과 rank를 받아서 해당 위치가 시작 위치인 Piece를 판단
- PieceCondition 으로 판단한 피스에 색을 결정하여 반환
- 필드 : Color, Score
- 목표 위치에 갈 수 있는지 판단 (position)
- 각 피스마다 갈 수 있는 단위 벡터들을 상수로 가짐
- 팀의 점수를 매길떄 자신의 점수를 더해줌
- Square와 Piece를 짝으로 가지고 있는 일급 컬렉션
- 각 Square에 있는 Piece의 이동 관리
- 목표 위치에 갈 수 있는지 판단 (direction)
- 필드 : Board, 턴을 결정하는 Color
- 사용자 순서 관리
- King이 잡혔는지 확인
- 순간의 체스판을 저장
- 저장된 체스판을 가지고 요구받은 팀에 대한 score 계산