首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

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

2012-09-07 
回合制战斗逻辑循环与多线程单线程选择正做一款回合制小游戏,遇到了多线程和单线程的选择问题:战斗逻辑循

回合制战斗逻辑循环与多线程单线程选择
正做一款回合制小游戏,遇到了多线程和单线程的选择问题:

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

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

  行动;
  }

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

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

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

望高手支招,多谢。

[解决办法]
云风在他的《我的编程感悟里》谈到,他的大话西游2客户端唯一用到多线程地方的就是场景的加载,以实现平滑过度。

我也认为,很多地方都没必要使用多线程,因为客户端不像服务端需要负载均衡。
[解决办法]
有个东西叫协程,windows下的实现叫fiber.

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

战斗循环
{
//处理战斗消息
//如果没事可干了,切换执行流程到主界面循环
}
[解决办法]
客户端建议单线程处理,服务器也建议这样做,不解释。

热点排行