游戏模式#

最后,我们再来分别针对各种模式,讲一下每个模式的核心内容。

身份#

身份场定义于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,除去与身份场相同的部分,我们主要考虑不同的部分。首先其自带的cardaozhanRankguozhanRankyingbian_guozhancharacterSortcharacterPackguozhanPile_yingbianguozhanPile表示国战中特殊的卡牌和角色,其会在提前阶段函数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,与前面的几乎一样,但单机和联机还有模式上的差别,怀疑为历史遗留,甚至还有的模式会报错。

剩下的东西(挑战、战棋、塔防、炉石、乱斗)均为年久失修的遗物,我们不做讨论。