摸牌技能是一种阶段触发技能,这一点我们都已经很熟悉了。当年孙悟空没成佛的时候,美王技能就是一个超级强力的摸牌技能。依稀记得那是我们将英姿中的那个数字1改成了10的缘故,所以就多摸了10张牌,成为了当年的那个样子。
</br>但那究竟是为什么呢?其实仔细想想也能明白了。摸牌技能与其它阶段触发技能不一样的地方,主要就是负责触发效果的`on_trigger`函数部分了。英姿的这部分函数是这样的:
![](https://img.kancloud.cn/d4/74/d47424eaed4532f87f21532ceac5b827_614x156.png)
</br>因为在摸牌阶段(sgs.DrawNCards),这个函数的最后一个参数data,里面装的是一个整数,表示摸牌阶段摸牌的数量。当然了,一般武将的这个数值都是2,表示摸牌阶段摸2张牌。
</br>而摸牌技能之所以可以做到让摸牌的数目各种各样,还是因为它们可以改变这个data中放置的数值,达到改变摸牌数目的目的。
</br>当然,为了改变摸牌数目,我们首先应该知道,原先data中到底是什么数。因为说不定当前这个武将,还拥有其它的摸牌技能(比如双将周瑜+袁术),导致data的数值已经被其它技能修改过了。
</br>由于此时data里面是一个整数数值,所以获得这个数值所用的方法,就是sgs.QVariant为我们提供的`toInt()`函数了。这个函数可以把data的值转变成一个整数,就像我们在英姿的代码里面看到的那样。
</br>因而我们就得到了这个摸牌的数值,然后就动手改变它吧!
</br>比如说,我们要创造这样的一个摸牌技能:
“自修:摸牌阶段,你可以额外摸等同于你当前手牌数的牌。”
</br>根据刚才的分析我们可以明白,这个技能其实就是要求data的数值在原有的基础上增加c,其中c为自己手牌的数目。
</br>那么其它部分的代码跟英姿就一样了,只需要额外再找出手牌究竟有多少就可以了。
</br>其实要知道手牌数目也是很简单的。ServerPlayer早就想到了这一点。它有一个成员函数叫做`getHandcardNum`,就可以用来探查一名武将的手牌数目。这个函数的原型是这样的:
```
getHandcardNum()
```
![](https://img.kancloud.cn/25/92/259235a9ae79f3e1564d5df6d7ce256e_353x23.png)
</br>没有参数哎!简单吧?
</br>这样我们就能确定发动技能之后,究竟能摸多少牌了。这就是说,现在我们已经知道data的数值最终会是什么了。
</br>赶紧把这个答案告诉data吧。重新设置data的数值,用的是`setValue`函数这一点,时间可能有点久远,可不要忘记了哦。
</br>所以我们的代码就是这样的了:
![](https://img.kancloud.cn/7d/88/7d8872dbab6559e831da15e8934a9e37_668x286.png)
</br>(编者:来来来,悟空,给你加个好技能!)
</br>到游戏中看看吧!
![](https://img.kancloud.cn/61/b6/61b633db11c09234c3228940bd93385c_197x144.png)
</br>由于开场时每人发了4张牌,所以摸牌时已经有了4张手牌,于是摸牌数目就是2+4=6,摸了6张牌。
![](https://img.kancloud.cn/57/cc/57ccaff7b2369ec9dabc515f299e1cff_1114x199.png)
</br>成功!
- 编写说明
- 第一章 创建一个新武将
- 1.1 开发环境准备
- 1.2 创建一个新的武将扩展包
- 1.3 创建我们的新武将
- 第二章 添加技能
- 第三章 武将美化
- 3.1 美化环境准备
- 3.2 添加武将卡牌
- 3.3 添加武将头像
- 3.4 添加武将标签
- 第四章 创建一个新技能
- 第五章 添加音效
- 5.1 打造自己的声音工作室
- 5.2 添加技能使用音效
- 5.3 添加武将阵亡音效
- 第六章 添加提示信息
- 6.1 添加代码注释
- 6.2 显示提示信息
- 6.3 启动全屏信息特效
- 第七章 武将变更
- 第八章 启用AI
- 8.1 创建我们的AI文件
- 8.2 真实的AI
- 8.3 动手写AI
- 第九章 修改距离
- 第十章 技能管理
- 10.1 技能判定
- 10.2 创建技能
- 10.3 获得技能
- 10.4 失去技能
- 第十一章 修改手牌上限
- 第十二章 体力变更
- 12.1 流失体力
- 12.2 制造伤害
- 13.3 恢复体力
- 12.4 流失体力上限
- 12.5 增长体力上限
- 第十三章 游戏进程的变更
- 13.1 创建阶段触发技能
- 13.2 跳过回合阶段
- 13.3 插入一个额外的回合阶段
- 13.4 启用翻面
- 13.5 获得一个额外的回合
- 第十四章 启用标记(Mark)
- 14.1 添加标记
- 14.2 获得标记
- 14.3 失去标记
- 14.4 查看标记数目
- 第十五章 卡牌转换
- 15.1 主动牌的转换
- 15.2 被动牌的转换
- 第十六章 卡牌传递
- 16.1 创建摸牌技能
- 16.2 游戏中摸牌
- 16.3 游戏中弃牌
- 16.4 从其他武将处获得牌
- 16.5 判断目标区域是否有牌
- 16.6 移动场上的牌
- 第十七章 用牌实现技能效果
- 第十八章 启用标志(Flag)
- 第十九章 涉足判定领域
- 19.1 启用判定
- 19.2 更改判定
- 19.3 获得判定牌
- 第二十章 私家牌堆
- 20.1 向牌堆中添加牌
- 20.2 查看牌堆中牌的数量
- 20.3 从牌堆中移除牌
- 第二十一章 牌的锁定
- 第二十二章 免疫牌
- 第二十三章 让房间提供牌
- 23.1 提供主动牌
- 23.2 提供被动牌
- 第二十四章 启用标签(Tag)
- 第二十五章 濒死结算
- 第二十六章 交换座次
- 第二十七章 创建主公技
- 27.1 创建由主公发起的主公技
- 27.2 创建由他人发起的主公技
- 第二十八章 强力技能
- 28.1 直接死亡
- 28.2 改换身份
- 28.3 原地复活
- 28.4 立即胜利