回合制战斗逻辑循环与多线程单线程选择

lliihhaaoo 2012-06-09 01:48:46
正做一款回合制小游戏,遇到了多线程和单线程的选择问题:

战斗逻辑循环很明了,如下:

for(所有战斗单位)
{
当前单位:
{
if(当前单位属电脑控制)
{
计算行动方式;
}
else(当前单位属玩家控制)
{
等待玩家输入行动方式;
}

行动;
}

设置下个单位为当前单位;
}

如果选择多线程(把以上战斗逻辑循环放在一个单独的线程中):
优点:战斗逻辑循环可直接使用,无需更改,代码清晰。
缺点:与界面显示之间大量的同步代码,极易出错,调试困难,难于维护。

如果选择单线程:
优点:单一线程,无同步代码,调试简单,易于维护。
缺点:战斗逻辑循环无法直接使用,因为程序无法同时运行两个循环(主界面消息循环和战斗逻辑循环)。需使用状态机等方式将战斗逻辑循环拆解执行,代码支离破碎。

望高手支招,多谢。
...全文
643 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lliihhaaoo 2012-09-01
  • 打赏
  • 举报
回复
> 或者楼主可以说一下,你的哪块计算会影响游戏帧率??

假如不用多线程的话,目前就AI会影响帧率。但对与回合制的话,影响不大。
yahle 2012-06-28
  • 打赏
  • 举报
回复
客户端建议单线程处理,服务器也建议这样做,不解释。
sniperhuangwei 2012-06-20
  • 打赏
  • 举报
回复
有个东西叫协程,windows下的实现叫fiber.

主界面循环
{
//处理主界面消息
//将执行流程切换到战斗循环
}

战斗循环
{
//处理战斗消息
//如果没事可干了,切换执行流程到主界面循环
}
weiwuyuan 2012-06-19
  • 打赏
  • 举报
回复
我刚好马上就要设计战斗系统(自己做的游戏,模拟大话2),
不过细想起来,可能和你的情况不太一样,
因为我的设计可能和你不一样,我做的虽然也是单机游戏,但是却分为“服务端”和“客户端”两个部分,不过这个“服务端”是假的,因为它就是一个线程,而并没有使用网络协议(原来是用的IOCP,不过后来被我放弃了), 服务端就是不断的给客户端发消息,而他们都在同一进程里。

这样的话,我的所有跟游戏相关的行为都由这个“服务端”来控制,而客户端就是坐享其成,听任指挥了。
而且还有个好处就是,非常容易做游戏录象,因为客户端自启动到运行,所有都是靠接收数据包而运转的,用数据包做成的录象再大也大不到哪去。

这样的话,似乎和你的多线程是一个道理。

不过,我觉得回合制战斗逻辑这一块再复杂也消耗不了多少CPU资源,就拿大话西游2为例,他整个战斗场景最多就20个角色(包括召唤兽在内),对20个角色各自跑一下他的每一步操作,都不会消耗多少CPU吧,因为数量太少了,而且也不是实时计算,每个角色只要给出一个行动即可。

这是我的肤浅的估计,并没什么经验,仅供参考。

或者楼主可以说一下,你的哪块计算会影响游戏帧率??
weiwuyuan 2012-06-19
  • 打赏
  • 举报
回复
云风在他的《我的编程感悟里》谈到,他的大话西游2客户端唯一用到多线程地方的就是场景的加载,以实现平滑过度。

我也认为,很多地方都没必要使用多线程,因为客户端不像服务端需要负载均衡。

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧