프로젝트/체스 엔진

[체스 엔진] 체스 엔진 개발 일지 - 2 큰 구성도

playalone 2026. 2. 23. 19:52

오늘 한일. 

- piece.cpp 클래스 구성: piece의 기본 뼈대 구성 완료. 공유되는 함수 작성 완료

- position.cpp 클래스 구성: 위치를 나타내는 클래스. 간단하게 구성 완료

 

오늘의 커밋

https://github.com/ggace/chess-engine/commits/master/?since=2026-02-23&until=2026-02-23

 

GitHub - ggace/chess-engine

Contribute to ggace/chess-engine development by creating an account on GitHub.

github.com

 

아직도 코드 구성을 마치지 못했다. 적당히 어떤식으로 동작할지는 정하였지만, 생각이 너무 복잡하여 하나하나 차근차근 천천히 구현하려고 노력중이다.

 

1. 개발 우선순위

이제부터는 각 기물 클래스, board 클래스, game클래스 각 클래스간의 상호작용이 필요하기 때문에 잘못하면 코드가 꼬일 가능성이 존재한다. 

 

따라서, 우선순위를 정해야 한다.

 

- 일단 각 기물 클래스는 board클래스의 기물 현황을 필요로 하는 getPossibleMovement, isPossibleMovement만 오버라이딩 하면 된다고 현재로써는 판단된단. 따라서, 각 기물 클래스는 board 클래스 이후 만들어야 한다.

- game 클래스는 사용자와 board를 이어주는 통로이기 때문에 board를 먼저 구성하여도 된다는 판단이다. 

- log는 game 클래스에서 사용할 예정이기 때문에 game 클래스를 만들기 직전 생성하여도 된다.

- resultData도 마찬가지로 game 클래스에서 사용 예정이므로 game 클래스 만들기 직전 생성하여도 된다.

- board 클래스를 만들고, game 클래스와 각 기물 클래스중 우선순위를 매겨보면, board와 기물은 서로 상호작용이 필요하므로 거의 동시에 개발이 되어야할 수도 있다.

 

따라서, 우선순위는 

1. board 클래스

2. 각 기물 클래스

3. log 클래스, resultData 클래스

4. game 클래스

 

game 클래스를 마지막에 만드는 또 다른 이유는, 아마, game 클래스를 python에서 사용할 수 있도록 하여, 선임분께서 ai 학습하시도록 할 생각이기 때문에 조율이 계속 필요할 것이라는 생각에서 다음과 같이 우선순위를 매긴다.

 

2. 클래스의 역할

다음은 간단하게 구성한 각 클래스의 역할이다. 

textfile 폴더에 config.txt에 같은 내용이 있긴 하지만, 블로그만을 읽으면서도 파악할 수 있도록 같은 내용을 남겨놓겠다.

game.cpp : 사용자와 상호작용
board.cpp: 체스 기물 및 체스판 상태 저장, 제어
piece.cpp: 기물 그 자체. 기물 위치, 가능한 이동 좌표 등
position.cpp: 기물들의 위치를 저장하기 위함. array로 했을때의 문제의 가능성으로 일단 class로 만들어둠.
log.cpp || move.cpp: 기물의 움직임을 저장. 아마 game.cpp에 vector나 linkedlist로 저장될 거임. 
resultData.cpp: 결과 출력 통일화를 위한 클래스. game.cpp에서 사용자와의 소통과정에서 쓸듯.

 

아직, game클래스와 board 클래스의 경계를 확실히 정할 수는 없으나, game 클래스에 거의 모든 것을 위임하고, board클래스는 중간 중계자 같은느낌으로 하며, 상태 저장 등만 맡도록 할까 싶다.