# [特殊字符] 宠物模拟器 — 鸿蒙ArkTS完整技术解析(最终篇)
·
应用定位:宠物养成模拟类小应用
技术栈:HarmonyOS NEXT + ArkTS + Stage模型
源码行数:153行
核心亮点:5种宠物类型选择、4维属性管理、后台自动衰减、生命周期集成、onPageShow定时器
一、引言
宠物模拟器是20个模拟器系列的最后一篇。它综合了前面多个模拟器的技术特点——多维属性(养猫模拟器)、动态切换(健身模拟器)、后台衰减(养猫模拟器)。
宠物模拟器引入了多宠物类型的概念——5种不同类型(狗/猫/兔/仓鼠/鹦鹉)的宠物可以切换饲养。
二、需求分析
| 需求ID | 功能 | 描述 |
|---|---|---|
| F1 | 多宠物类型 | 5种宠物选择 |
| F2 | 4维属性 | 饥饿/快乐/精力/干净 |
| F3 | 定时衰减 | 属性自动下降 |
| F4 | 喂食 | 增加饥饿和快乐 |
| F5 | 玩耍 | 增加快乐,消耗精力 |
| F6 | 洗澡 | 增加干净 |
| F7 | 睡觉 | 恢复精力 |
| F8 | 属性警报 | 某项属性过低时提示 |
三、与养猫模拟器的对比
宠物模拟器(index20)与养猫模拟器(index9)共享了相同的四维属性模型,但有几个关键差异:
| 维度 | 养猫模拟器 | 宠物模拟器 |
|---|---|---|
| 宠物类型 | 仅猫 | 狗/猫/兔/仓鼠/鹦鹉 |
| 类型切换 | ❌ 无 | ✅ 可切换 |
| 零食计数 | ❌ 无 | ✅ 有 |
| 重置方式 | 全部重置 | 切换类型时部分重置 |
四、多宠物类型
private petTypes: string[] = ['🐶 小狗', '🐱 小猫', '🐰 兔子', '🐹 仓鼠', '🦜 鹦鹉'];
类型切换
Button('🔄 ' + (this.petType === 0 ? '换一种宠物' : '换回小狗'))
.onClick(() => {
this.petType = (this.petType + 1) % this.petTypes.length;
this.hunger = 60;
this.happiness = 60;
this.energy = 70;
this.cleanliness = 80;
this.message = '换了一只' + this.petTypes[this.petType] + '!';
})
切换时重置所有属性到初始值,给玩家一个"全新开始"的感觉。
五、综合属性管理
5.1 四维属性
| 属性 | 初始值 | 操作影响 |
|---|---|---|
| hunger(饥饿) | 60 | 喂食+20,睡觉-5 |
| happiness(快乐) | 60 | 喂食+5,玩耍+20,洗澡-3 |
| energy(精力) | 70 | 玩耍-15,睡觉+30 |
| cleanliness(干净) | 80 | 玩耍-8,洗澡+25 |
5.2 后台衰减
.onPageShow(() => {
if (this.intervalId === -1) {
this.intervalId = setInterval(() => {
this.hunger = Math.max(0, this.hunger - 3);
this.happiness = Math.max(0, this.happiness - 2);
this.age++;
if (this.hunger < 15 || this.happiness < 15) {
this.message = '⚠️ 宠物不开心了,快照顾它吧!';
}
}, 4000);
}
})
衰减间隔4秒,比养猫模拟器的3秒更慢,给玩家更多缓冲时间。
六、交互设计
6.1 四个核心操作
🍖 喂食 🎾 玩耍
🛁 洗澡 😴 睡觉
每个操作都有守卫逻辑:
Button('🎾 玩耍')
.onClick(() => {
if (this.energy < 10) {
this.message = '😴 宠物太累了,让它休息吧';
return;
}
this.happiness = Math.min(100, this.happiness + 20);
this.energy = Math.max(0, this.energy - 15);
this.cleanliness = Math.max(0, this.cleanliness - 8);
})
七、20个模拟器技术总结
至此,20个模拟器全部完成。以下是整体的技术演进路线:
7.1 复杂度梯度
| 阶段 | 模拟器 | 核心复杂度 |
|---|---|---|
| 基础 | index1-2 | 单维度状态 + 点击交互 |
| 进阶 | index3-5 | 定时器 + 多阶段状态机 |
| 中级 | index6-8 | 等级系统 + 多页 + 商品系统 |
| 高级 | index9-10 | 多维属性 + 网格布局 + 经济循环 |
| 深入 | index11-15 | 随机事件 + 录音 + 绘画 + 成长 + 收集 |
| 综合 | index16-20 | 档位系统 + 配方 + 动态花盆 + 目标系统 + 综合养成 |
7.2 核心技术覆盖
| 技术点 | 涉及模拟器 |
|---|---|
| @State状态管理 | 全部 |
| @Entry @Component | 全部 |
| Progress进度条 | 1,2,3,4,9,10,20 |
| setInterval定时器 | 3,4,5,6,8,14,16,19 |
| setTimeout延迟 | 11 |
| Grid网格布局 | 10,18 |
| ForEach列表渲染 | 7,10,11,12,13,18,20 |
| 条件渲染 if/else | 全部 |
| onPageShow生命周期 | 9,20 |
| Math随机数 | 3,5,6,10,11,15,16 |
| 正则表达式 | 7 |
| 按钮互斥渲染 | 3,4,5,6,11,16,19 |
7.3 ArkTS最佳实践提炼
- 状态最小化:只用
@State管理需要触发UI更新的变量,常量用private - 守卫模式:每个操作前检查前置条件
- 数值安全:
Math.min/Math.max双端保护 - 定时器生命周期:创建→清理的完整闭环
- 数组索引映射:1-based转0-based的通用模式
- 条件渲染替代显示/隐藏:用
if/else而非visibility - 语义化颜色:按钮颜色反映操作性质
- 即时反馈:每个操作立即更新 message
八、总结
宠物模拟器作为系列的收官之作,综合了多维属性管理、后台衰减、生命周期集成、多类型切换等技术,是20个模拟器中最为成熟的应用之一。
回顾整个系列,我们从最简单的"吃饭模拟器"(92行,仅7个状态变量)开始,一路学到了"宠物模拟器"(153行,四维属性 + 后台定时器 + 多类型切换)。每一篇博客都围绕一个核心技术主题展开,形成了一个完整的ArkTS学习路径。
更多推荐

所有评论(0)