项目概述

这是一个基于 Electron 开发的经典老虎机桌面游戏应用,实现了转盘动画、中奖判定、分数记录等核心玩法,是 Electron 桌面应用开发与游戏动画实现的优质学习案例。本项目不仅支持 Windows/macOS/Linux 跨平台运行,还已完成鸿蒙 PC 系统适配改造,通过 Electron 鸿蒙适配层实现游戏在鸿蒙生态的稳定兼容,同时保留原游戏核心体验,为开发者提供 Electron 项目迁移至鸿蒙 PC 的完整实践参考。

功能特点

  • 完整的老虎机游戏逻辑:随机转盘、中奖判定、分数计算与展示
  • 流畅的转盘旋转动画效果,支持鸿蒙 PC 环境优化
  • 简洁直观的用户界面,适配鸿蒙 PC 响应式布局
  • 支持鼠标点击操作,跨平台交互一致性保障
  • 鸿蒙 PC 专属优化:窗口适配、硬件加速禁用、动画卡顿修复
  • 完善的跨平台兼容性:Windows/macOS/Linux/ 鸿蒙 PC 多端运行

目录结构

1. 原 Electron 项目目录结构

plaintext

electron-examples/41-slot-machine/
├── main.js           # Electron主进程文件
├── package.json      # 项目配置和依赖管理
├── src/              # 源代码目录
│   ├── index.html    # 主页面
│   ├── renderer.js   # 渲染进程逻辑
│   ├── style.css     # 样式文件
│   └── assets/       # 游戏资源文件(图片、音效等)
└── README.md         # 项目说明文档

2. 鸿蒙 PC 适配后目录结构

plaintext

ohos_hap/
├── electron/
│   ├── libs/
│   │   └── arm64-v8a/  # 鸿蒙PC核心依赖库
│   │       ├── libelectron.so    # Electron鸿蒙适配核心库
│   │       ├── libadapter.so     # 鸿蒙适配层库
│   │       ├── libffmpeg.so      # 音视频处理库
│   │       └── libc++_shared.so  # C++共享库
├── web_engine/
│   └── src/
│       └── main/
│           └── resources/
│               └── resfile/
│                   └── resources/
│                       └── app/  # 41-slot-machine核心代码部署目录
│                           ├── main.js           # 适配后主进程文件
│                           ├── package.json      # 项目配置(保持原依赖)
│                           └── src/
│                               ├── index.html    # 主页面(响应式适配)
│                               ├── renderer.js   # 渲染进程逻辑(无改动)
│                               ├── style.css     # 优化后样式文件(动画适配)
│                               └── assets/       # 游戏资源文件(路径适配)
└── module.json5        # 鸿蒙PC应用配置文件(系统能力、签名等)

技术栈与依赖

1. 基础技术栈(原 Electron 项目)

  • Electron: 跨平台桌面应用开发框架(推荐 34 + 版本,兼容鸿蒙 PC)
  • HTML5/CSS3: 页面结构和基础样式
  • JavaScript: 游戏核心逻辑实现
  • CSS Animations: 转盘旋转动画效果

2. 鸿蒙 PC 适配新增技术栈

  • 开发工具: DevEco Studio 5.0+(含鸿蒙 SDK API 20+)
  • 运行环境: Node.js 18.x+
  • 适配依赖: Electron 34 + 鸿蒙兼容版(含核心.so 库)
  • 构建工具: 鸿蒙 HAP 打包工具(集成于 DevEco Studio)

核心功能模块(含鸿蒙 PC 适配优化)

1. 游戏初始化

  • 界面元素初始化(保持原逻辑)
  • 游戏状态管理(分数、转盘状态等)
  • 资源加载(适配鸿蒙 PC 目录路径,确保 assets 资源正常加载)
  • 鸿蒙 PC 专属优化: 初始化时禁用硬件加速,避免窗口不显示问题

    javascript

    运行

    // main.js中新增
    app.disableHardwareAcceleration();
    

2. 转盘逻辑

  • 随机数生成(保持原算法)
  • 转盘旋转动画控制(鸿蒙 PC 端简化关键帧,减少重绘)
  • 停止位置计算(无适配改动)

3. 奖励系统

  • 中奖模式定义(保持原规则)
  • 奖励判定算法(无适配改动)
  • 分数更新和显示(适配鸿蒙 PC 窗口响应式布局,确保分数显示不偏移)

4. 用户交互

  • 开始 / 停止按钮功能(保持原逻辑)
  • 动画状态控制(鸿蒙 PC 端优化状态同步,避免卡顿)
  • 结果展示(适配鸿蒙 PC 窗口大小调整,确保结果弹窗居中)

5. 鸿蒙 PC 适配专项优化

  • 响应式布局适配:确保窗口缩放时转盘、按钮、分数显示正常
  • 动画性能优化:简化 style.css 中的旋转动画,减少 CPU 占用
  • 系统能力精简:module.json5 中仅保留必要系统能力,避免 "SysCap 不匹配" 错误

关键代码解析(含鸿蒙 PC 适配修改)

1. 主进程实现 (main.js)

原主进程负责创建窗口、管理生命周期,鸿蒙 PC 适配需新增 2 处关键修改:

javascript

运行

const { app, BrowserWindow } = require('electron');
const path = require('path');

// 鸿蒙PC适配:禁用硬件加速(必须添加)
app.disableHardwareAcceleration();

function createWindow() {
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'src/preload.js'), // 若有preload文件需配置
      nodeIntegration: true,
      contextIsolation: false
    }
  });

  // 加载游戏主页面(适配鸿蒙PC目录路径)
  mainWindow.loadFile(path.join(__dirname, 'src/index.html'));

  // 可选:打开开发者工具(鸿蒙PC调试用)
  // mainWindow.webContents.openDevTools();
}

app.whenReady().then(() => {
  createWindow();

  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') app.quit();
});

2. 样式实现 (style.css)

鸿蒙 PC 端动画优化,简化转盘旋转动画,减少重绘频率:

css

/* 原转盘旋转动画(保留用于Windows/macOS/Linux) */
.reel-spin {
  animation: spin 0.2s linear infinite;
}

/* 鸿蒙PC优化版动画(减少关键帧,降低卡顿) */
@media (prefers-os: harmonyos) {
  .reel-spin {
    animation: spin-harmony 0.3s linear infinite;
    transform: translateZ(0); /* 启用GPU加速,平衡性能 */
  }
}

@keyframes spin {
  from { transform: translateY(0); }
  to { transform: translateY(-1000px); }
}

/* 鸿蒙PC简化动画:减少位移跨度,降低重绘压力 */
@keyframes spin-harmony {
  from { transform: translateY(0); }
  to { transform: translateY(-800px); }
}

/* 响应式布局适配:确保鸿蒙PC窗口缩放时元素正常显示 */
.container {
  width: 100%;
  max-width: 700px;
  margin: 0 auto;
  padding: 20px;
  box-sizing: border-box;
}

3. 鸿蒙配置文件 (module.json5)

精简系统能力,避免适配错误:

json5

{
  "module": {
    "name": "slot-machine-harmony",
    "type": "entry",
    "description": "老虎机游戏(鸿蒙PC适配版)",
    "mainElement": "entry",
    "reqSysCapabilities": [
      "ohos.permission.INTERNET", // 若无需网络可删除
      "ohos.permission.WINDOW_MANAGER"
    ],
    "deviceTypes": ["pc"],
    "deliveryWithInstall": true,
    "installationFree": false,
    "pages": "$profile:main_pages",
    "abilities": [
      {
        "name": "entry",
        "type": "pageAbility",
        "visible": true,
        "launchType": "standard"
      }
    ]
  }
}

API / 类 / 函数

SlotMachine 类

  • initialize(): 初始化游戏状态(鸿蒙 PC 端自动集成硬件加速禁用逻辑)
  • spinReels(): 启动转盘旋转(适配鸿蒙 PC 动画优化)
  • stopReels(): 停止转盘旋转(无改动)
  • checkWin(): 检查中奖情况(无改动)
  • updateScore(): 更新分数显示(适配响应式布局)

配置与部署

1. 原 Electron 平台(Windows/macOS/Linux)

安装与运行
  1. 克隆项目到本地
  2. 安装依赖:

    bash

    运行

    npm install
    
  3. 启动应用:

    bash

    运行

    npm start
    
打包应用

使用 Electron Forge 或 Electron Builder 打包:

bash

运行

# 示例:Electron Builder打包Windows版本
npm run package:win

2. 鸿蒙 PC 平台适配部署

环境准备
  • 系统要求: Windows 10/11、8GB RAM 以上、20GB 可用空间
  • 工具安装:
    • DevEco Studio 5.0+(集成鸿蒙 SDK API 20+)
    • Node.js 18.x+
  • 获取 Electron 鸿蒙编译产物:
    1. 登录Electron 鸿蒙官方仓库
    2. 下载 Electron 34 + 版本的 Release 包(.zip 格式)
    3. 解压后将electron/libs/arm64-v8a/目录复制到ohos_hap/electron/libs/下,确保 4 个核心.so 库完整
部署与运行
  1. 部署游戏代码:将 slot-machine 的核心代码按以下结构放置到web_engine/src/main/resources/resfile/resources/app/目录:

    plaintext

    app/
    ├── main.js           # 已适配鸿蒙的主进程文件
    ├── package.json      # 原项目依赖配置
    └── src/              # 原游戏源代码(含优化后的style.css)
    
  2. 配置签名:
    • 打开 DevEco Studio,导入ohos_hap目录作为项目
    • 进入File → Project Structure → Signing Configs
    • 自动生成调试签名或导入已有签名
  3. 连接设备:
    • 启用鸿蒙 PC 开发者模式和 USB 调试
    • 通过 USB Type-C 连接开发电脑
  4. 编译运行:
    • 点击 DevEco Studio 的Run按钮或按Shift+F10
    • 等待编译完成,应用将自动在鸿蒙 PC 上启动
验证检查项
  • ✅ 应用窗口正常显示,无空白或闪退
  • ✅ 转盘旋转动画流畅,无卡顿
  • ✅ 中奖判定和分数更新正常
  • ✅ 窗口大小可调整,响应式布局生效
  • ✅ DevEco Studio 日志面板无 "SysCap 不匹配" 或 "找不到.so 文件" 错误

跨平台兼容性

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

鸿蒙 PC 适配调试技巧与常见问题

1. 日志查看

在 DevEco Studio 的Log面板中过滤 "Electron" 或 "slot-machine" 关键词,查看游戏运行日志、资源加载状态和错误信息。

2. 常见问题解决

问题现象 解决方案
"SysCap 不匹配" 错误 编辑 module.json5,删除不必要的 reqSysCapabilities,仅保留 WINDOW_MANAGER 等核心能力
"找不到.so 文件" 错误 确认arm64-v8a目录下 4 个核心库(libelectron.so 等)完整,路径无拼写错误
应用窗口不显示 在 main.js 中确保添加app.disableHardwareAcceleration(),重启应用
转盘动画卡顿 1. 使用鸿蒙 PC 专属动画样式(spin-harmony);2. 减少 assets 资源体积;3. 关闭开发者工具
分数显示偏移 检查 style.css 中.container 的响应式配置,确保使用相对单位(%、rem)
资源加载失败(图片 / 音效) 确认 assets 目录路径正确,鸿蒙 PC 端资源路径需基于app/src/相对路径引用

总结与亮点回顾

本项目不仅实现了经典老虎机游戏的核心玩法,还完成了 Electron 到鸿蒙 PC 的跨生态适配,为开发者提供了完整的 "Electron 项目迁移鸿蒙 PC" 实践案例。通过本项目可掌握:

  1. Electron 基础架构与游戏逻辑实现(转盘动画、随机数生成、中奖判定);
  2. 鸿蒙 PC 应用开发环境搭建与签名配置;
  3. Electron 项目适配鸿蒙 PC 的关键改造点(硬件加速禁用、目录结构调整、动画优化);
  4. 跨平台应用的兼容性调试与问题排查技巧。

项目代码结构清晰,适配逻辑模块化,既保留了原 Electron 项目的可维护性,又满足了鸿蒙 PC 生态的运行要求,适合 Electron 初学者学习基础开发,也适合有跨生态迁移需求的开发者参考实践。

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

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐