체스 봇 개발 일지 11일차
2023 11 12
지난번에는 ai의 승률을 높이기 위한 오프닝을 종류를 조사했다. 두 종류를 조사했는데 첫번째는 이탈리안 게임이라는 오프닝이고, 두번째는 루이 로페즈라는 오프닝이다. 이 중 전통성이 있는 루이 로페즈를 구현할 것이다.
1. 루이 로페즈란?
루이 로페즈란 저번 차시 때 설명했듯 가장 오래되고 가장 인기가 많은 오프닝중 하나이다. 루이 로페즈의 장점은 3수만에 비숍을 위협적인 위치로 보내 흑의 나이트를 공격 할 수 있다는게 첫번째 장점이다. 두번째 장점은 킹과 룩 사이를 비워 빠른 킹사이드 캐슬링이 가능하다는것이다. 세번째 장점은 흑에게 장기적 압박이 가해지는 포지션이 자주 만들어진다는 것이다.
2. 오프닝 구현
void pma(Piece _pBoard[][10]) {
for (int x = 1; x <= 8; x++) {
for (int y = 8; y >= 1; y--) {
if (_pBoard[y][x].type == 1 && _pBoard[y][x].team == 1) {
if (Pa_ch(1, x, y, 4, 4, _pBoard)) {
if (srch(4, 4, _pBoard) == 0) {
_move(x, y, 4, 4, _pBoard);
return;
}
}
}
}
}
for (int x = 1; x <= 8; x++) {
for (int y = 1; y <= 8; y++) {
if (_pBoard[y][x].type == 3 && _pBoard[y][x].team == 1) {
if (Kn_ch(1, x, y, 3, 3, _pBoard)) {
if (srch(3, 3, _pBoard) == 0) {
_move(x, y, 3, 3, _pBoard);
return;
}
}
}
}
}
for (int x = 1; x <= 8; x++) {
for (int y = 1; y <= 8; y++) {
if (_pBoard[y][x].type == 4 && _pBoard[y][x].team == 1) {
if (Bi_ch(1, x, y, 5, 7, _pBoard)) {
if (srch(5, 7, _pBoard) == 0) {
_move(x, y, 5, 7, _pBoard);
return;
}
}
}
}
}
}
코드는 간단하다. 루이 로페즈의 오프닝대로 움직이되 움직였을때 상대 기물한테 잡히는 경우를 고려해서 만약 잡힌다면 움직이지 않는다.
3. 마치며
이렇게 승률을 높이기 위한 전략인 오프닝까지 구현을 했다. 오프닝까지 구현한 현재 승률은 30% 에서 40%로는 되는것 같다. 현재 코드에서 만약 잡을 수 있는 상대 기물이 없다면 폰을 전진시키는 코드인데 이 코드의 문제점은 폰이 다 잡혔거나 다 움직일 수 없는 경우 아무 행동도 하지 않고 턴이 넘어간다는 것이다. 다음번에는 이 문제점을 고칠 것이다.