我在改变游戏中玩家之间的回合时遇到问题。当我运行它时,它似乎以任何顺序运行。因此,显示轮到谁的文本变得混乱。
#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;
}
最佳答案
邪恶的goto turn;
引起了问题。切换播放器的代码可能不会执行。
在C ++教科书中,查找关键字continue
和break
,因为它们适用于您的do-while
循环。
例如,您可以替换
goto turn;
与
continue;
一些建议:
首先确定板方,无需其他代码。
可能是每个板位的
switch
语句(例如0 .. 8)。简化和适当的缩进将向您显示在切换播放器时功能底部为什么存在问题。
使用调试器可以轻松解决此问题。
关于c++ - C++和SDL TicTacToe-更改匝数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8044225/