# hearthstone
**Repository Path**: dingren510/hearthstone
## Basic Information
- **Project Name**: hearthstone
- **Description**: 炉石传说,JAVA模拟器(HearthStone Simulator for Java)
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 65
- **Created**: 2020-06-09
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Java - 炉石传说
## 这是什么
这是用Java语言实现的游戏--炉石传说
- 实现了什么功能
- [ ] 炉石传说
- [ ] 主要组件
- [x] 随从
- [x] 英雄
- [x] 武器
- [x] 奥秘
- [ ] 任务
- [ ] 卡牌关键效果
- [x] 随从特效
- [x] 战吼
- [x] 亡语
- [ ] 其他卡牌效果
- [ ] 卡牌
- [ ] 基础包
- [ ] 经典包
- [ ] 荣誉室
- [ ] 其他扩展包
- [ ] AI
- [x] QQ群对战
- [ ] 酒馆战棋
- 效果图





## 包含组件
| 模块 | 介绍 | 功能描述 |
| ------------- | ------- | --------------------- |
| hearth-core | 核心模块 | 整个游戏的架构,接口 |
| hearth-card | 卡牌模块 | 游戏的卡牌各种具体实现 |
| hearth-control | 控制器模块 | 游戏的测试启动和控制器,目前只能以文字的交互形式启动 |
| card-generator | 卡牌生成器 | 从暴雪的卡牌数据库中生成对应的java类 |
## 快速开始
- 克隆项目
- 编译
- 使用maven工具 install核心模块【hearth-core】
- 在【card-generator】模块中运行cn/eiden/hsm/util/XmlUtil.java
- 使用maven工具 install全部模块【hearth】
- 运行
- 项目的测试运行全部都在【hearth-control】模块中
- java控制台运行
- 运行cn/eiden/hsm/cockpit/console/ConsoleCockpit.java
- QQ运行
- qq模块使用http插件,系统中使用的是酷Q
- 安装配置酷Q
- 运行cn/eiden/hsm/cockpit/coolq/HearthApplication.java
- 微信运行(未实装)
#### 安装和配置酷Q
#### 1. 下载 [酷Q](https://cqp.cc/)... (如果有 酷Q Pro 的话效果更好哦!)
下载完后解压到你想安装的目录下
首次启动请运行 `cqa.exe` 或 `cqp.exe`, 并登陆机器人的 QQ 号
然后退出 酷Q (右键悬浮窗点退出)
#### 2. 添加 [酷Q HTTP 插件](https://cqp.cc/t/30748):
把 `.cpk` 文件下载下来, 放进 `酷Q安装目录\app` 文件夹里
启动 酷Q
右键悬浮窗, 然后点击 `应用 -> 应用管理`
列表里现在应该有 `[未启用] HTTP API`, 点击它, 点击启用
启用的时候会提示需要一些敏感权限, 选择继续
启用之后在 `酷Q安装目录\app` 文件夹里会出现 `io.github.richardchien.coolqhttpapi` 文件夹
退出 酷Q
#### 3. 配置 酷Q HTTP 插件:
在 `io.github.richardchien.coolqhttpapi` 文件夹里创建一个文件名为 `config.cfg` 的配置文件
并在其中写入以下代码
```
[general]
host=0.0.0.0
port=接收端口
post_url=http://127.0.0.1:发送端口
enable_backward_compatibility=false
```
把发送端口和接收端口改成你的机器人程序里用的端口 (测试机器人的接收为`31091`, 发送`31092`)
注意: 酷Q 配置里的`发送端口`要和传进 Picq 的`接收端口`一样, 然后 Picq 的`发送端口`也要和 酷Q 的`接收端口`一样!
( 这是因为 酷Q 需要发送到 Picq 的接收端口去, 而不是发送到对方的发送端口ww )
如果 酷Q 要和你的机器人程序分开运行的话, 请把`127.0.0.1`改成你的机器人部署的服务器的地址
保存配置文件
#### 4. 配置完成! 启动 酷Q!
## 如何扩展添加新的卡牌
### 为什么要添加卡牌
- 炉石传说运营了6年,19+1个卡牌扩展包,卡牌数量太多
- 本项目从卡牌数据源能生成全部的牌面信息(费用,稀有度,职业,攻击力,生命值等静态信息)
- 作者将会从底层实现全部的游戏功能,并且至少每一种效果的卡牌会写出至少一个示例卡牌,其他的卡牌效果需要被仿写
- 希望喜欢炉石传说和Java的朋友和我一起为本项目贡献卡牌
### 有哪些卡牌需要被添加
- 大多数白板随从,武器(无描述的卡牌)无需手动添加
- 只有关键字描述的随从(比如[圣盾] [嘲讽] [冲锋]等)无需手动添加
- 关键字配合文字描述的卡牌(比如 战吼:从你的牌库中抽一张奥秘牌。)
- 全部的法术牌
- 其他牌面带有描述的卡牌
### 如何添加卡牌
> 在【hearth-card】模块中使用搜索功能找到你要实现的卡牌 (例如,我想实现卡牌【阿莱克丝塔萨】)
> 如果存在多个结果,则选择对应拓展包内的卡牌类(【阿莱克丝塔萨】在经典包,经典包的包名为【expert1】)
> 复制这个类,在cn/eiden/hsm/game/card目录中找到对应的扩展包和职业(【阿莱克丝塔萨】是经典包的中立随从对应的包名为【classic.neutral】)
> 在这个包中创建一个新类继承自上一步的类,新的类名一般在前面得类后面加Card
```java
public class AlexstraszaCard extends Alexstrasza {
}
```
> 如果这张卡牌在打出时需要选择目标(炉石传说中的卡牌只有选择一个目标和不需要选择目标两种)则需要在类头加入注解@TargetScope
>> 需要注意的是,有些卡牌可以选择全部目标(敌/我)(随从/英雄) 如[火球术][1]
>> 有些卡牌则只能选择敌方目标,如[横扫][2]
>> 示例中只能以双方英雄为目标则给注解添加以下属性
>> 灵活使用TargetScope注解
```java
@TargetScope(classScope = HeroMinion.class)
public class AlexstraszaCard extends Alexstrasza {
}
```
> 战吼随从重写selfBattleCry方法,返回一个战吼接口的实现
```java
@TargetScope(classScope = HeroMinion.class)
public class AlexstraszaCard extends Alexstrasza {
/**
* "战吼:\n"
* + "将一方英雄的剩余生命值变为15。"
*/
@Override
protected Battle selfBattleCry() {
return (e,t) -> t.setHealth(15);
}
}
```
> 完成!一张新的卡牌特效成功实现
> 其他卡牌则参考项目中已经实现的其他卡牌
#### 附录
- [ ] 卡牌关键效果及其部分demo示例(已经实现但没有示例的为自动生成,无需重写)
- [x] 随从特效
暴乱狂战士
恐怖的奴隶主
- [x] 战吼
秘法学家
麦迪文的男仆
肯瑞托法师
- [x] 亡语
疯狂的科学家
麻风侏儒
- [x] 嘲讽
- [x] 冲锋
- [x] 法强
- [x] 光环
南海船长
- [x] 风怒
- [x] 圣盾
- [x] 潜行
- [x] 剧毒
- [x] 沉默
- [x] 冻结
霜冻射线
- [x] 抉择
利爪德鲁伊
愤怒
- [x] 连击
军情七处特工
刺骨
- [x] 过载
- [x] 随机卡牌
- [x] 发现
金甲虫
复苏
- [x] 吸血
- [ ] 进化
- [x] 突袭
- [ ] 招募
- [ ] 回响
- [ ] 磁力
- [ ] 超杀
- [x] 免疫
- [ ] 休眠
- [ ] 流放
- [ ] 卡牌包
- [ ] 基础包 CORE
- [ ] 经典包 CLASSIC
- [ ] 荣誉室 HOF
- [ ] 纳克萨玛斯 NAXX
- [ ] 地精大战侏儒 GVG
- [ ] 黑石山的火焰 BRM
- [ ] 冠军的试炼 TGT
- [ ] 探险者协会 LOE
- [ ] 上古之神的低语 OG
- [ ] 卡拉赞之夜 KAR
- [ ] 龙争虎斗加基森 CFM GANGS
- [ ] 勇闯安戈洛 UNG
- [ ] 冰封王座的骑士 ICC
- [ ] 狗头人与地下世界 LOOT
- [ ] 女巫森林 GIL
- [ ] 砰砰计划 BOT
- [ ] 拉斯塔哈的大乱斗 TRL
- [ ] 暗影崛起 DAL
- [ ] 奥丹姆奇兵 ULD
- [ ] 巨龙降临 DRG
- [ ] 迦拉克隆的觉醒 YOD
- [ ] 外域的灰烬 BT
### 交流群 :649207014
[1]: hearth-card/src/main/java/cn/eiden/hsm/game/card/base/mage/FireballCard.java
[2]: hearth-card/src/main/java/cn/eiden/hsm/game/card/base/druid/SwipeCard.java