多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
在邓艾的指引下,这一次我们要开始使用属于我们自己的牌堆了!大家的干劲都很足呀。首先我们先看一下怎么向一个牌堆添加卡牌吧。 </br>等一下,我们要怎么样才能有自己的牌堆呢?需要创建一个吗? </br>当然不用。我们只需要想好自己的牌堆叫什么名字,到时候直接使用就可以了。一般来说名字就是一串跟相应的技能有关的小写字母了,由于是自己使用的,所以跟别人的牌堆重名了其实也没太大关系(只是会在辨识上有点小混乱)。 </br>目前已有的牌堆名字,列在下面了: * 不屈牌堆:buqu,来自技能不屈; * 田牌堆:field,来自技能屯田; * 七星牌堆:stars,来自技能七星; * 权牌堆:power,来自技能权计; * 醇牌堆:wine,来自技能醇醪; * 米牌堆:rice,来自技能义舍; * 梦牌堆:dream,来自技能醉乡; * 锦牌堆:brocade,来自技能银铃。 </br>比如我们的牌堆叫做光"light",那么只需要在翻译表中写上一句: `["light"] = "光"`, </br>那么这个牌堆就可以被游戏接受了。 </br>向一个牌堆添加卡牌,用到的是ServerPlayer的一个成员函数`addToPile`。它的函数原型是: ``` addToPile(pile_name, card, open=true) addToPile(pile_name, card_id, open=true) addToPile(pile_name, card_ids, open=true) ``` ![](https://img.kancloud.cn/50/54/50549a2d9e0f181014d67a931dac98e9_804x66.png) </br>其中: * pile_name就是牌堆的名字,比如刚才说的"light"。 * 第一个原型中的card表示要添加的卡牌对象。 * 第二个原型中的card_id表示要添加的卡牌的编号。 * 第三个原型可以用来添加一串卡牌,里面的card_ids表示所有要添加的卡牌的编号的列表。 * open表示添加到牌堆的时候,卡牌是否公开。像七星的牌就是不公开的,而不屈的牌是要给大家看的。 </br>下面我们来创作这样一个技能: > 佛光:每当你造成或受到1点伤害后,你可以摸一张牌并将其置于你的武将牌上,称为‘光’。 </br>通常我们可以用`addToPile`的第二个原型,也就是通过编号添加卡牌的方法设计这个技能。不过考虑到技能是按伤害点数发动的,每次伤害可能会有不同的点数,摸不止一张牌,所以最后我们还是选择了第三个原型解决它。当然了,这首先要从摸牌堆摸几张牌才对。 </br>由于摸的这些牌不经过手牌区,直接放到牌堆里,所以我们这次不用那个`drawCards`方法摸牌了,而是Room的另一个成员函数`getNCards`。它的原型是这样的: ``` getNCards(n, update_pile_number=true) ``` ![](https://img.kancloud.cn/73/8d/738d191379a0612abac61b712f15c206_602x25.png) </br>这个函数可以用来获取牌堆顶的n张牌的编号列表,参数`update_pile_number`表示是否在获取列表后更新摸牌堆的卡牌数目,填true表示更新,而false就是不更新,当然默认是true了。 </br>这个技能是按伤害点数添加牌的,我们可以通过data得到伤害点数`count`,然后让`n=count`就行了。代码如下: ![](https://img.kancloud.cn/5a/54/5a548332e557d03c48a9b7e8cd9fd391_679x305.png) </br>效果: ![](https://img.kancloud.cn/c9/2f/c92fec7537aaa20cb42ab88822d03e7e_420x173.png) </br>游戏记录: ![](https://img.kancloud.cn/6a/0f/6a0fdf687c5f9c4ff1a07caa039c3c6c_233x100.png) </br>添加成功!