此时我们忽然发现一个问题。如果发动引渡时对方没有任何牌,又是空城又是没装备的,那么游戏进行到`askForCardChosen`时会直接崩溃退出。这很显然嘛,根本就没有选择的空间还硬要问,肯定是要犯错误的。所以不管是弃置牌还是获得牌,都要先确定一下目标是否真的有牌才好。
</br>确定目标是否有牌的方法是利用Player的成员函数`isNude`,它的原型是:
```
isNude()
```
![](https://img.kancloud.cn/2e/be/2ebe778e2652c13b6b07f45a6eb6fe2a_206x25.png)
</br>当它的结果是true时,表示目标武将既没有手牌也没有装备什么牌。
</br>如果我们连判断区也算上的话,就可以使用另外一个更为强烈的函数,那是Player的成员函数`isAllNude`,原型是:
```
isAllNude()
```
![](https://img.kancloud.cn/e9/ed/e9ed1a8c2f70f98e9bbe4c8dc31fc86b_233x25.png)
</br>这个函数的结果为true时,说明当前玩家完全裸奔了,手牌区、装备区、判定区都空空如也……
</br>另外,单独判断一个区域是否有牌也是很方便的。
</br>比如我们要确定一名玩家是否有手牌,是否处于空城状态,用的是Player的另一个成员函数`isKongcheng`就可以了,原型是这样的:
```
isKongcheng()
```
![](https://img.kancloud.cn/65/18/6518e27ec5ceccab6f7b9e4e4e777829_252x24.png)
</br>当`isKongcheng`得到的结果是true时,就说明此人没有手牌了。
</br>如果我们要确定一名玩家的装备区是否有牌,可以用Player的成员函数`hasEquip`查看一下。原型是这样的:
```
hasEquip(card)
hasEquip()
```
![](https://img.kancloud.cn/c9/5c/c95ce268b14338ede1e935db870275c0_386x46.png)
</br>原型有两个,第一个原型中的参数card表示一个装备牌的卡牌对象,所以它的作用是判断武将是否装备了指定的装备;而第二个原型就是被我们用来判断装备区是否有牌的了,当它返回false的结果时,表示目标武将没有装备,true则表明TA至少装备了一件装备。
</br>至于判定区,倒是没有这么直接的函数了,不过Player为我们提供了一个可以直接获得判定区所有牌的列表的成员函数`getJudgingArea`,它的原型是这样的:
```
getJudgingArea()
```
![](https://img.kancloud.cn/4c/eb/4cebed277993e76a3c736b60b57013f4_432x24.png)
</br>当它的结果列表里面什么都没有时,我们就可以认为判定区没牌了。
</br>所以,一个成功的引渡,代码方面应该完善成这个模样:
![](https://img.kancloud.cn/5e/01/5e010d1a46782aabfa625515a440739d_764x350.png)
</br>这下就可以放心游戏了……
</br>看好,曹彰没牌了!
![](https://img.kancloud.cn/b7/83/b7830cd2e1061b2bc94fe00b0fb6ed01_165x189.png)
</br>结果却没有询问是否发动引渡,直接结束结算,只因不具备发动条件!
![](https://img.kancloud.cn/27/ea/27eac137be0b96dcbd56e24dc8b7b712_249x115.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 立即胜利