---
# System prepended metadata

title: 개인별 브랜치 링크

---

# 개인별 브랜치 링크
썸머: https://github.com/code-squad/swift-chess-app/tree/summer
스티븐: https://github.com/sunghyun-k/swift-chess-app
민이: https://github.com/mini0212/swift-chess-app/tree/feature/week1-chess-game
Pilvi: https://github.com/Jae-eun/swift-chess-app/tree/pilvi

# 개인별 설계 의도 & 구현 방식 소개
썸머:
보드에서 배치, 이동 관리
매치에서 보드 초기화 후 게임 실행
플레이어블에서 기물이 움직일 수 있는지 확인
Mock 플레이어를 생성하여 이동 로직 테스트
목 플레이어를 계속 생성해야 하는 문제가 있을 수 있음.

스티븐:
Position: Int의 구현. -> Int라는 타입이 호환성이 좋음(배열 index, 콘솔 입출력에서 손쉽게 사용가능.)
ChessStringRepresent: Position을 Int로 구현하여, 체스판이 꼭 8X8이 아닐수 있음을 예상. Int값으로 비교.
ChessPiece: protocol을 사용하여 말의 움직임을 각 구체타입이 관리하는 것을 생각. 몇 기물은 서로를 알아야하는 이슈가 있어 다형성이 필요없다 생각해 열거형 사용.
ChessBoard: 이동하는 경우 ChessPiece가 이동 가능한 포지션을 다 가져오는 함수가 있음. 거기서 각 enum을 비교하여 이동가능한 상황인지 확인.
    standardChessBoard: 체스보드가 8x8이 아닐수 있어서 만듦.
ChessGame: 사용자 플레이만 관여.
ChessGameTests: 추후 분리 예정. 
    체스의 움직임 확인.
    체스보드 생성했을 때 함수가 제대로 작동하는지.
    보드상 움직임이 실패하는 경우
    점수가 제대로 표현 되는지.
    같은 사람이 연속으로 이동하는지?
    이동시킬 기물이 없을 경우 를 테스트

민이: 체스게임, 폰, 보드, 포지션 크게 4 파일로 만듦. 
폰은 색상값만 가지고 있음. 
보드에서는 보드를 보여주는 것을 함. 
File과 Rank 타입을 만들어서, case의 allCount로 보드를 생성하도록 함.
체스게임 안의 move() 함수는 보드에서 움직일 수 있는 것을 체크해서 동작함. 
같은 알파벳으로만 움직일 수 있는 기능에 대해서 아직 구현하지 못했음.


Pilvi:
ChessPieces: Pawn 이외에 체스말 종류가 있기에 ChessType를 선언. ChessPiecesColor의 toggle은 흑과백의 순서를 변경함. getMovablePositions함수를 통해 자신이 이동할 수 있는 위치 제공함.
ChessBoard: rank,file을 Int타입으로 선언해 확장성있는 보드크기. 초기화 시, 크기를 입력받음. 
BoardPosition: "A1" 입력을 [String: Int] -> ["A":1]로 바꿔줌
ChessGame: 현재 차례인 체스말의 컬러를 가지고 있음. 보드 초기화, 이동할 위치입력, 차례를 번갈아 게임을 진행함.

# 질의응답 항목과 의견들
썸머:
Playable 프로토콜의 역할: 팀 컬러에 따라 어느 방향으로 움직일 수 있는지 기능 제공
moveCallCount의 의미: 함수가 얼마나 호출되었는지 확인하기 위함

Protocol을 만든 의도
Pilvi: Protocol을 만들고 mock객체를 만들어왔다.