首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++/SDL,Tic Tac Toe turn Toe

C++/SDL,Tic Tac Toe turn Toe
EN

Stack Overflow用户
提问于 2014-01-29 09:18:41
回答 1查看 586关注 0票数 0

好的,我用SDL和C++制作了这个tic tac toe游戏。我正在尝试将人工智能应用到游戏中。我没有问题设置AI,但我有一个问题,使它在您可以轮流。我的问题是,当我移动的时候,我可以在AI移动之前想移动多少次就移动多少次。我想要它,这样我就可以开始我的移动了,而且我不能再移动我的移动,直到AI移动。无论我怎么做,似乎轮换都不能正常工作。

这是类头

代码语言:javascript
复制
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在允许我点击之前已经采取了行动。

代码语言:javascript
复制
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。

代码语言:javascript
复制
void Buttons::AI_move()
{

    if(moveMade == false)
    {
        AI_block(&moveMade);
        AI_complete(&moveMade);
        AI_rand(&moveMade);
        moveMade = true;
    }

}

最后是我的show函数,如果网格数组的值= 1,我会显示一个Circle(播放器),如果网格的值= 2,我会显示X(AI)。

代码语言:javascript
复制
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移动之前再走一步。抱歉,如果这篇文章太长了,但如果我能得到任何关于这方面的反馈,那就太好了。

EN

回答 1

Stack Overflow用户

发布于 2014-01-29 09:29:58

您是否尝试过在不同的位置设置断点,例如if(event.button.button == SDL_BUTTON_LEFT && moveMade == true),然后跟随程序查看moveMade是否实际上被更改为false?

您还应该考虑将show_Squares()改为循环,因为有很多使用增量索引的重复代码。如下所示:

代码语言:javascript
复制
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;
        }
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21420256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档