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