游戏模式#
最后,我们再来分别针对各种模式,讲一下每个模式的核心内容。
身份#
身份场定义于mode/identity.js
,在返回的object中,translate、element、skill均会被注入到lib中,game和get则分别注入到对应的全部变量中。其中translate和skill没啥好说的,而element中的元素通常是给本模式自行触发用的,因为这样注入才能调用到this对象,get和game也是大概类似,只不过game中有不少函数是给本体触发的,但都不是很重要。“normal”为标准、“zhong”为明忠、“stratagem”为谋攻、“purple”为3v3v2。
因此游戏的核心和流程都集中在start函数中,其代表了初始事件。
第零步,判断是否为乱斗产生的子模式,并记录以便以后使用。
第一步,考察是否为回放模式,是的话则进行回放并终止后续事件内容。
第二步,展示游戏更新内容。
第三步,如果是联机模式则进入等待状态,也就是联机模式下的房间。
第四步,根据联机和单机有所不同,总之就是一个身份分配和选将的过程。
第五步,分为两小步,第一步是根据模式给予模式下的特殊技能,第二步是触发gameStart事件并开启视频记录功能。
第六步,进行摸牌和手牌置换。
第七步,游戏进入循环。
在身份场的基本流程中,大家最喜欢操作的无非就是选将和手牌置换。对于前者,单机模式下游戏直接自调用chooseCharacter()
,联机模式就稍微绕一点,先调用系统的randomMapOL()
再回调当前文件的chooseCharacterOL()
,反正无论如何修改chooseCharacterXX
即可。对于后者,如果要加更多手气卡,则应放在分牌事件gameDraw
之后。
国战#
国战定义于mode/guozhan.js
,除去与身份场相同的部分,我们主要考虑不同的部分。首先其自带的card
、aozhanRank
、guozhanRank
、yingbian_guozhan
、characterSort
、characterPack
、guozhanPile_yingbian
、guozhanPile
表示国战中特殊的卡牌和角色,其会在提前阶段函数startBefore
进行导入操作。至于onreinit
不用管它,属于历史垃圾所需要的补丁,然后其实也就没什么特别的了。“normal”为势备、“yingbian”为应变、“old”为怀旧、“free”为自由。
第零步,包含了回放判定、联机等待、单机确定牌堆集于一体的操作,只能说“妙啊”。
第一步,则是联机下判定牌堆并选将,单机下直接进行选将,而各模式除了牌堆就基本没什么不同了。
第二步,确定玩家和座位并触发gameStart。
第三步,发牌、开启记录、手牌置换、进入主循环一气呵成,只能说“妙啊”。
国战中诸如明置之类的操作,实际就是一种所有玩家都拥有的全局技能,并被写进了skill中。至于结算不同之类则是分别写在game下的tryResult、checkResult和checkOnlineResult之类的函数之中。
其它#
斗地主定义于mode/single.js
,和一主两反的身份场没太大差别,无非就是加了点技能、加了点卡牌。“normal”为休闲斗地主、“kaihei”为开黑斗地主、“huanle”为欢乐地主、“binglin”为兵临城下、“online”为智斗三国,它们的差别无所谓,反正搞来搞去都是1v2。
单挑定义于mode/single.js
,内容同上。“dianjiang”为点将单挑、“normal”为新1v1、“wuxianhuoli”为无限火力、“changban”为血战长坂坡,它们的差别无所谓,反正搞来搞去都是1v1。
对决定义于mode/versus.js
,与前面的几乎一样,但单机和联机还有模式上的差别,怀疑为历史遗留,甚至还有的模式会报错。
剩下的东西(挑战、战棋、塔防、炉石、乱斗)均为年久失修的遗物,我们不做讨论。