注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

太阳神上的博客

青青子衿,悠悠我心,但为君故,沉吟至今。

 
 
 

日志

 
 
 
 

太阳神三国杀中的事件触发机制(二)  

2011-08-24 18:24:51|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

事件的触发

对应每一局游戏,服务器都有一个对应的线程(RoomThread)来掌控整局游戏的流程,而所有的事件也是在这个线程里处理的,具体的触发函数是RoomThread::trigger,其三个参数就是我前面所说的事件的3个要素。

事件表

事件表是由游戏线程管理的一个数据结构,它保存了游戏中所有需要用到的技能(包括武将技能和装备技能)和一些规则(如游戏基本规则和场景模式下的特定规则等,以下统称技能)。此事件表在游戏开始前加入游戏的规则和当前在场武将的技能,并且按照优先级在表里排好序(此排序算法是稳定排序),另外,在装备的安装和卸载的时候,事件表也会动态地将装备技能进行插入和删除。

事件的响应

一个事件产生以后,掌控游戏流程的线程从事件表里取出所有响应此事件的技能,然后判断是否满足触发条件,若满足触发条件,则执行技能的触发函数。由于响应同一个事件的技能按照优先级进行执行,每次一个技能触发完毕以后,返回一个布尔值,用于指示此事件是否终止触发,若为真则中断后续的处理,若为假则继续执行。等响应此事件的所有技能触发完毕后,程序再将此事件传给AI,用于更新AI的一些内部数据,例如反贼被杀,主忠强势,此时可以更新内奸的AI,让其跳反等。

技能的优先级

显然技能的优先级是一个重要的控制参数,优先级用一个整数来表示,值越大,优先级越高,当事件产生的时候,也就优先执行其触发函数。一般的设置如下:

  • -1:低于游戏的基本规则,例如一些摸牌阶段后发动的技能如七星,弃牌阶段后发动的如固政等
  • 0:游戏的基本规则,例如摸牌阶段要摸2张牌之类
  • 1:一般技能的游戏级
  • 2:锁定技的优先级
  • 3:剧情模式的规则优先级

前面说了,将技能加入事件表是稳定排序,也就是在相同优先级的情况下,双将的主将技能优先触发,因为主将的技能先加入触发表,同理由于装备的技能是在游戏开始前是没有加入事件表的,所以相同级别的武将技和装备技,武将的技能优先发动,例如贯石斧和庞德的猛进,应该先发动猛进再贯石。不过曹操的护驾与八卦有个例外,八卦的优先级要比护驾高,这个是为了充分利用曹操的自己的八卦,八卦失效后再触发护驾。此外,克己与庸肆,程序里都是在弃牌阶段触发的,但是克己可以跳过整个弃牌阶段,所以此类技能也人为的将其提升到比庸肆还高,来解决克己与庸肆的优先级的问题。

  评论这张
 
阅读(2077)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017