项目概述

这是一个基于 Electron 开发的跨平台扑克牌游戏应用,通过鸿蒙适配改造,已实现对鸿蒙 PC 系统的完美兼容,提供流畅稳定的游戏体验。本项目集成了单人纸牌、战争、拉米等多种经典扑克牌游戏玩法,既适合 Electron 初学者学习跨平台开发,也为 Electron 应用迁移至鸿蒙 PC 提供了完整的适配参考方案。

技术要点

  • Electron 主进程与渲染进程分离:遵循 Electron 安全最佳实践,通过 preload.js 实现进程间通信,适配鸿蒙 PC 进程模型
  • 现代 UI 设计:响应式布局优化,适配鸿蒙 PC 主流屏幕尺寸(13-27 英寸),兼容鸿蒙系统窗口管理规则
  • 模块化代码结构:游戏逻辑、UI 渲染和事件处理分离,预留鸿蒙系统 API 扩展接口
  • 多游戏模式支持:集成多种扑克牌游戏规则,用户可自由选择
  • 游戏状态管理:实现完整的游戏状态跟踪、保存和恢复功能
  • 鸿蒙 PC 适配核心
    • 目录结构适配鸿蒙 HAP 包规范
    • 禁用硬件加速以兼容鸿蒙图形渲染机制
    • 系统能力(SysCap)精简配置,避免兼容性错误
    • 鸿蒙依赖库完整性校验与集成
    • 适配鸿蒙 PC 输入设备交互逻辑(鼠标 / 触控板操作优化)

主要功能

  • 多种游戏模式:单人纸牌、战争、拉米等经典扑克牌游戏
  • AI 对手:内置简单的 AI 逻辑,提供人机对战体验
  • 游戏设置:支持调整难度、音效等游戏参数,适配鸿蒙系统音量控制逻辑
  • 实时游戏状态显示:清晰展示当前游戏进度、得分等信息
  • 动画效果:卡牌发放、翻转等操作带有流畅的 CSS 动画,优化鸿蒙 PC 渲染性能
  • 响应式设计:深度适配鸿蒙 PC 不同屏幕分辨率,支持窗口大小自由调整(符合鸿蒙窗口管理规范)
  • 鸿蒙特性适配
    • 兼容鸿蒙 PC 窗口最小化 / 最大化 / 关闭系统行为
    • 支持鸿蒙系统深色 / 浅色模式自动切换
    • 适配鸿蒙 PC USB 外设扩展(如游戏手柄操作预留)

项目结构

plaintext

ohos_hap/
├── electron/
│   ├── libs/
│   │   └── arm64-v8a/  # 鸿蒙核心依赖库
│   │       ├── libelectron.so
│   │       ├── libadapter.so
│   │       ├── libffmpeg.so
│   │       └── libc++_shared.so
├── web_engine/
│   └── src/
│       └── main/
│           └── resources/
│               └── resfile/
│                   └── resources/
│                       └── app/  # 游戏核心代码目录(原32-card-games目录内容)
│                           ├── main.js              # Electron主进程代码(含鸿蒙适配)
│                           ├── package.json         # 项目配置和依赖
│                           ├── README.md            # 项目说明文档
│                           └── src/                 # 渲染进程代码
│                               ├── preload.js       # 预加载脚本,用于进程间通信
│                               ├── index.html       # 游戏主界面
│                               ├── style.css        # 游戏样式文件
│                               └── renderer.js      # 游戏核心逻辑
└── module.json5        # 鸿蒙应用配置文件(关键)

文件说明

main.js

主进程入口文件,负责创建和管理 Electron 应用窗口,设置应用生命周期事件处理器。核心功能

  • 创建应用窗口,配置窗口大小和属性(适配鸿蒙 PC 窗口默认尺寸)
  • 加载预加载脚本和主 HTML 文件
  • 实现单实例锁定,避免应用多开
  • 管理应用的生命周期(启动、激活、关闭)
  • 鸿蒙适配关键配置

    javascript

    运行

    // 必须添加:禁用硬件加速以兼容鸿蒙PC
    app.disableHardwareAcceleration();
    // 适配鸿蒙窗口行为:设置窗口可调整大小(符合鸿蒙响应式要求)
    mainWindow = new BrowserWindow({
      width: 1200,
      height: 800,
      resizable: true,
      webPreferences: {
        preload: path.join(__dirname, 'src/preload.js'),
        contextIsolation: true,
        nodeIntegration: false
      }
    });
    // 适配鸿蒙系统窗口关闭逻辑
    mainWindow.on('close', (e) => {
      if (gameState.isPlaying) {
        const choice = dialog.showMessageBoxSync({
          type: 'question',
          message: '游戏正在进行中,确定要退出吗?',
          buttons: ['确定', '取消']
        });
        if (choice === 1) e.preventDefault();
      }
    });
    

preload.js

预加载脚本,使用 Electron 的 contextBridge API 安全地暴露主进程功能给渲染进程。核心功能

  • 定义并暴露安全的 API 接口
  • 提供游戏相关的初始化、保存和加载功能
  • 确保渲染进程无法直接访问 Node.js API,提升安全性
  • 鸿蒙适配要点
    • 避免使用鸿蒙不支持的 Node.js 原生模块
    • 进程间通信采用 Electron 标准 IPC,避免依赖系统级通信接口

index.html

游戏主界面,定义了游戏的 DOM 结构和基本布局。核心功能

  • 游戏整体布局(游戏区域、玩家区域、控制按钮等)
  • 游戏控制界面(新游戏、设置、规则等按钮)
  • 模态框(设置、规则说明)
  • 消息提示区域
  • 鸿蒙适配要点
    • 移除对 Windows/macOS 特定控件的依赖,使用跨平台兼容的 DOM 元素
    • 布局单位采用相对单位(rem/vw),适配鸿蒙 PC 不同屏幕尺寸
    • 兼容鸿蒙系统默认字体渲染机制

style.css

游戏样式文件,定义了游戏界面的视觉效果和交互样式。核心功能

  • 响应式布局设计,适配不同屏幕尺寸
  • 卡牌样式(正面、背面、选中效果)
  • 动画效果(发牌、翻牌)
  • 模态框和按钮样式
  • 整体视觉主题和色彩方案
  • 鸿蒙适配优化

    css

    /* 优化鸿蒙PC动画性能,减少重绘 */
    .card-animation {
      transform: translateZ(0);
      backface-visibility: hidden;
      will-change: transform;
      transition: transform 0.3s ease-out; /* 适配鸿蒙系统动画帧率 */
    }
    /* 兼容鸿蒙系统深色模式 */
    @media (prefers-color-scheme: dark) {
      body {
        background-color: #1e1e1e;
        color: #f5f5f5;
      }
      .card {
        box-shadow: 0 2px 8px rgba(255,255,255,0.1);
      }
    }
    /* 适配鸿蒙窗口最小尺寸限制 */
    .game-container {
      min-width: 800px;
      min-height: 600px;
      max-width: 100vw;
      max-height: 100vh;
    }
    

module.json5(新增鸿蒙配置文件)

鸿蒙应用核心配置文件,需放在 ohos_hap 根目录,关键配置如下:

json5

{
  "app": {
    "bundleName": "com.example.cardgame",
    "vendor": "example",
    "versionCode": 10000,
    "versionName": "1.0.0",
    "minAPIVersion": 20
  },
  "module": {
    "name": "cardgame",
    "type": "entry",
    "srcPath": "./web_engine",
    "deviceTypes": ["pc"],
    "reqSysCapabilities": [
      "ohos.permission.INTERNET",
      "ohos.permission.WRITE_USER_STORAGE",
      "ohos.permission.READ_USER_STORAGE"
    ], // 仅保留必要系统能力,避免SysCap不匹配错误
    "abilities": [
      {
        "name": "MainAbility",
        "srcPath": "./src/main/java/com/example/cardgame",
        "icon": "$media:icon",
        "label": "扑克牌游戏",
        "description": "基于Electron的跨平台扑克牌游戏",
        "skills": [
          {
            "entities": ["entity.system.home"],
            "actions": ["action.system.home"]
          }
        ]
      }
    ],
    "distro": {
      "deliveryWithInstall": true,
      "moduleName": "cardgame",
      "moduleType": "entry"
    }
  }
}

鸿蒙适配步骤

1. 环境准备

  • 系统要求:Windows 10/11、8GB RAM 以上、20GB 可用空间
  • 工具安装
    • DevEco Studio 5.0+(安装鸿蒙 SDK API 20+)
    • Node.js 18.x+
    • npm 9.x+

2. 获取 Electron 鸿蒙编译产物

  1. 登录Electron 鸿蒙官方仓库
  2. 下载 Electron 34 + 版本的 Release 包(.zip 格式)
  3. 解压后,将electron/libs/arm64-v8a/目录复制到ohos_hap/electron/libs/下,确保以下核心库文件完整:
    • libelectron.so
    • libadapter.so
    • libffmpeg.so
    • libc++_shared.so

3. 项目迁移与目录调整

  1. 创建ohos_hap根目录,按上述适配后项目结构创建子目录
  2. 将原 32-card-games 项目的所有文件(main.js、package.json、src 等)复制到ohos_hap/web_engine/src/main/resources/resfile/resources/app/目录下
  3. 编辑app/package.json,添加鸿蒙适配依赖配置:

    json

    "scripts": {
      "start": "electron .",
      "dev": "electron . --dev",
      "build:ohos": "echo '请通过DevEco Studio构建鸿蒙HAP包'"
    },
    "engines": {
      "node": ">=18.x",
      "electron": ">=34.x"
    }
    

4. 鸿蒙特定配置

  1. main.js中添加硬件加速禁用代码(关键步骤)
  2. 创建并配置module.json5文件,精简系统能力声明
  3. 优化style.css,适配鸿蒙 PC 的响应式布局和动画渲染
  4. 检查并移除代码中依赖 Windows/macOS 特定 API 的逻辑

5. 编译运行与调试

  1. 打开项目:在 DevEco Studio 中打开ohos_hap目录
  2. 配置签名
    • 进入 File → Project Structure → Signing Configs
    • 自动生成调试签名或导入已有签名
  3. 连接设备
    • 启用鸿蒙 PC 开发者模式和 USB 调试
    • 通过 USB Type-C 连接开发电脑
  4. 编译运行:点击 Run 按钮或按 Shift+F10
  5. 调试技巧
    • 在 DevEco Studio 的 Log 面板中过滤 "Electron" 关键词,查看运行日志
    • 针对鸿蒙特有错误,优先检查.so 库完整性和 module.json5 配置

鸿蒙适配验证检查项

  • ✅ 应用成功安装并启动,无启动崩溃
  • ✅ 游戏窗口正常显示,支持鸿蒙系统窗口操作(移动、缩放、最小化 / 最大化)
  • ✅ 响应式布局生效,适配鸿蒙 PC 不同屏幕分辨率
  • ✅ 卡牌动画流畅,无卡顿或闪烁现象
  • ✅ 游戏功能完整可用(发牌、出牌、AI 对战、胜负判定等)
  • ✅ 控制台无 "SysCap 不匹配" 或 "找不到.so 文件" 错误
  • ✅ 兼容鸿蒙系统深色 / 浅色模式切换
  • ✅ 游戏状态保存 / 恢复功能正常
  • ✅ 无内存泄漏或高 CPU 占用问题

常见问题与解决方案

问题现象解决方案
启动报错 "SysCap 不匹配"检查 module.json5 中的 reqSysCapabilities,仅保留必要权限(如存储、网络),移除多余系统能力
找不到.so 文件确认 arm64-v8a 目录下四个核心库文件完整,路径符合electron/libs/arm64-v8a/规范
窗口不显示或黑屏1. 确保 main.js 中已添加 app.disableHardwareAcceleration ();2. 检查窗口尺寸配置,避免超出屏幕范围
动画卡顿1. 简化 CSS 动画效果,减少同时动画的卡牌数量;2. 优化 renderer.js 中的渲染逻辑,减少重绘次数
无法保存游戏进度检查 module.json5 中是否添加存储权限(ohos.permission.WRITE_USER_STORAGE/READ_USER_STORAGE)
应用闪退1. 检查 Electron 版本是否为 34+;2. 确认鸿蒙 SDK API 版本≥20;3. 查看 DevEco Studio 日志,定位崩溃原因

跨平台兼容性

平台适配策略特殊处理
Windows标准 Electron 运行无特殊配置
macOS标准 Electron 运行保留 dock 图标激活逻辑
Linux标准 Electron 运行确保系统依赖库完整
鸿蒙 PC通过 Electron 鸿蒙适配层1. 禁用硬件加速;2. 采用鸿蒙规范目录结构;3. 精简系统能力配置;4. 优化动画渲染性能

开发环境配置

基础依赖安装

bash

运行

# 进入app目录(ohos_hap/web_engine/src/main/resources/resfile/resources/app/)
npm install

本地开发(非鸿蒙环境)

bash

运行

npm start  # 启动应用
npm run dev  # 开发模式

鸿蒙环境构建与运行

  1. 按上述适配步骤完成配置
  2. 通过 DevEco Studio 构建 HAP 包
  3. 部署到鸿蒙 PC 设备运行测试

技术栈

  • 核心框架:Electron 34+
  • 前端技术:HTML5/CSS3/JavaScript
  • 运行环境:Node.js 18.x+
  • 鸿蒙适配工具:DevEco Studio 5.0+、鸿蒙 SDK API 20+
  • 构建工具:npm、DevEco Studio 构建系统

总结

本项目不仅为 Electron 初学者提供了完整的游戏开发示例,还新增了详细的鸿蒙 PC 适配方案,通过学习本项目,您可以同时掌握 Electron 桌面应用开发和跨平台(含鸿蒙 PC)迁移的实践经验,快速理解 Electron 项目适配鸿蒙系统的核心流程和关键技术点。

欢迎加入开源鸿蒙PC社区:https://harmonypc.csdn.net/

Logo

赋能鸿蒙PC开发者,共建全场景原生生态,共享一次开发多端部署创新价值。

更多推荐