HarmonyOS Next——ArkUI 开发案例

38 阅读4分钟

 ArkUI 是华为为 HarmonyOS 应用开发提供的一套 UI 开发框架,支持声明式编程和组件化开发。本文将通过一个简单的猜数字游戏,帮助初学者快速上手 ArkUI 开发。我们将从零开始构建一个完整的应用,涵盖状态管理、事件处理、组件布局等核心概念。

游戏概述

猜数字游戏的规则如下:

  1. 程序随机生成一个 1 到 100 之间的数字作为目标数字。
  2. 用户输入一个数字进行猜测。
  3. 程序会根据用户的输入提示“猜的数字太小了”、“猜的数字太大了”或“恭喜你,猜对了!”。
  4. 用户可以点击“重新开始”按钮,重新生成目标数字并重置游戏状态。

开发步骤

1. 环境准备

确保你已经安装了 DevEco Studio 并配置好了开发环境。如果还没有安装,可以从华为开发者官网下载并安装。

2. 创建新项目

  1. 打开 DevEco Studio,点击“Create New Project”。
  2. 选择“Empty Ability”模板,点击“Next”。
  3. 输入项目名称,例如“GuessNumberGame”,选择保存路径,点击“Finish”。

3. 编写代码

在 entry/src/main/ets/pages/Index.ets 文件中编写以下代码:

@Entry
@Component
struct GuessNumberGame {
    @State private targetNumber: number = Math.floor(Math.random() * 100) + 1; // 目标数字
    @State private userGuess: string = ''; // 用户输入
    @State private message: string = '请输入 1 到 100 之间的数字进行猜测。'; // 提示信息

    // 重置游戏
    private resetGame() {
        this.targetNumber = Math.floor(Math.random() * 100) + 1;
        this.userGuess = '';
        this.message = '请输入 1 到 100 之间的数字进行猜测。';
    }

    // 处理用户猜测
    private handleGuess() {
        const guess = parseInt(this.userGuess);
        if (isNaN(guess)) {
            this.message = '请输入一个有效的数字。';
        } else if (guess < 1 || guess > 100) {
            this.message = '请输入 1 到 100 之间的数字。';
        } else if (guess < this.targetNumber) {
            this.message = '猜的数字太小了,再试试。';
        } else if (guess > this.targetNumber) {
            this.message = '猜的数字太大了,再试试。';
        } else {
            this.message = '恭喜你,猜对了!';
        }
    }

    build() {
        Column({ space: 20 }) {
            Text(this.message)
              .fontSize(18)
              .fontColor(this.message.includes('恭喜') ? '#00FF00' : '#000000') // 猜对时改变文字颜色

            TextInput({
                placeholder: '输入你的猜测',
                text: this.userGuess
            })
              .onChange((value: string) => {
                  // 只允许输入数字
                  if (/^\d*$/.test(value)) {
                      this.userGuess = value;
                  }
              })
              .width('80%')
              .padding(10)
              .borderRadius(5)
              .borderWidth(1)
              .borderColor('#CCCCCC')

            Button('提交猜测')
              .onClick(() => {
                    this.handleGuess();
                })
              .width('50%')
              .padding(10)
              .backgroundColor('#007BFF')
              .fontColor('#FFFFFF')

            Button('重新开始')
              .onClick(() => {
                    this.resetGame();
                })
              .width('50%')
              .padding(10)
              .backgroundColor('#6C757D')
              .fontColor('#FFFFFF')
        }
        .width('100%')
        .height('100%')
        .justifyContent(FlexAlign.Center) // 垂直居中
    }
}

4. 代码解析

1. 状态管理

  • 使用 @State 装饰器声明状态变量:

    • targetNumber:目标数字,随机生成。
    • userGuess:用户输入的数字。
    • message:提示信息。
  • @State 的作用是让 ArkUI 监听这些变量的变化,并在变化时自动更新界面。

2. 组件布局

  • 使用 Column 组件实现垂直布局。
  • Text 组件用于显示提示信息。
  • TextInput 组件用于接收用户输入。
  • Button 组件用于提交猜测和重置游戏。

3. 事件处理

  • TextInput 的 onChange 事件:监听用户输入,并限制输入内容为数字。
  • Button 的 onClick 事件:处理用户提交的猜测或重置游戏。

4. 游戏逻辑

  • handleGuess 方法:根据用户输入判断猜测结果,并更新提示信息。
  • resetGame 方法:重置目标数字和游戏状态。

5. 运行项目

  1. 点击 DevEco Studio 工具栏上的“Run”按钮,选择一个模拟器或真机设备运行项目。

  2. 你将看到一个简单的猜数字游戏界面:​编辑

    • 输入框中输入数字并点击“提交猜测”按钮,程序会提示猜测结果。                                  ​编辑
    • 点击“重新开始”按钮,可以重新生成目标数字并重置游戏状态。 

关键知识点

1. ArkUI 组件

  • Text:用于显示文本。
  • TextInput:用于接收用户输入。
  • Button:用于触发点击事件。
  • Column:用于垂直布局。

2. 状态管理

  • 使用 @State 装饰器声明状态变量,ArkUI 会自动监听这些变量的变化并更新界面。

3. 事件处理

  • onChange:监听输入内容的变化。
  • onClick:监听按钮的点击事件。

4. 布局与样式

  • 使用 widthheightpadding 等属性设置组件的大小和间距。
  • 使用 fontSizefontColor 等属性设置文本样式。

总结

通过这个猜数字游戏项目,相信你已经掌握了 ArkUI 的基本开发流程,包括状态管理、事件处理、组件布局等核心概念。希望本文对你学习 ArkUI 开发有所帮助!