Аналогично ответу Эндрю Айлетта и, предполагая, что объектно-ориентированный язык, возможно, вы могли бы сделать что-то вроде:
Interface IState {
void init();
void update();
void draw();
}
class GameplayScene implements IState {
void init() {
// initialize gameplay
}
void update() {
// update game logic
}
void draw() {
// draw game
}
}
class MenuScene implements IState {
void init() {
// initialize menu
}
void update() {
// update menu logic
}
void draw() {
// draw menu
}
}
class ScoresScene etc...
class TitleScene etc...
// Somewhere else, probably in the Game class
void Main() {
// Init game
Scene currentScene = new TitleScene;
while (Scene != null) {
Scene.init();
Scene.update();
Scene.draw();
}
// Exit game
}
Вам также нужно подумать о том, как обрабатывать переходы между сценами. У каждого класса сцены может быть переменная-член, называемая чем-то вроде nextScene, и основная функция запрашивает ее в начале цикла, чтобы переключиться на нужную сцену.
Если вы не можете позволить себе роскошь использовать объектно-ориентированный язык программирования (например, C ++, Java, C #, Python и т. Д.), То оба Колина и Ника Д ответы могут помочь, хотя я постараюсь разместить оператор switch в одном месте (скажем, одну большую функцию game_update), чтобы позволить добавлять новые состояния, внося изменения в одном месте. В качестве альтернативы, вы можете использовать дизайн конечного автомата Колина, чтобы сделать что-то более общее, и для этого явно не требуется жестко закодированный оператор switch. (хотя, если честно, сейчас я не могу придумать, как это сделать)