Вы заметите, что функция оценки возвращает +1000, если я проверил мат. , но, я ни разу не получал значения больше +1000, я имею в виду в том месте, где я перечисляю val (лучший ход), но я например нашел мат соперника т.е. значения ниже -1000.Должно быть, где-то у меня ошибка, но мы не можем ее обнаружить.
Управляя программой, чередуя ходы игрока и компьютера, я замечаю, что делаю ход дальше копию, а затем передать ее в функцию minimaxAlg, где запускается проигрыватель
Код: Выделить всё
void CGame::minimaxAlphaBeta(int depth, Color color, bool random)
{
while(!isFinished())
{
if(color == m_Player)
{
if(random)
makeRandomMove(m_Player);
}
else
{
int bestVal = INT_MIN;
CPosition bestFromPosition;
CPosition bestToPosition;
auto& playableMoves = (m_Computer == Color::WHITE) ? m_WhitePlayable : m_BlackPlayable;
for(auto &[from, to] : playableMoves)
{
CGame gameCopy = *this;
gameCopy.makeMove(from, to, m_Computer, true);
int val = gameCopy.minimaxAlphaBetaAlg(gameCopy, depth, INT_MIN, INT_MAX, false, gameCopy.m_Player);
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78530637/c-minimax-mini-chess[/url]
Мобильная версия