应用定位:宠物养成模拟类小应用
技术栈: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最佳实践提炼

  1. 状态最小化:只用 @State 管理需要触发UI更新的变量,常量用 private
  2. 守卫模式:每个操作前检查前置条件
  3. 数值安全Math.min/Math.max 双端保护
  4. 定时器生命周期:创建→清理的完整闭环
  5. 数组索引映射:1-based转0-based的通用模式
  6. 条件渲染替代显示/隐藏:用 if/else 而非 visibility
  7. 语义化颜色:按钮颜色反映操作性质
  8. 即时反馈:每个操作立即更新 message

八、总结

宠物模拟器作为系列的收官之作,综合了多维属性管理、后台衰减、生命周期集成、多类型切换等技术,是20个模拟器中最为成熟的应用之一。

回顾整个系列,我们从最简单的"吃饭模拟器"(92行,仅7个状态变量)开始,一路学到了"宠物模拟器"(153行,四维属性 + 后台定时器 + 多类型切换)。每一篇博客都围绕一个核心技术主题展开,形成了一个完整的ArkTS学习路径。


返回首页

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐