AI 체스 봇 개발 일지(4일차)

이동민·2023년 9월 23일
0

체스 봇 개발 일지 4일차

2023 09 18

지난번에는 캐슬링이라는 특수 규칙을 만들었다. 이번에는 승진이라는 기능을 구현 할 것이다.

1. 승진이란

체스에서 승진이란 간단하다. 폰이 앞으로 전진하다가 8번째 행에 도달했거나 상대기물을 잡으면서 8번째 행에 도달한 경우 퀸/룩/비숍/나이트로 승진을 할 수 있다는 규칙이다. 단 폰으로 그대로 남는것은 불가능하다.

2. 구현

일단 승진 할때 멘트를 출력해주고, 무슨 기물로 승진을 할지 키보드 입력을 받는 promote 라는 함수를 만들었다.

int promote() { //계승 함수
	printf("1. 퀸 2. 비숍 3. 나이트 4. 룩");
	int c = _getch(); //키보드 키 입력
	if (c == 224)
		c = _getch();
	switch (c) {
	case ONE: //퀸
		return 1;
	case TWO: //비숍
		return 2;
	case THREE: //나이트
		return 3;
	case FOUR: //룩
		return 4;
	}
}

키보드의 입력을 스위치 문으로 나누어 리턴을 해주었다.

_move(ax, ay, bx, by, _pBoard);
if (by == 8) {
	int res = promote();
	if (res == 1) _pBoard[by][bx].type = 5;
	else if (res == 2) _pBoard[by][bx].type = 4;
	else if (res == 3) _pBoard[by][bx].type = 3;
	else if (res == 4) _pBoard[by][bx].type = 2;
}

위의 코드를 폰 함수에 만들어두어 만약 도착지가 8번째 행이고 이동을 성공했으면 promote 함수의 리턴값을 res라는 변수에 저장해주었다. 그리고 res의 값에 따라 폰을 다른 기물로 승진시키는 코드를 만들었다. 위의 코드는 하얀색 폰일때 코드이다.

_move(ax, ay, bx, by, _pBoard);
if (by == 1) {
	int res = promote();
	if (res == 1) _pBoard[by][bx].type = 5;
	else if (res == 2) _pBoard[by][bx].type = 4;
	else if (res == 3) _pBoard[by][bx].type = 3;
	else if (res == 4) _pBoard[by][bx].type = 2;
}

위 코드는 검은색 폰일때 코드이다.

3. 마치며

이번에는 두번째 추가 기능인 승진을 만들었다. 생각보다 룰 자체가 복잡하거나 조건이 많지 않아서 간단하게 만들었다. 다음에는 체크 기능을 만들것이다.

0개의 댓글