
체스 봇 개발 일지 1일차
2023 08 28
오늘부터 ai 체스 봇을 개발하기로 결정했다. 왜 하필 "체스"ai 이냐면 평소에 학교에서 체스를 즐겨 하고 체스를 좋아하기 때문이다. 그럼 체스 봇 개발 일지 1일차를 시작해 보겠다.
1. 오픈 소스 다운받기
일단 처음부터 모든 체스의 기능을 구현하는 것은 무리라고 생각이 들어 기본적인 체스 기능이 구현되어 있는 오픈소스를 다운을 받았다. 오픈소스는 jayiuu1님의 오픈소스를 사용했다. 오픈소스 링크(출처) 오늘은 이 코드를 분석을 할 것이다.
코드 분석에 앞서 아직까지 부족한 코딩 실력 양해 부탁드립니다.
2. 분석
먼저 헤더파일들을 분석을 했다. Let_Play 헤더파일은 그냥 함수들을 순차적으로 실행을 해주는 역할을 한다. 두 번째 헤더파일인 Board는 각 기물들의 정보를 담고 있는 구조체인 Piece를 선언해 주며 시작한다. 이 구조체는 각 기물의 팀과 종류를 정수화해서 담고 있다. (예: 폰은 1번, 룩은 2번) 그리고 게임판 역할을 할 2차원 배열도 정의해주었다. 그 외 이동 및 출력과 같은 실제 기능을 구현했다. 이제 멤버 함수 분석을 해보겠다. 첫 번째로 Let_Play 함수는 현재 체스판을 출력을 하고 움직임을 입력받아 이동을 성공했다면 턴 수를 증가시키는 과정을 무한 반복을 하고 있다. 두 번째로 ChessBoard 라는 함수는 게임이 시작할 때 기물들을 위치시키는 역할을 한다. 처음 이 함수를 보고 굉장히 길어 분석하기 어려워 보였지만 생각보다 간단했다. 그다음으로 ChessDisplay 함수는 현재 상태의 체스판을 출력하는 역할을 한다. 현재 기물들의 팀과 종류를 매개변수로 받아 스위치 문을 사용해 각 기물의 종류에 따라 그와 알맞는 텍스트를 출력을 한다. (예: 빈 공간은 .. , 폰은 Pa) 그리고 SetConsoleTextAttribute라는 함수를 이용하여 택스트 색을 바꿔줘서 팀을 구별을 할 수 있게 해주었다. 또 턴 수를 계산해 현재 어느 팀의 차례인지 출력해 주는 기능과 게임 승리 문구를 출력해 주는 기능도 있다.
3. 시각 자료

4. 마치며
처음에는 체스 봇을 어떻게 만들지 너무 막막했는데 jayiuu1님의 오픈소스 덕분에 체스 봇 제작과 한 걸음 더 가까워 진 것 같다. 또 jayiuu1님이 주석 처리를 깔끔하게 해주시고 벨로그에 작동 설명도 구체적으로 해주셔서 분석하기도 편했다. 2일차에 분석을 이어하겠다.