项目概述

这是一个基于 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

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐