0

在我的游戏中,我在改变玩家之间的回合时遇到了问题。当我运行它时,它似乎按任何顺序运行。正因为如此,显示轮到谁的文本被搞砸了。

            #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;
            }
4

1 回答 1

1

邪恶goto turn;是造成问题的原因。切换播放器的代码可能不会被执行。在您的 C++ 教科书中,查找关键字continueand break,因为它们适用于您的do-while循环。

例如,您可以替换

goto turn;

continue;

一些建议:

  1. 先确定棋盘方格,无其他代码。
  2. 也许switch每个董事会位置的声明(例如0 .. 8)。

简化和适当的缩进会告诉你为什么在切换播放器时函数底部会出现问题。

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

于 2011-11-08T01:15:39.083 回答