能挣就能花,能摸就能弃。游戏中摸牌很不错,那么考虑一下游戏中弃牌吧。
</br>游戏中的弃牌主要有这么两种情况:
1. 选一些自己的牌然后弃置(以便发动一些技能)
2. 直接弃置卡牌
</br>一般来说,选自己的牌弃掉的情况都是跟具体的技能发动有关的,比如强袭(选一张武器牌弃掉并造成一点伤害)、离间(选一张牌弃掉制造决斗效果)什么的。
</br>这种情况其实是将被选择的牌当作了一种自创的游戏卡牌(这种卡牌可以实现我们想要的效果)使用了,在代码里面使用了一种叫做“技能卡”的方法描述它们,本质上属于一种“视为技”(将选择的卡牌视为自创的技能卡)。
</br>对于这种视为技,我们可以用前面提到的sgs.CreateViewAsSkill处理,跟现在考虑的弃牌有一种貌合神离的感觉,就先不管它们了吧。
至于直接弃置卡牌的情况,那就真的是直接把牌扔进弃牌堆了,算是某些游戏行为的附带效果吧。
</br>刚巧Room老兄有这方面的经验,于是它又向我们介绍了一个关于弃牌的成员函数:`throwCard`。这个函数的原型有三个:
```
throwCard(card_id, who, thrower=NULL)
throwCard(card, who, thrower=NULL)
throwCard(card, reason, who, thrower=NULL)
```
![](https://img.kancloud.cn/1e/ad/1ead1019c18833d89fa0f8c722f468f6_1125x71.png)
</br>第一个原型可以用来弃掉指定编号的卡牌,参数`card_id`就是卡牌的编号了。参数who是卡牌的拥有者,也就是被卡牌抛弃的那位。至于参数thrower,就是发动这个弃牌行为的“罪魁祸首”了,默认值是NULL,表示没有人发动(看样子是自愿行为……)。
</br>后两个原型当然也差不多啦,只不过它们不是通过编号锁定弃牌目标的,而是直接弃掉某张卡牌。参数card就是被那个弃置的卡牌了,剩下的who和throw和第一个原型里面的是一样的。
</br>哦,第三个原型还多了个参数reason,它表示扔牌的原因了,不过现在我们并不怎么关心它!
</br>(编者:悟空啊,又该你出场了!)
</br>现在为我们威力强大的孙悟空再加一个强力的技能吧:
“引渡:每当你对一名角色造成一次伤害后,你可以弃置其一张牌,然后该角色摸两张牌。”
</br>首先这是一个触发技,触发时机是sgs.Damage(造成伤害后)。所以我们选择sgs.CreateTriggerSkill创造这个技能。
</br>接下来就是触发效果了。我们可以通过data中的伤害信息知道对谁造成了伤害。然后想办法选择TA的一张牌,并且弃掉那张被我们选中的牌。
</br>选择其他角色的牌的方法是利用Room兄的另一个成员函数`askForCardChosen`啦。它的原型是这样的:
```
askForCardChosen(player, who, flags, reason)
```
![](https://img.kancloud.cn/06/86/0686a0aa6ee81d3c8b4bc5a93e493377_1072x28.png)
</br>在这里:
1. 参数player是被询问选择卡牌的角色;
2. 参数who是被选择卡牌的角色;
3. 参数flags表示选择卡牌的位置,取值如下:
* "h":手牌区
* "e":装备区
* "j":判定区
</br>也可以对它们进行组合,比如"he"表示手牌和装备区域。组合时各字母的顺序不影响系统对代码的理解!
</br>参数`reason`表示询问的原因,一般是当前技能的名字。
</br>所以如果说要求让孙悟空获得猪八戒的一张装备牌,就要这么写:
```
room:askForCardChosen(孙悟空,猪八戒,"e", 技能名字)
```
</br>弃牌之后的摸牌行为,就不用说了吧?代码如下:
![](https://img.kancloud.cn/e3/4e/e34e6fbda090151e023cb43109740e9a_783x356.png)
</br>到游戏中看一下效果:
</br>首先用决斗对对方庞德造成了伤害。
</br>然后发动了引渡,准备弃牌:
![](https://img.kancloud.cn/60/00/600050063436828562a3c56d4bff7ec2_393x233.png)
</br>选择弃置了庞德装备区的诸葛连弩,效果:
![](https://img.kancloud.cn/2a/fb/2afb6d06684d1af40e1bd9f5b6ee417f_466x193.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 立即胜利