我在改变游戏中玩家之间的转弯方面遇到了问题。当我运行它时,它似乎以任何顺序出现。因此,显示轮到它的文字搞砸了。
#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;
}
答案 0 :(得分:1)
邪恶goto turn;
导致了这个问题。切换播放器的代码可能无法执行。
在您的C ++教科书中,查找关键字continue
和break
,因为它们适用于您的do-while
循环。
例如,您可以替换
goto turn;
与
continue;
一些建议:
switch
陈述(例如0 .. 8)。简化和正确缩进将显示切换播放器时函数底部出现问题的原因。
使用调试器可以轻松解决此问题。