bocchi_house:基于 HarmonyOS NEXT 的游戏移植与启动平台项目

用户可通过该项目在 HarmonyOS NEXT 设备上启动已移植的经典游戏,如仙剑奇侠传等。它作为统一游戏入口,采用分层架构设计,封装 Vulkan 和鸿蒙原生 API,提供跨平台运行能力,支持多种输入与渲染方式。【此简介由AI生成】

分支1Tags0
文件最后提交记录最后更新时间
2 个月前
12 天前
17 天前
2 个月前
26 天前
1 个月前
1 个月前
26 天前
1 个月前
2 个月前
2 个月前
1 个月前
17 天前
2 个月前
2 个月前
2 个月前
1 个月前
1 个月前
2 个月前

Bocchi House

基于 HarmonyOS NEXT 的游戏移植与启动平台

Contributors License Stars


Bocchi House

一个用于启动各个移植游戏的平台应用
探索项目架构文档 »

查看游戏 · 报告Bug · 提出新特性

本篇 README.md 面向开发者。

目录


项目简介

Bocchi House 是一个运行在 HarmonyOS NEXT 平台上的游戏引擎适配层,旨在将经典游戏(如 Paladin、Unholy Heights)移植到鸿蒙平台。它提供了一套从底层 Vulkan 封装到上层 2D 渲染引擎的完整图形管线。

当前规划移植的游戏:

  • Paladin (仙剑奇侠传) — 经典中文 RPG,原作为 C 语言编写,由社区大佬移植为 C++ 版本 (pal_harmony)
  • Unholy Heights (房东是魔王大人) — 魔物公寓经营模拟 + 塔防,原作为 C# XNA 4.0

项目采用分层架构设计:底层通过 platform_abstraction 封装 Vulkan 和鸿蒙原生 API,中间层通过 graphics_adapter 提供 2D 渲染引擎(SpriteBatch、纹理管理、字体渲染),上层游戏模块调用这些接口实现跨平台运行。

技术栈:ArkTS + C++ (NAPI) + Vulkan + HarmonyOS SDK 6.1.0

上手指南

开发前的配置要求

  1. DevEco Studio NEXT 版本 (支持 API 13)
  2. HarmonyOS SDK 6.1.0(23) 及以上
  3. CMake 3.5.0 及以上 (通常随 DevEco Studio 内置)
  4. 一台搭载 HarmonyOS NEXT 的真机或模拟器 (手机/平板/2in1)

安装步骤

  1. 克隆项目仓库(含子模块)
git clone --recurse-submodules https://gitcode.com/roger_bh/bocchi_house.git

若已克隆过旧版本,请补拉子模块:

git submodule update --init --recursive
  1. 使用 DevEco Studio 打开项目根目录,等待依赖同步完成

  2. 在运行配置中选择入口模块:

    • mobile — 手机/平板设备
    • laptop — 2in1 设备
  3. 连接设备,点击 Run 编译安装启动器

  4. 在启动器首页选择要启动的游戏

文件目录说明

bocchi_house/
├── AppScope/                           # 应用级配置 (bundleName, 图标, 版本)
│   └── app.json5
│
├── products/                           # 产品层 — 启动器入口 (HAP)
│   ├── mobile/                         # 手机/平板入口
│   └── laptop/                         # 2in1 入口
│
├── game_sources/                       # 游戏层 — 各游戏模块 (Feature HAP)
│   ├── paladin/                        # 仙剑奇侠传 (C++ 移植,骨架)
│   └── unholy_heights/                 # 房东是魔王大人 (C++ 移植,测试页)
│
├── features/                           # 适配层 — 引擎级封装 (HAR)
│   ├── game_framework/                  # 游戏框架 — 生命周期桥接 + 窗口控制
│   │   ├── src/main/ets/common/        #   BaseGameAbility 模板
│   │   ├── src/main/cpp/include/       #   BHFrameworkCore 核心编排器
│   │   └── src/main/cpp/types/         #   NAPI d.ts 接口声明
│   ├── graphics_adapter/               # 图形适配器 — 核心渲染引擎
│   │   ├── src/main/ets/screens/       #   GameScreen ArkTS 组件
│   │   ├── src/main/cpp/include/engine/#   BHGraphicsCore 渲染编排器
│   │   ├── src/main/cpp/include/gfx/   #   渲染器/精灵批处理/纹理/字体
│   │   ├── src/main/cpp/include/render/#   BHRender(HelloVK 模式)
│   │   └── src/main/cpp/source/        #   C++ 实现
│   ├── audio_adapter/                  # 音频适配器 (框架)
│   └── input_adapter/                  # 输入适配器 (框架)
│
├── engine/                             # 引擎层 — 引擎模块 (HAR)
│   ├── monogame_framework/             # MonoGame (XNA) 引擎 C++ 移植(git submodule)
│   └── monogame_content_pipeline/      # 内容管线工具
│
├── common/                             # 公共层 — 底层平台封装 (HAR)
│   └── platform_abstraction/           # 窗口管理 + 原生节点 + Vulkan RAII + 日志
│       ├── include/bh_window/          #   BHWindowManager 窗口控制
│       ├── include/node_content/       #   NodeContentHandleTool 节点管理
│       ├── include/system/             #   日志宏 (bh_log)
│       └── include/vulkan/             #   Vulkan RAII 基础封装(12 类)
│
├── build-profile.json5                 # 构建配置 (模块注册, SDK 版本)
├── oh-package.json5                    # 根依赖声明
├── README.md                           # 本文件
├── ARCHITECTURE.md                     # 详细架构设计文档
├── paths.cmake                         # CMake 全局路径变量
└── bocchi_house_session_export.md      # 会话交接文档

架构说明

本项目采用四层分层架构,从底层到顶层依次为:

products (启动器)
    │ startAbility()
    ▼
game_sources (游戏)  ←── 调用 ──►  features/adapters (图形/音频/输入)
    │                                   │ 调用
    ├── 生命周期事件                    │
    ▼                                   ▼
features/game_framework              common (平台封装)
    │ 转发事件                          │ 封装
    ▼                                   ▼
features/adapters                   HarmonyOS / Vulkan

各层职责

模块 职责
启动器 products/laptop, products/mobile 游戏列表 + startAbility() 启动游戏
游戏 game_sources/paladin, game_sources/unholy_heights 游戏核心逻辑
生命周期桥接 features/game_framework BHFrameworkCore 单例:接收 ArkTS Ability 生命周期事件(onCreate/onDestroy/onBackground/onForeground),统一转发给各 adapter;管理 App 级窗口控制(窗口装饰/拖拽)
游戏框架 features/game_framework Game 类(XNA 风格 Initialize/LoadContent/Update/Draw)、ScreenManager(屏幕堆栈)、GameScreen(屏幕基类)、GameTime(帧时间)
适配层 features/graphics_adapter VulkanRenderer 编排器(真机验证 ~30fps)、SpriteBatch 2D 渲染、TextureManager 纹理加载、SpriteFont 字体渲染
适配层 features/audio_adapter AudioCore BGM/SE 播放 + 音量控制(框架设计完成,待实现)
适配层 features/input_adapter InputState(last/current 双缓冲模式 + IsKeyDown/IsKeyPressed/鼠标查询)(框架设计完成,待实现)
平台封装 common/platform_abstraction Vulkan RAII 封装(12 个类)、窗口管理(BHWindowManager)、节点内容管理(NodeContentHandleTool)、日志(bh_log

生命周期事件流

ArkTS Ability 生命周期
    │
    ▼
game_framework (BHFrameworkCore)
    │ OnCreate(rm) / OnDestroy() / OnBackground() / OnForeground()
    │
    └──→ Game::Run()
           ├─ Game::LoadContent()         ← 加载纹理/音频
           ├─ [帧循环]                     ← 驱动 ScreenManager
           │    ├─ InputState::BeginFrame()
           │    ├─ Game::Update(time)
           │    │    └─ ScreenManager::Update(time) + HandleInput(input)
           │    ├─ Game::Draw(time)
           │    │    └─ ScreenManager::Draw(time)
           │    │         └─ SpriteBatch + TextureManager
           │    └─ InputState::EndFrame()
           └─ Game::UnloadContent()       ← 清理资源

Vulkan 初始化序列(已验证)

VulkanInstance::Create()     → VkInstance (API 1.3 降级支持)
VulkanSurface::Create()      → VkSurfaceKHR (vkCreateSurfaceOHOS)
VulkanDevice::Create()       → VkDevice + Queue (GPU: Maleoon 916)
VulkanSwapchain::Create()    → VkSwapchainKHR + ImageViews
VulkanCommand::Create()      → CommandPool + CommandBuffer[]
VulkanSync::Create()         → Semaphore[] + Fence[]
VulkanRenderPass::Create()   → RenderPass + Framebuffer[]

游戏列表

游戏 原作 原始语言 移植语言 渲染方式 状态
Paladin (仙剑奇侠传) SDLPal / pal_harmony C C++ CPU 软件渲染 (320x200) 规划中
Unholy Heights (房东是魔王大人) Petit Depotto C# (XNA 4.0) C++ Vulkan GPU 2D 精灵 移植中

当前进度

更新时间: 2026-08-12(基于代码检阅,README 与代码保持同步)

已完成

  • game_framework 生命周期桥接层BHFrameworkCore + NapiBridge 拆分(NAPI 静态方法 / 实例方法分离);注册 15+ NAPI 接口(create / destroy / onBackground / onForeground / 窗口控制 9 个 / 帧生成 2 个)
  • 窗口控制BHWindowManager 封装 WindowInfo 结构体(window_id / env / window_ref),SetDecorVisible / SetResizeByDrag 已实现 napi 调用;P1 扩展(SetFullScreen / Minimize 等 6 个)占位
  • Vulkan RAII 封装(12 个类):Instance / Surface / Device / Swapchain / Command / Sync / RenderPass / Shader / Pipeline / Buffer / Image / Descriptor
  • BHNodeContentTool 完整实现Bind(handle, tag) → NodeContent 回调(SetUserData 存 this+tag)→ ON_ATTACH_TO_WINDOWCreateXComponent(SurfaceHolder + Surface 回调注册);Surface 回调通过 SetUserData(holder, this) 取回实例 → OnSurfaceCreated / OnSurfaceChanged / OnSurfaceDestroyed 实例方法分发
  • graphics_adapter 结构对齐 game_frameworkbridge/ 目录 + GraphicsBridge 类(NAPI 参数解析 → 转发 BHGraphicsCore);engine/ 目录 + BHGraphicsCore 编排器(BindMainContentHandle / InitRender);BHRenderSetupVKContext(window) 骨架,参照 HelloVK + EGLRender 设计)
  • platform_abstraction 重构common/types/ 目录重命名;bh_window/window/node_content/BHNodeContentTool 替代旧的 NodeContentHandleTool
  • Laptop 启动器 UI:Navigation 组件 + expandSafeArea 沉浸式 + Swiper 轮播推荐 + 游戏卡片列表(纯 UI,业务逻辑待接入)
  • 命名规范 + 移植方案docs/NAMING_CONVENTIONS.mddocs/PORTING_PLAN.mddocs/GAME_ENGINE_ARCHITECTURE.md

进行中

  • 🔄 BHRender 实现SetupVKContext(window)CreateInstance(API 版本降级支持)+ CreateSurface(OHOS)+ PickPhysicalDevice(独显评分择优)+ CreateLogicalDeviceAndQueue(float16Int8/shaderInt16/samplerAnisotropy 启用);FindQueueFamilies + CheckDeviceExtensionSupport + QuerySwapchainSupport 设备检测链已完成
  • 🔄 BHGraphicsCore::InitRender:创建 BHRender 实例 + 启动渲染线程(待 BHRender 实现后接线)
  • 🔄 SpriteBatch 完整管线:着色器/顶点缓冲已建,Flush 未实现
  • 🔄 TextureManager:VkImage/View/Sampler 已建,staging upload 未实现
  • 🔄 SpriteFont:DrawString 已实现,依赖 SpriteBatch::Flush

待实现

  • namespace 迁移PlatformAbstractionbh::platformGraphicsAdapterbh::gfxBH::Frameworkbh::framework(参考 docs/NAMING_CONVENTIONS.md 迁移路线图)
  • InputAdapter:仅 NAPI 模板占位(input_state.hpp 无实现)
  • AudioAdapter:仅 NAPI 模板占位
  • Mobile 启动器 UI:当前为 Hello World 模板页
  • Paladin 集成 GameScreen:当前为 @Component V1 模板页,未集成渲染组件
  • Paladin 游戏移植:~27000 行 C++ 代码适配
  • Unholy Heights 游戏移植:C# → C++ 翻译(页面已集成 GameScreen)

部署

暂无。项目尚处于开发阶段。

使用到的技术与框架

贡献者

请阅读 CONTRIBUTING.md 查阅为该项目做出贡献的开发者。

如何参与开源项目

贡献使开源社区成为一个学习、激励和创造的绝佳场所。你所作的任何贡献都是非常感谢的。

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

版本控制

该项目使用 Git 进行版本管理。您可以在 repository 参看当前可用版本。

作者

FunBocchi

您也可以在贡献者名单中参看所有参与该项目的开发者。

版权说明

该项目签署了 Apache-2.0 授权许可,详情请参阅 LICENSE

各移植游戏的版权归原作者所有,本项目仅用于技术交流与学习。

鸣谢

  • pal_harmony — 鸿蒙版仙剑移植项目,为本项目的 Paladin 模块提供了重要参考
  • SDLPal — 仙剑奇侠传跨平台重制引擎
  • HarmonyOS Codelabs — 鸿蒙官方示例代码
    • XEngine-Codelab-VulkanDemo — Vulkan 渲染参考
    • FrameGenerationVulkan — Vulkan 帧生成参考
  • Img Shields — README 徽章
  • Choose an Open Source License — 开源协议选择

项目介绍

用户可通过该项目在 HarmonyOS NEXT 设备上启动已移植的经典游戏,如仙剑奇侠传等。它作为统一游戏入口,采用分层架构设计,封装 Vulkan 和鸿蒙原生 API,提供跨平台运行能力,支持多种输入与渲染方式。【此简介由AI生成】

定制我的领域