回合制战斗逻辑循环与多线程单线程选择
正做一款回合制小游戏,遇到了多线程和单线程的选择问题:
战斗逻辑循环很明了,如下:
for(所有战斗单位)
{
当前单位:
{
if(当前单位属电脑控制)
{
计算行动方式;
}
else(当前单位属玩家控制)
{
等待玩家输入行动方式;
}
行动;
}
设置下个单位为当前单位;
}
如果选择多线程(把以上战斗逻辑循环放在一个单独的线程中):
优点:战斗逻辑循环可直接使用,无需更改,代码清晰。
缺点:与界面显示之间大量的同步代码,极易出错,调试困难,难于维护。
如果选择单线程:
优点:单一线程,无同步代码,调试简单,易于维护。
缺点:战斗逻辑循环无法直接使用,因为程序无法同时运行两个循环(主界面消息循环和战斗逻辑循环)。需使用状态机等方式将战斗逻辑循环拆解执行,代码支离破碎。
望高手支招,多谢。
[解决办法]
云风在他的《我的编程感悟里》谈到,他的大话西游2客户端唯一用到多线程地方的就是场景的加载,以实现平滑过度。
我也认为,很多地方都没必要使用多线程,因为客户端不像服务端需要负载均衡。
[解决办法]
有个东西叫协程,windows下的实现叫fiber.
主界面循环
{
//处理主界面消息
//将执行流程切换到战斗循环
}
战斗循环
{
//处理战斗消息
//如果没事可干了,切换执行流程到主界面循环
}
[解决办法]
客户端建议单线程处理,服务器也建议这样做,不解释。