對於我的Tic Tac腳趾AI,只需要產生一個隨機移動。我有一個類AIPlayer
與makeAMove
函數。它只是產生兩個從0到3(行和列)的隨機數,並檢查單元是否被佔用。它似乎工作正常,但由於某種原因,它永遠不會採取勝利的舉措。在命令行中,當我嘗試讓它獲勝並且只剩下勝利的動作時,它不會拿走它們 - 它只會卡住。另外,我認爲使用1-dimesional數組會更容易與AI,但我試圖堅持2-dimesional數組。爲什麼我的TicTacToe遊戲在產生隨機移動時卡住了
我認爲這會更好地收集另一個陣列中的可用單元格,並從這些單元格中產生隨機移動。
歡迎任何建議。
這裏是我的AI等級:
實現文件:
#include <stdlib.h> // rand, srand
#include <time.h> // time
#include "AIPlayer.h"
AIPlayer::AIPlayer(char token) : Player(token)
{
}
void AIPlayer::makeAMove(Board &myBoard)
{
int row;
int column;
bool done = false;
do
{
srand (time(0));
row = rand() % 3;
column = rand() % 3;
if (myBoard.getCell(row, column) == ' ')
{
myBoard.setCell(row, column, getToken());
done = true;
}
}
while (!done);
std::cout << "\nComputer move (" << getToken() << ")\n"
"row " << row << ", column " << column;
}
頭文件
#pragma once // include guard
#include "Player.h"
class AIPlayer: public Player
{
public:
AIPlayer(char token);
virtual void makeAMove(Board &myBoard);
};
「卡住」是什麼意思?它是否凍結(即停止接受輸入),退出還是拋出錯誤? – newfurniturey
你忘了用'''初始化主板嗎? –
沒有錯誤。它可能被凍結。或者只是陷入循環。 – navig8tr