Score
0
Watch 11 Star 116 Fork 22

Eiden / hearthstoneJavaMIT

Create your Gitee Account
Explore and code with more than 5 million developers,Free private repositories !:)
Sign up
炉石传说,JAVA模拟器(HearthStone Simulator for Java) spread retract

Clone or download
Loading...
README.md

Java - 炉石传说

这是什么

这是用Java语言实现的游戏--炉石传说

  • 实现了什么功能

    • 炉石传说
      • 主要组件
        • 随从
        • 英雄
        • 武器
        • 奥秘
        • 任务
      • 卡牌机制
      • 卡牌
      • AI
      • QQ群对战
    • 酒馆战棋
  • 效果图

alt 开始

alt 选择套牌

alt 出牌

alt 战场

alt 战场2

包含组件

模块 介绍 功能描述
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
      • 配置cn.eiden.hsm.cockpit.mirai.MiraiApplication中的机器人账号和密码
      • 运行MiraiApplication的main方法
    • 微信运行(未实装)

安装和配置酷Q

1. 下载 酷Q... (如果有 酷Q Pro 的话效果更好哦!)

下载完后解压到你想安装的目录下
首次启动请运行 cqa.execqp.exe, 并登陆机器人的 QQ 号
然后退出 酷Q (右键悬浮窗点退出)

2. 添加 酷Q HTTP 插件:

.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

public class AlexstraszaCard extends Alexstrasza {
}

如果这张卡牌在打出时需要选择目标(炉石传说中的卡牌只有选择一个目标和不需要选择目标两种)则需要在类头加入注解@TargetScope

需要注意的是,有些卡牌可以选择全部目标(敌/我)(随从/英雄) 如火球术
有些卡牌则只能选择敌方目标,如横扫
示例中只能以双方英雄为目标则给注解添加以下属性
灵活使用TargetScope注解

@TargetScope(classScope = HeroMinion.class)
public class AlexstraszaCard extends Alexstrasza {
}

战吼随从重写selfBattleCry方法,返回一个战吼接口的实现

@TargetScope(classScope = HeroMinion.class)
public class AlexstraszaCard extends Alexstrasza {
    /**
     * "<b>战吼:</b>\n"
     * + "将一方英雄的剩余生命值变为15。"
     */
    @Override
    protected Battle selfBattleCry() {
        return (e,t) -> t.setHealth(15);
    }
}

完成!一张新的卡牌特效成功实现
其他卡牌则参考项目中已经实现的其他卡牌

附录

  • 卡牌包
    • 基础包 CORE
    • 经典包 CLASSIC
    • 荣誉室 HOF
    • 纳克萨玛斯 NAXX
    • 地精大战侏儒 GVG
    • 黑石山的火焰 BRM
    • 冠军的试炼 TGT
    • 探险者协会 LOE
    • 上古之神的低语 OG
    • 卡拉赞之夜 KAR
    • 龙争虎斗加基森 CFM GANGS
    • 勇闯安戈洛 UNG
    • 冰封王座的骑士 ICC
    • 狗头人与地下世界 LOOT
    • 女巫森林 GIL
    • 砰砰计划 BOT
    • 拉斯塔哈的大乱斗 TRL
    • 暗影崛起 DAL
    • 奥丹姆奇兵 ULD
    • 巨龙降临 DRG
    • 迦拉克隆的觉醒 YOD
    • 外域的灰烬 BT

交流群 :649207014

Comments ( 28 )

Sign in for post a comment