Как сделать игровую логику в OpenGL (GLUT) и C ++? - PullRequest
0 голосов
/ 10 января 2012

Я программирую игру "Морской бой" на OpenGL (GLUT) и C ++.

Я знаю, как работать с графикой (например, отображение поля и предопределенных кораблей), но где я должен поставить свой код игры, как:

  • если клавиша оставлена ​​нажатой, выберите одно поле слева и отобразите его
  • если корабль установлен, то отобразить корабль

Такие вещи, как размещение корабля (переключение между полями), я не могу сделать с помощью функции display (), но если корабль установлен, он должен быть нарисован функцией display (), верно?

Я не знаю, где поставить игровую логику.

Ответы [ 2 ]

2 голосов
/ 10 января 2012

То, что вы ищете, это базовый, классический игровой цикл . По сути, ваша игра работает в одном гигантском цикле. В этом цикле вы обрабатываете пользовательский ввод, реагируете на пользовательский ввод, запускаете AI и обновляете видео / аудио в ответ. Это, конечно, очень упрощенный подход, но этого будет достаточно для линкора.

Концептуально, более или менее:

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

Если вы на самом деле работаете в режиме реального времени, а не по событиям, то вам нужно, чтобы ваши обновления учитывали время, прошедшее с момента последнего обновления, а также ввод данных от игрока. Я буду держать это коротким и ограниченным тем, о чем вы спрашиваете.

1 голос
/ 10 января 2012

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, тогда вы нарисуете свой корабль.

Конечно, решать, как разместить / переместить свой корабль:)

Для получения дополнительной информации ознакомьтесь с документацией

...