如何用事件序列编程游戏 我在C++中编写NDS代码。我计划写一个游戏,在这个游戏中,事件按顺序发生,并根据玩家的选择而变化,就像决策树一样。例如:
==位置===如何用事件序列编程游戏 我在C++中编写NDS代码。我计划写一个游戏,在这个游戏中,事件按顺序发生,并根据玩家的选择而变化,就像决策树一样。例如:,c++,updates,updating,sequential,game-theory,C++,Updates,Updating,Sequential,Game Theory,==位置=== 过道:玩家可以通过两扇门 浴室:有通往地下室的秘密入口 地下室:通向走廊 卧室:通向浴室 ==序列=== 在每个房间里,都会不断检查按键是否正确。因此,这是我最初想到的编码序列的基本且通常不好的方法: void drawText() { //writes the specified text to the screen depending on the room } void playGame() { //This function gets called to
- 过道:玩家可以通过两扇门
- 浴室:有通往地下室的秘密入口
- 地下室:通向走廊
- 卧室:通向浴室
void drawText()
{
//writes the specified text to the screen depending on the room
}
void playGame()
{ //This function gets called to play through the whole game
drawText();
while(1)
{
updateKeys();
if (newPress()) //New key is pressed
{
if (getButtonInt()==BATHROOM_INT)
bathroom(); //it will launch the basement function as a subroutine
else //Bedroom
bedroom(); //it will launch the bathroom function as a subroutine
drawText();
}
//When returning from room function, the
}
}
这种方法的许多缺点包括:
- 几乎不可能实现多人游戏,因为一切都需要不断更新
- 几乎不可能更新其他功能(如帧/时间跟踪器)
- 添加一个在房间之间切换的选项将导致递归,并可能导致内存溢出
是的,我可以在switch语句中写入所有内容,并让playGame函数之外的变量跟踪switch语句中的位置,但结构似乎不可读或不符合逻辑。Hmmm,闻起来像一个状态机。你们的州被称为地点。门是到其他状态的过渡 有许多方法可以实现状态机:
开关
&案例
、如果
梯形图或查找表(或映射
s)
为了开发前一个或两个状态,我使用switch
或if
语句。然而,在第二个状态之后,我通常转换为查找表
查找表允许您添加更多状态,而无需更改状态逻辑或我所称的查找引擎
查找表的外观如下所示:
+--------+--------------+--------------+-----+
|Present | state for | state for | ... |
| state | transition 1 | transition 2 | ... |
+--------+--------------+--------------+-----+
一种实现是结构的常量数组。搜索当前状态ID,然后根据转换ID提取下一个状态值。简单
为了获得更多乐趣,您可以用指针或对函数的引用替换“状态转换”框(字段)。这允许您根据转换执行函数
扩展它,您可以有一个状态表容器,例如每个“游戏级别”有一个状态表
尝试将您的视角从面向执行改为数据驱动。您可能能够使您的游戏桌的大部分驱动,并有一个小的“引擎”。嗯,看起来这可以扩展到使用故事板和
编辑1:地图和数据库如果选择使用类似于
std::map
,则需要将查找表拆分为{key,value}
对。一个键看起来像当前状态。该值类似于转换框。但是等等
这些转换看起来像是关系或关联的容器。转换ID与状态ID或状态函数相关联。气味就像另一张桌子或地图
所有这些数据通常被称为数据库。您可以使用数据库来包含您的状态。哇,它可以为您处理存储和数据类型
但是,我离题了。一步一个脚印…嗯,闻起来像个状态机。你们的州被称为地点。门是到其他状态的过渡
有许多方法可以实现状态机:开关
&案例
、如果
梯形图或查找表(或映射
s)
为了开发前一个或两个状态,我使用switch
或if
语句。然而,在第二个状态之后,我通常转换为查找表
查找表允许您添加更多状态,而无需更改状态逻辑或我所称的查找引擎
查找表的外观如下所示:
+--------+--------------+--------------+-----+
|Present | state for | state for | ... |
| state | transition 1 | transition 2 | ... |
+--------+--------------+--------------+-----+
一种实现是结构的常量数组。搜索当前状态ID,然后根据转换ID提取下一个状态值。简单
为了获得更多乐趣,您可以用指针或对函数的引用替换“状态转换”框(字段)。这允许您根据转换执行函数
扩展它,您可以有一个状态表容器,例如每个“游戏级别”有一个状态表
尝试将您的视角从面向执行改为数据驱动。您可能能够使您的游戏桌的大部分驱动,并有一个小的“引擎”。嗯,看起来这可以扩展到使用故事板和
编辑1:地图和数据库
如果选择使用类似于std::map
,则需要将查找表拆分为{key,value}
对。一个键看起来像当前状态。该值类似于转换框。但是等等
这些转换看起来像是关系或关联的容器。转换ID与状态ID或状态函数相关联。气味就像另一张桌子或地图
所有这些数据通常被称为数据库。您可以使用数据库来包含您的状态。哇,它可以为您处理存储和数据类型
但是,我离题了。一步一个脚印…您可能需要一个数据结构,该结构可以为每个房间定义以特定移动方向到达的房间。研究“状态”设计模式或状态机。您的图表看起来像是一个带有转换的状态机的图形。研究“关系数据库教程”和“数据库范式”。这可能会对您以后有所帮助。作为对Thomas Mathews答案的补充,请看一看:您可能需要一个数据结构,该结构可以为每个房间定义以特定移动方向到达的房间。研究“状态”设计模式或状态机。Y