如何在OpenGL(GLUT)和C ++中进行游戏逻辑?

时间:2012-01-10 00:54:56

标签: opengl logic glut

我正在使用OpenGL(GLUT)和C ++编写游戏Battleship。

我知道如何处理图形内容(比如显示字段和预定义的船只), 但我应该把我的游戏代码放在哪里:

  • 如果按下左键,则选择一个字段并显示
  • 如果放置船只然后显示船

像放置船(在字段之间切换)之类的东西我不能在display()函数中做,但如果放置了一个船,它必须由display()函数绘制,对吗?

我不知道在哪里放置游戏逻辑。

2 个答案:

答案 0 :(得分:2)

您正在寻找的是基本的经典game loop。实际上,你的游戏在一个巨大的循环中运行。在此循环中,您可以处理用户输入,对用户输入做出反应,运行AI以及响应更新视频/音频。当然,这是一个非常简单的看法,但它足以用于战舰。

概念上,或多或少:

while(Game.IsRunning)
{
    Input = GetInput();
    Game.Update(Input);
    Display(Game);
}

如果你实际上是在做实时而不是事件驱动,那么你需要让你的更新考虑到自上次更新以来的时间以及玩家输入。我会保持这个简短,但仅限于你所要求的内容。

答案 1 :(得分:1)

GLUT提供拦截鼠标键盘事件的功能,例如

void keyboardDown(unsigned char key, int x, int y);
void mouseClick(int button, int state, int x, int y);  
void mouseMotion(int x, int y);

您可以重新实现这些功能以获得程序的自定义行为。

例如,如果您想在用户按“s”后绘制船只,那么在keyboardDown功能中,您可以将全局标志设置为1.然后,在显示功能中,您可以检查那面旗帜。如果它是1,那么你将绘制你的船。

当然,由您决定如何放置/移动您的船只:)

有关更多信息,请查看documentation