C ++& SDL TicTacToe - 改变轮流

时间:2011-11-07 23:38:45

标签: c++ sdl tic-tac-toe

我在改变游戏中玩家之间的转弯方面遇到了问题。当我运行它时,它似乎以任何顺序出现。因此,显示轮到它的文字搞砸了。

            #include <iostream>
            #include "SDLSetup.h"
            using namespace std;

            int p = 1;

            void Player1()
            {
                Player = TTF_RenderText_Solid(font, "Player 1", textColor);
                apply_surface(0, 630, Player, screen);
                SDL_Flip(screen);
                p = 2;
            }

            void Player2()
            {
                Player = TTF_RenderText_Solid(font, "Player 2", textColor);
                apply_surface(0, 630, Player, screen);
                SDL_Flip(screen);
                p = 1;
            }

            int main(int argc, char* args[])
            {
                bool quit = false;

if(init() == false)
    return 1;

if(load_files() == false)
    return 1;

apply_surface(0, 0, board, screen);

if(SDL_Flip(screen) == -1)
            return 1;
turn:

do{
    if(SDL_PollEvent(&event))
    {
        if(event.type == SDL_QUIT)
            quit=true;
    }

        if(event.type == SDL_MOUSEBUTTONDOWN)
                {
                    if(event.button.button == SDL_BUTTON_LEFT)
                    {
                        //Top Left
                        if(event.button.x < 175 && event.button.y < 175)
                        {
                            if(p == 1)
                            {
                                apply_surface(45, 40, X, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                            else if(p == 2)
                            {
                                apply_surface(45, 40, O, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                        }
                        //Top Middle
                        else if(event.button.x > 175 && event.button.x < 375 && event.button.y < 175)
                        {
                            if(p == 1)
                            {
                                apply_surface(250, 40, X, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                            else if(p == 2)
                            {
                                apply_surface(250, 40, O, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                        }
                        //Top Right
                        else if(event.button.x > 375 && event.button.x < 600 && event.button.y < 175)
                        {
                            if(p == 1)
                            {
                                apply_surface(450, 40, X, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                            else if(p == 2)
                            {
                                apply_surface(450, 40, O, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                        }
                        //Middle Left
                        else if(event.button.x < 175 && event.button.y > 175 && event.button.y < 380)
                        {
                            if(p == 1)
                            {
                                apply_surface(45, 240, X, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                            else if(p == 2)
                            {
                                apply_surface(45, 235, O, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                        }
                        //Center
                        else if(event.button.x > 175 && event.button.x < 375 && event.button.y > 175 && event.button.y < 380)
                        {
                            if(p == 1)
                            {
                                apply_surface(250, 235, X, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                            else if(p == 2)
                            {
                                apply_surface(250, 235, O, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                        }
                        //Middle Right
                        else if(event.button.x > 375 && event.button.x < 600 && event.button.y >175 && event.button.y < 380)
                        {
                            if(p == 1)
                            {
                                apply_surface(450, 235, X, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                            else if(p == 2)
                            {
                                apply_surface(450, 235, O, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                        }
                        //Bottom Left
                        else if(event.button.x < 175 && event.button.y > 380 && event.button.y < 600)
                        {
                            if(p == 1)
                            {
                                apply_surface(45, 450, X, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                            else if(p == 2)
                            {
                                apply_surface(45, 450, O, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                        }
                        //Bottom Middle
                        else if(event.button.x > 175 && event.button.x < 375 && event.button.y > 380 && event.button.y < 600)
                        {
                            if(p == 1)
                            {
                                apply_surface(250, 450, X, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                            else if(p == 2)
                            {
                                apply_surface(250, 450, O, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                        }
                        //Bottom Right
                        else if(event.button.x > 375 && event.button.x < 600 && event.button.y > 380 && event.button.y < 600)
                        {
                            if(p == 1)
                            {
                                apply_surface(450, 450, X, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                            else if(p == 2)
                            {
                                apply_surface(450, 450, O, screen);
                                SDL_Flip(screen);
                                goto turn;
                            }
                        }

                    }
                }

        if(p == 1)
            Player1();
        else
            Player2();

} while(quit == false);




clean_up();

return 0;
            }

1 个答案:

答案 0 :(得分:1)

邪恶goto turn;导致了这个问题。切换播放器的代码可能无法执行。 在您的C ++教科书中,查找关键字continuebreak,因为它们适用于您的do-while循环。

例如,您可以替换

goto turn;

continue;

一些建议:

  1. 首先确定棋盘方块,没有其他代码。
  2. 每个董事会职位可能都有switch陈述(例如0 .. 8)。
  3. 简化和正确缩进将显示切换播放器时函数底部出现问题的原因。

    使用调试器可以轻松解决此问题。