(此文原在新浪博客上发的,但是新浪博客的插入代码实在是不友好,忍无可忍的情况下,又回到csdn上重新写一遍。)
一直想写一系列的系列教程,这么多年挖了很多大坑一直没有填(坑都在小本本上记着,欠下的债迟早都要还),现在准备开始慢慢填坑了。三国杀是其中一个坑,刚毕业那会儿,在csdn上写过一个太阳神开源三国杀的编译教程,用的是QT C++的框架,后来也自己写过几个武将、装备、锦囊啥的,再后来太阳神三国杀论坛关闭了,那会儿下载的好多半成品的开源工程,包括水浒杀、英雄杀、闯关杀等等,现在电脑里依然保存着这些代码,大多数还都能编译通过。后来太阳神官方版的源代码不再更新了,三国杀online更新了一个又一个版本,这两个版本之间也没有了同步,直到最近在水浒杀的qq群里,发现了无名杀。
无名杀是基于html+js+css,核心代码使用js实现的,目前仍与三国杀online保持同步更新,而且还出了很多有趣的扩展模式,比如塔防、战旗、炉石、斗地主等等,更为重要的是,QQ群里保持高度的活跃。于是,准备先拿这个源代码进行练手,开始我三国杀开源系列的教程编写。
无名杀的源代码下载地址:https://github.com/libccy/noname.git
无名杀扩展包的源代码下载地址:https://github.com/libccy/noname-extension.git
在开始研究主体源代码前,先以写扩展包为基础,农村包围城市,慢慢一点一点的剥洋葱。QQ群里有数以百计扩展包,我选取英雄杀为标的进行制作,原因很简单,英雄杀有官方的参照,更重要的是有资源,省却了美工、配音等一系列的工作。但初步来开,无名杀的扩展能力仍然没有太阳神那样灵活。anyway,不管白猫黑猫,能抓住老鼠就是好猫。
无名杀比太阳神还有一个地方就是,没有现成的文档可参阅(太阳神三国杀光api都有好多人整理,至于如如何写武将、技能、装备、锦囊等卡牌的教程那就更多了),只能靠查看之前的代码慢慢摸索了。
PS:这些教程是我自学的一个记录,所以很多不理解的地方,我会先把坑留着(又是坑!!!)回头会再补。
---------忧伤的分割线(以上是废话)---------
无名杀的扩展包,有以下文件组成:
1、代码文件:只需要一个extension.js即可
2、资源文件:图片、配音等,放在同级目录之下即可。
首先,看下extension.js文件的构成。
1、整个文件有一个函数构成,这个函数有两个参数,一个字符串和一个函数
game.import()
game.import("extension",function(lib,game,ui,get,ai,_status){})
2、字符串“extension”是固定不变的,重点看这个function函数,如下:
输入参数共6个:lib,game,ui,get,ai,_status
返回值长度为8的数组:name="xx",content:function (config,pack){},precontent:function (){},help:{},config:{},package:{},editable:false,files:{}
整个形式如下:
game.import("extension",function(lib,game,ui,get,ai,_status){
return {
name:"",
content:function (config,pack){},
precontent:function (){},
help:{},
config:{},
package:{},
editable:false,
files:{}
}
})
3、现在开始逐个讲解返回数组的每个参数之name和content:function
name='xhero', //扩展包的名字,我起名x英雄杀
//content:function (config,pack){},可留空,可以根据不同的配置文件加载不同内容,可以自定义翻译、音乐播放、图片特效等等内容,其他作用暂时还没吃透,等后面用得到的时候再讲。本扩展包,当前版本暂时只用到翻译功能(君、臣、民、魂),内容如下:
content:function (config,pack){
lib.group.push('min');
lib.translate.min='<span style="color:#00EC00">民</span>';
lib.translate.minColor='wood';
lib.group.push('chen');
lib.translate.chen='<span style="color:#0072E3">臣</span>';
lib.translate.chenColor='water';
lib.group.push('jun');
lib.translate.jun='<span style="color:#FF8000">君</span>';
lib.translate.junColor='gold';
lib.group.push('hun');
lib.translate.hun='<span style="color:#FF0000">魂</span>';
lib.translate.hunColor='fire';
},
(明天要去体检,今天就先写到这儿吧。)