Добавить в корзинуПозвонить
Найти в Дзене
Блог Хонеста

Я сделал шахматный движок. Часть 1.

от безумных ходов до Stockfish и AlphaZero.

Всем привет! Сегодня я нашел эту статью в Tproger и решил написать такую же программу как там, но на языке программирования Python. В этой статье я расскажу как я сделал шахматный движок своими руками.

Для начала я начал искать аналог chess.js. Я его нашел и называется он python-chess. Я его изучил, потом начал писать каркас. Я назвал функцию вычисления лучшего хода как calculate_best_move, как в оригинальной статье в snake_case.

Код каркаса выглядит так:

import random
import chess
import math
from os import system
def calculate_best_move(game):
new_game_moves = list(game.legal_moves)
return random.choice(new_game_moves)
board = chess.Board()
game_end = False
not_legal = 0
while not board.is_game_over() or not game_end or not_legal < 2:
print(board)
move = input("Введите свой ход: ")
try:
board.push_san(move)
except:
not_legal += 1
system("clear")
print(f"{not_legal} невозможный ход.")
continue
try:
board.push(calculate_best_move(board))
except:
print("Вы выиграли!")
exit()
system("clear")
print("Вы проиграли.")

Этот код является самым простым игроком в шахматы. Этот код выбирает случайный ход и обеспечивает самый простой консольный интерфейс игры в шахматы. Вы вводите ход в нотации шахмат, и потом компьютер делает код. Каркас готов, осталось только усовершенствовать функцию calculate_best_move.

Оценку позиции я взял с оригинальной статьи:

Оценка позиции
Оценка позиции

Я читая эту статью и не увидел функцию evaluateBoard, там ее не было! Как так? Это потому что в статье был представлен не весь исходный код. Я нашел ее в исходниках на JSFiddle. Я начал переписывать код...

В итоге было одно улучшение — взятие фигуры, если это возможно.

Дальше в статье шла теория, теория, теория... И не какого кода. Я изучил теорию и начал дописывать функцию calculate_best_move...

А на этом статья подошла к концу. Если вы хотите продолжение, то поставьте палец вверх и скажите свое мнение об моей идеи. Если вы не подписаны, то пожалуйста подпишитесь. И подписывайтесь на мой Telegram канал. Всем пока!