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 を調べてください。breakdo-while

たとえば、次のように置き換えることができます。

goto turn;

continue;

いくつかの提案:

  1. 最初にボードの正方形を決定し、他のコードはありません。
  2. たぶん、switch各ボードの位置 (例: 0 .. 8) のステートメントです。

簡略化して適切なインデントを使用すると、プレーヤーを切り替えるときに関数の下部に問題がある理由がわかります。

この問題は、デバッガーを使用して簡単に解決できます。

于 2011-11-08T01:15:39.083 に答える