游戏编程结构 我已经用C++编程了一段时间,我对语法非常熟悉。我想用快板做纸牌游戏。我明白我需要为游戏逻辑所做的一切。让我困惑的是如何驾驶游戏。我对基于循环的应用程序有点陌生。我已经习惯了VB.Net中基于事件的编程。我只是不确定在没有很多“如果”和“嘘声”的情况下交换球员和举办“活动”的正确方式。同时现在我有一个布勒数组来检查哪张牌在使用中。我的游戏每次都会在整个布尔数组中迭代,我觉得很混乱。另外,如果我想从我的菜单循环转到我的设置循环,没有一个大的bool怎么办? 谢谢
这是许多不同的问题。我的第一个建议是寻找类似游戏的在线源代码。如果您需要代码方面的帮助,请将其与问题一起发布 您很可能需要一组类似以下内容的ifs和循环:游戏编程结构 我已经用C++编程了一段时间,我对语法非常熟悉。我想用快板做纸牌游戏。我明白我需要为游戏逻辑所做的一切。让我困惑的是如何驾驶游戏。我对基于循环的应用程序有点陌生。我已经习惯了VB.Net中基于事件的编程。我只是不确定在没有很多“如果”和“嘘声”的情况下交换球员和举办“活动”的正确方式。同时现在我有一个布勒数组来检查哪张牌在使用中。我的游戏每次都会在整个布尔数组中迭代,我觉得很混乱。另外,如果我想从我的菜单循环转到我的设置循环,没有一个大的bool怎么办? 谢谢,c++,C++,这是许多不同的问题。我的第一个建议是寻找类似游戏的在线源代码。如果您需要代码方面的帮助,请将其与问题一起发布 您很可能需要一组类似以下内容的ifs和循环: while(1){ initYourLevel(); while(levelNotOver){ //do things } } 然后这一切都取决于你想做什么,你的问题对我来说有点模糊。开始关注人们是如何做事的。有很多示例代码 希望这会有所帮助大多数游戏框架都提供了两种需要实现的方法(它们都在循环中调用): 更新 画
while(1){
initYourLevel();
while(levelNotOver){
//do things
}
}
然后这一切都取决于你想做什么,你的问题对我来说有点模糊。开始关注人们是如何做事的。有很多示例代码
希望这会有所帮助大多数游戏框架都提供了两种需要实现的方法(它们都在循环中调用):
- 更新
- 画
更新
是您应该放置所有这些内容的地方,这些内容应该检查用户输入、状态更改、间隔操作等。例如物理、按钮按下等。没有什么可以阻止您在此处处理事件(请看)
Draw
应该只向屏幕呈现当前的底层状态。因此,您必须确保底层状态/模型易于访问
void Game::render() {
this->table->render();
this->cardsOnTable->render();
this->hand->render();
// ...
flipBuffers();
}
您可以使用场景
和场景管理器
(可以是堆栈)解决菜单/设置菜单问题。因此,不要直接将逻辑放入游戏
,而是将其放入场景
。您还可以在管理器中推送/弹出场景
void Game::update() {
this->sceneManager->activeScene->update();
}
void MenuScene::update() {
if(settingsMenuItemSelected) {
game->sceneManager->push(new SettingsMenuScene));
// now the next time Game::update() is called
// the active scene of the SceneManager will be
// the settings menu. And once it is closed/cancelled
// it will pop itself from the manager and we are back
// in the regular menu
}
}
如果你想从更高级的东西开始,你可以尝试存储“事件”当你进入
在C++中,基于多态性类(请参阅您最喜欢的C++模式书)、基于模板的()、……BR>,有不同的实现状态机的方法。 常见的是,当使用中心循环时,您将事件转发给某个处理程序(表示状态或子状态),该处理程序将执行适合当前情况的操作。需要改变行为(例如从游戏到选项)?关掉处理器 您还需要包装和抽象当前游戏状态-不需要在每个位置显式处理例如卡。用卡片或内部处理的玩家管理器等包装物品。
也可以使用C++的容器和算法,可以在“代码> STD中管理卡或玩家::MAP<代码> S或<代码> STD::设置< /COD>当您达到标准库的极限时,请查看boost。什么是大bool<代码>长布尔?;)
void Game::update() {
this->sceneManager->activeScene->update();
}
void MenuScene::update() {
if(settingsMenuItemSelected) {
game->sceneManager->push(new SettingsMenuScene));
// now the next time Game::update() is called
// the active scene of the SceneManager will be
// the settings menu. And once it is closed/cancelled
// it will pop itself from the manager and we are back
// in the regular menu
}
}