从 0 开发一个鸿蒙小游戏(完整实战)

从 0 开发一个鸿蒙小游戏(完整实战)
在这里插入图片描述

子玥酱(掘金 / 知乎 / ZEEKLOG / 简书 同名)

大家好,我是子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚焦于业务型系统的工程化建设与长期维护。

我持续输出和沉淀前端领域的实战经验,日常关注并分享的技术方向包括前端工程化、小程序、React / RN、Flutter、跨端方案,
在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。

技术方向:前端 / 跨端 / 小程序 / 移动端工程化
内容平台:掘金、知乎、ZEEKLOG、简书
创作特点:实战导向、源码拆解、少空谈多落地
文章状态:长期稳定更新,大量原创输出

我的内容主要围绕 前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读 展开。文章不会停留在“API 怎么用”,而是更关注为什么这么设计、在什么场景下容易踩坑、真实项目中如何取舍,希望能帮你在实际工作中少走弯路。

子玥酱 · 前端成长记录官 ✨
👋 如果你正在做前端,或准备长期走前端这条路
📚 关注我,第一时间获取前端行业趋势与实践总结
🎁 可领取 11 类前端进阶学习资源(工程化 / 框架 / 跨端 / 面试 / 架构)
💡 一起把技术学“明白”,也用“到位”

持续写作,持续进阶。
愿我们都能在代码和生活里,走得更稳一点 🌱

文章目录

引言

前面我们聊了很多:

  • 架构
  • AI
  • 多端
  • 设计理念

但很多人心里还是有一个问题:

“能不能从 0 带我做一个完整的鸿蒙小游戏?”

很简单:

一个角色左右移动 点击得分 简单 AI 敌人 

同时,我们会遵循 HarmonyOS 推荐的结构:

State + UI + Service +(可选)Agent

一、项目结构(先搭骨架)

先不要写代码,先把结构定好:

entry ├─ pages │ └─ GamePage.ets │ ├─ components │ └─ Player.ets │ ├─ services │ └─ GameService.ets │ ├─ models │ └─ GameModel.ets │ └─ store └─ GameStore.ets 

核心思想:

UI / 逻辑 / 状态 分离 

二、定义游戏数据

// models/GameModel.etsexportinterfacePlayer{ x:number y:number}exportinterfaceEnemy{ x:number y:number}exportinterfaceGameState{ player: Player enemy: Enemy score:number}

先把“世界”定义出来。

三、状态管理

// store/GameStore.etsimport{ GameState }from'../models/GameModel'exportclassGameStore{ state: GameState ={ player:{ x:100, y:300}, enemy:{ x:200, y:100}, score:0}update(partial: Partial<GameState>){this.state ={...this.state,...partial }}}exportconst gameStore =newGameStore()

所有数据,都走这里。

四、业务逻辑

// services/GameService.etsimport{ gameStore }from'../store/GameStore'exportclassGameService{moveLeft(){ gameStore.update({ player:{...gameStore.state.player, x: gameStore.state.player.x -10}})}moveRight(){ gameStore.update({ player:{...gameStore.state.player, x: gameStore.state.player.x +10}})}addScore(){ gameStore.update({ score: gameStore.state.score +1})}}exportconst gameService =newGameService()

页面不直接改数据,只调用 Service。

五、UI 组件

// components/Player.ets@Componentexport struct Player {@Prop x:number@Prop y:numberbuild(){Image("player.png").width(50).height(50).position({ x:this.x, y:this.y })}}

UI 只负责展示。

六、主页面

// pages/GamePage.etsimport{ gameStore }from'../store/GameStore'import{ gameService }from'../services/GameService'import{ Player }from'../components/Player'@Entry@Component struct GamePage {@State state = gameStore.state aboutToAppear(){this.loop()}loop(){setInterval(()=>{this.enemyMove()},500)}enemyMove(){const newX =this.state.enemy.x +(Math.random()*20-10) gameStore.update({ enemy:{...this.state.enemy, x: newX }})this.state = gameStore.state }build(){Column(){// 玩家Player({ x:this.state.player.x, y:this.state.player.y })// 敌人Image("enemy.png").width(50).height(50).position({ x:this.state.enemy.x, y:this.state.enemy.y })// 分数Text(`Score: ${this.state.score}`).fontSize(20)// 操作按钮Row(){Button("←").onClick(()=> gameService.moveLeft())Button("→").onClick(()=> gameService.moveRight())Button("+1").onClick(()=> gameService.addScore())}}.width('100%').height('100%')}}

到这里,一个完整小游戏已经跑起来了。

七、加入简单 AI

我们让敌人“聪明一点”。

// services/EnemyAI.etsimport{ gameStore }from'../store/GameStore'exportclassEnemyAI{decide(){const{ player, enemy }= gameStore.state if(player.x > enemy.x){return'right'}else{return'left'}}act(){const action =this.decide()const delta = action ==='right'?5:-5 gameStore.update({ enemy:{...gameStore.state.enemy, x: gameStore.state.enemy.x + delta }})}}

页面中替换:

enemyAI.act()

现在敌人会“追你”。

八、优化结构

当前问题

this.state = gameStore.state 

手动同步。

优化方向

  • 使用状态订阅
  • 自动更新 UI

九、扩展方向

1、加入碰撞检测

if(distance(player, enemy)<50){gameOver()}

2、加入音效

audio.play("hit.mp3")

3、加入排行榜

leaderboard.submit(score)

4、加入 AI NPC

npcAgent.decide(state)

5、多设备扩展

手机控制 TV 显示 

这就是完整演进路径。

十、你刚刚做了什么?

很多人做完 Demo 会觉得:

“好像挺简单?”

但其实你已经完成了一件很重要的事情:

从:

写 UI 

到:

设计系统: State Service Component AI 

这就是鸿蒙开发的核心。

总结

我们从 0 做了一个完整鸿蒙小游戏,核心结构是:

Model(数据) Store(状态) Service(逻辑) Component(UI) 

并且扩展了:

AI(Enemy) 

如果用一句话总结这次实战:

你不是在“写一个小游戏”,而是在“搭一个可扩展的游戏系统”。

最后给你一个建议:不要停在这个 Demo。

你可以继续把它升级为:

  • 多端游戏
  • AI 游戏
  • 社交游戏

在 HarmonyOS 上,这样的项目,才刚刚开始有意思。

Read more

Codex / OpenCode / Cursor / OpenClaw 对比指南

前提说明:这四个工具并不处于同一维度。Cursor 和 Codex 更接近“主开发工作台”,OpenCode 是“开源终端 Agent”,OpenClaw 则更像“把 Agent 接入聊天软件的网关”。因此在横向对比前,先明确各自定位,才不会拿错标尺。 核心定位速览 工具本质定位主要使用界面模型 / 生态策略最适合谁CodexOpenAI 原生编程 Agent / 自动化开发平台CLI 终端、本地环境、云端任务流以 OpenAI 模型体系为核心已深度使用 ChatGPT / OpenAI,希望 Agent 直接读写仓库、执行命令、跑自动化流程CursorAI 原生 IDE(编辑器中心)编辑器主界面 + 内置终端 + Diff 审查支持 OpenAI / Anthropic / Google 等多模型,切换灵活追求一体化开发体验,希望写码、

HarmonyOS鸿蒙PC的QT应用开发:QT项目运行原理与 EmbeddedUIExtensionAbility介绍

HarmonyOS鸿蒙PC的QT应用开发:QT项目运行原理与 EmbeddedUIExtensionAbility介绍

好消息,2026年3.31日,QT官方正式发布鸿蒙版QT。本次开源发布正式推出面向鸿蒙系统平板和PC设备的Qt 5.12.12 LTS 适配版本,在完整保留 Qt 5.12.12 核心能力(含界面渲染、信号槽机制、跨平台 I/O、网络通信及数据库模块)的基础上,深度适配鸿蒙系统架构。本版本可降低开发者跨平台移植成本,加速 Qt 与鸿蒙生态融合,助力多场景鸿蒙应用高效开发。 QT官方鸿蒙版开源地址:https://wiki.qt.io/Qt5.12.12_Open_Source_Release_for_HarmonyOS_zh QT官方文档地址:https://wiki.qt.io/Qt_for_

vector

vector

vector * 1 vector的介绍 * 2 vector的使用 * 2.1 vector的定义 * 2.2 vector iterator的使用 * 2.3 vector空间 * 2.4 vector增删查改 * 2.5 迭代器失效问题 1 vector的介绍 vector是C++标准模板库(STL)中最常用的序列容器之一,封装了动态数组,可以自动管理内存,提供随机访问、动态扩容等功能,可以把vector理解成一个数组。 基本特性 动态数组: 大小可变,插入/删除元素时自动调整容量 连续存储: 元素在内存中连续存放,支持高效的随机访问 类型安全: 模板类,存储特定类型的对象 内存自动管理: 自动分配和释放内存,避免手动new[]/delete[] 2 vector的使用 2.

Python + Ollama 本地跑大模型:零成本打造私有 AI 助手

Python + Ollama 本地跑大模型:零成本打造私有 AI 助手

零 API 费用、零数据泄露风险、完全离线可用。本文带你从安装到实战,30 分钟跑起一个本地 AI 助手。 一、为什么要在本地跑大模型? 对比维度云端 API(ChatGPT / Claude)本地模型(Ollama)费用按量付费,$20/月起完全免费数据隐私数据上传到云端数据留在本地网络依赖必须联网离线可用模型选择固定自由切换开源模型硬件要求无需要一定配置 38%27%18%12%5%选择本地大模型的理由(2026年开发者调查)数据隐私与安全零成本长期使用离线可用可自由定制微调其他 二、Ollama 是什么? Ollama 是一个开源的本地大模型运行框架,核心特点: * 一键拉取模型:类似 docker pull 的体验 * 自动适配硬件:根据你的显存/内存自动量化 * 兼容 OpenAI API 格式:现有代码几乎不用改 * 跨平台:Windows