Metadata-Version: 2.4
Name: nonebot_plugin_poker
Version: 1.0.1
Summary: 详见https://github.com/MoonofBridge24/nonebot_plugin_poker
Author-email: MoonofBridge24 <moonofbridge24@foxmail.com>
Project-URL: Homepage, https://github.com/MoonofBridge24/nonebot_plugin_poker
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: <4.0,>=3.10
Description-Content-Type: text/markdown
Requires-Dist: nonebot2>=2.3.0
Requires-Dist: nonebot-adapter-onebot>=2.3.0

# 扑克对决

从[小游戏合集](https://github.com/KarisAya/nonebot_plugin_game_collection)中复刻出来的一个小游戏，借用了战斗逻辑，同时使用贴表情代替了按钮（仅保证[NC](https://github.com/NapNeko/NapCatQQ)用户能正常使用按钮）

# 安装

方法一：拉取仓库手动安装

```
git clone https://github.com/MoonofBridge24/nonebot_plugin_poker.git
```

方法二：使用pip或nb安装

```
nb plugins install nonebot_plugin_poker
```

或

```
pip install nonebot_plugin_poke
```

# 规则和玩法

发送 `扑克对决` 命令发起一场对决，发送 `接受` 可以接受群里等待开始的对决(自己接受挑战可以和bot对决)

由于该小游戏需要大量交互，一个群内仅允许同时存在一场对决

游戏开始后，由系统随机选定一名玩家为先手方，后手方获得额外 5 点防御(DEF)，双方初始生命值(HP)为20，初始技能点(SP)为10

牌堆为整副扑克(除去大小王)随机打乱，从先手方开始依次进攻，进攻方抽取三张手牌，从三张手牌中选择一张打出，未打出的牌自动舍弃，防守方无手牌，不能动作

> 如果选择打出点数为ACE(1)的手牌，则发动ACE技能，进行一次六面骰判定，判定结果视为ACE牌点数，将三张手牌都作为技能牌打出

进攻方出牌后，若防守方技能点大于0，则进行一次二十面骰判定，若技能点不小于判定点数，则将牌堆顶的一张牌作为技能牌打出

所有技能牌都会扣除相应点数的技能点

结算时，攻击优先扣除对方防御值，未造成伤害也会消耗吸血附魔，无论是否受到攻击，防守方防御值大于10时，使防御值强制变为10，大于0小于等于10时，自动降低2

如果防守方技能点不小于0，则下一轮攻守交换，如果技能点小于0，触发力竭，跳过行动回合并使技能点回复至5点

防御力可为负值，受到伤害时会额外增加，防御力不为0时会缓慢变为0

每张牌的效果如下

|            | ♠黑桃 | ♥红桃 | ♣梅花 | ♦方片 |
| ---------- | ------ | ------ | ------ | ------ |
| 普通手牌   | 防御   | 回血   | 技能   | 攻击   |
| 进攻技能牌 | 盾击   | 吸血   | 吟唱   | 燃血   |
| 防守技能牌 | 碎甲   | 再生   | 震慑   | 反击   |

<details>
<summary>详细解释</summary>

> 假设牌的点数为 `p`，则按照花色及牌的种类触发效果
>
> 防御：使自己的防御值(DEF)增加 `p`
>
> 回血：使自己的生命值(HP)回复 `p`
>
> 技能：使自己的技能点(SP)增加 `p`，进行一次二十面骰判定，若技能点不小于判定结果，则判定成功，将本回合其他两张手牌作为技能牌打出
>
> 攻击：本回合将对对方发动 `p`点攻击
>
> 盾击：黑桃牌作为进攻技能牌打出时，对对方发动 `p/2`点攻击，令自己防御值增加 `p/2`
>
> 吸血：回复 `p/2`点生命值，并获得吸血附魔(可叠加)，在下次发动攻击时，消耗所有附魔，若使对方生命值减少，则获得对方损失生命值一半的生命值
>
> 吟唱：使自己技能点增加 `p`，并额外打出一张随机技能牌(此牌花色一定不是梅花，点数为4到8之间)
>
> 燃血：使自己生命值降低 `p/2`点，对对方发动 `1.5*p`攻击
>
> 碎甲：使自己防御值提高 `p/2`，若该回合受到伤害，则令对方防御值减少 `p`
>
> 再生：使自己生命值回复 `p/2`，若该回合受到伤害，则额外回复 `p`
>
> 震慑：此技能不消耗技能点，使对方技能点减少 `p`
>
> 反击：对对方发动 `p/2`点攻击，若该回合受到伤害，反伤 `50%`，反伤无视防御

---

</details>

任意一方血量低于 ***0*** 时游戏结束，任意一方血量保持在 ***45*** 以上超过一个回合，且作为防守方结算时血量仍大于 ***45*** ，则该玩家肉身成圣

若牌库已空时胜负未分，则血量高者获胜

# 效果图

<div style="display: flex;">
  <img src="image/1.jpg" alt="示例图片1" width="300" style="margin-right: 10px;">
  <img src="image/2.jpg" alt="示例图片2" width="300" style="margin-right: 10px;">
  <img src="image/3.jpg" alt="示例图片3" width="300">
</div>

# 更新内容

```
v1.0.1 修复了再生和碎甲技能受击判断错误的问题
v1.0.0 lgr.ob无人维护，改为兼容Napcat。
       -“打断”技能改名为“震慑”，实际效果不变。
       -防御力可为负值，受到伤害时会额外增加，防御力不为0时会缓慢变为0

v0.1.10 修复了上个版本可能重复发送的问题
v0.1.9 规范了部分代码格式
v0.1.8 修复已知问题
v0.1.7 检测逻辑更严格，带at的消息仅允许被at的玩家触发，避免误触
v0.1.6 为on_notice添加规则，调用Rule判断是否符合条件
```
