好的,我用SDL和C++制作了这个tic tac toe游戏。我正在尝试将人工智能应用到游戏中。我没有问题设置AI,但我有一个问题,使它在您可以轮流。我的问题是,当我移动的时候,我可以在AI移动之前想移动多少次就移动多少次。我想要它,这样我就可以开始我的移动了,而且我不能再移动我的移动,直到AI移动。无论我怎么做,似乎轮换都不能正常工作。
这是类头
class Buttons
{
private:
SDL_Rect squares[8];
public:
Buttons();
void handle_input();
void load_Squares(SDL_Rect sqRects, SDL_Texture* squarTexs);
void show_Squares();
void AI_move();
int grid[9];
bool moveMade = true;
};在这里,我检查鼠标输入,根据按下左键期间的位置,它将相应的网格值设置为等于1,这意味着它在屏幕上显示为一个圆圈。我还确保AI在允许我点击之前已经采取了行动。
void Buttons::handle_input()
{
double mouseX = 0, mouseY = 0;
if((event.type == SDL_MOUSEBUTTONDOWN))
{
//If left mouse button was clicked and AI has made a move
if(event.button.button == SDL_BUTTON_LEFT && moveMade == true)
{
//Get mouse location
mouseX = event.button.x;
mouseY = event.button.y;
//If mouse location is in particular square, set according grid value to 1
if((mouseX >= 0) && (mouseX < SCREEN_WIDTH / 3) && (mouseY >= 0) && (mouseY < SCREEN_HEIGHT / 3) && (grid[0] == 0))
{
grid[0] = 1;
moveMade = false;
}
//Basically does this for all other 9 grids下面是我的AI函数,我在其中检查以确保moveMade变量= false。
void Buttons::AI_move()
{
if(moveMade == false)
{
AI_block(&moveMade);
AI_complete(&moveMade);
AI_rand(&moveMade);
moveMade = true;
}
}最后是我的show函数,如果网格数组的值= 1,我会显示一个Circle(播放器),如果网格的值= 2,我会显示X(AI)。
void Buttons::show_Squares()
{
switch(grid[0])
{
case 1:
load_Squares(squares[0], circleTexture); break;
case 2:
load_Squares(squares[0], xTexture); break;
}
switch(grid[1])
{
//Does this all the way to grid[8]
}好的,所以我的问题与AI处理没有关系,因为我甚至还没有设置我的防御和进攻功能。我的问题是,我可以在AI移动之前再走一步。抱歉,如果这篇文章太长了,但如果我能得到任何关于这方面的反馈,那就太好了。
发布于 2014-01-29 09:29:58
您是否尝试过在不同的位置设置断点,例如if(event.button.button == SDL_BUTTON_LEFT && moveMade == true),然后跟随程序查看moveMade是否实际上被更改为false?
您还应该考虑将show_Squares()改为循环,因为有很多使用增量索引的重复代码。如下所示:
void Buttons::show_Squares()
{
size_t array_size = sizeof(squares) / sizeof(int); //gets the number of elements in the array
for(size_t i = 0; i < array_size; i++)
{
switch(grid[i])
{
case 1:
load_Squares(squares[i], circleTexture); break;
case 2:
load_Squares(squares[i], xTexture); break;
}
}
}https://stackoverflow.com/questions/21420256
复制相似问题