「Mac畅玩鸿蒙与硬件33」UI互动应用篇10 - 数字猜谜游戏

server/2024/12/2 11:54:18/

本篇将带你实现一个简单的数字猜谜游戏。用户输入一个数字,应用会判断是否接近目标数字,并提供提示“高一点”或“低一点”,直到用户猜中目标数字。这个小游戏结合状态管理和用户交互,是一个入门级的互动应用示例。
在这里插入图片描述


关键词
  • UI互动应用
  • 数字猜谜
  • 状态管理
  • 用户交互
  • 随机数生成

一、功能说明

数字猜谜游戏随机生成一个目标数字,用户通过输入数字猜测目标数字的大小,并根据提示逐步调整。猜中目标数字后,游戏会显示胜利提示,并提供重新开始的按钮。


二、所需组件
  • @Entry@Component 装饰器
  • Column 布局组件
  • TextInput 组件用于用户输入
  • Text 组件用于显示提示信息
  • Button 组件用于提交答案和重新开始
  • @State 修饰符用于状态管理
项目结构
  • 项目名称GuessGameApp
  • 自定义组件名称GuessGamePage
  • 代码文件GuessGamePage.etsIndex.ets

三、代码实现
// 文件名:GuessGamePage.ets@Component
export struct GuessGamePage {@State targetNumber: uiltin">number = this.generateRandomNumber(); // 随机目标数字@State guess: uiltin">string = ''; // 用户当前的输入@State feedback: uiltin">string = '输入一个数字开始猜谜'; // 提示信息@State isGameOver: uiltin">boolean = false; // 游戏是否结束private generateRandomNumber(): uiltin">number {return Math.floor(Math.random() * 100) + 1; // 生成 1-100 的随机整数}build() {Column({ space: 20 }) { // 创建垂直布局// 显示提示信息Text(this.feedback).fontSize(20).alignSelf(ItemAlign.Center);// 输入数字TextInput({ placeholder: '输入你的猜测数字' }).type(InputType.Number).onChange((value: uiltin">string) => this.guess = value).enabled(!this.isGameOver).width('80%').alignSelf(ItemAlign.Center);// 提交按钮Button(this.isGameOver ? '重新开始' : '提交猜测').onClick(() => {if (this.isGameOver) {this.resetGame();} else {this.checkGuess();}}).fontSize(18).backgroundColor(this.isGameOver ? Color.Green : Color.Blue).fontColor(Color.White).width('50%').alignSelf(ItemAlign.Center);}.padding(20).width('100%').height('100%').alignItems(HorizontalAlign.Center);}private checkGuess() {const guessNumber = parseInt(this.guess);if (isNaN(guessNumber)) {this.feedback = '请输入一个有效的数字!';return;}if (guessNumber < this.targetNumber) {this.feedback = '高一点!';} else if (guessNumber > this.targetNumber) {this.feedback = '低一点!';} else {this.feedback = '恭喜你,猜对了!';this.isGameOver = true;}}private resetGame() {this.targetNumber = this.generateRandomNumber();this.guess = '';this.feedback = '输入一个数字开始猜谜';this.isGameOver = false;}
}
// 文件名:Index.etsimport { GuessGamePage } from './GuessGamePage';@Entry
@Component
struct Index {build() {Column() {GuessGamePage() // 调用数字猜谜游戏页面}.padding(20)}
}

效果示例:用户输入数字后,应用会实时提示,帮助用户逐步接近目标数字。

在这里插入图片描述


四、代码解读
  • 随机目标数字生成:通过 Math.random 生成 1-100 的随机整数,作为目标数字。
  • @State guessfeedback:分别存储用户输入和提示信息,实现游戏状态的动态更新。
  • checkGuess() 方法:判断用户输入的数字是否与目标数字匹配,并提供反馈信息。
  • resetGame() 方法:重置游戏状态,为用户提供重新开始的机会。

五、优化建议
  1. 添加计数器:记录用户的猜测次数,并在游戏结束时显示。
  2. 难度选择:允许用户选择不同范围(如 1-50、1-100、1-500)的目标数字。
  3. 动画效果:为提示信息添加颜色渐变或动画效果,提高用户体验。

六、相关知识点
  • 「Mac畅玩鸿蒙与硬件11」鸿蒙 UI 组件篇1 - Text 和 Button 组件详解
  • 「Mac畅玩鸿蒙与硬件26」UI互动应用篇3 - 倒计时和提醒功能实现

小结

通过数字猜谜小游戏,用户能够体验状态管理和随机数生成的应用,同时熟悉用户交互和简单逻辑判断的实现方法。该游戏适合初学者练习基本的组件使用和事件处理。


下一篇预告

在下一篇「UI互动应用篇11 - 颜色选择器」中,我们将探索如何实现一个颜色选择器,用户可以通过点击预设颜色或输入颜色代码动态改变界面背景。


上一篇: 「Mac畅玩鸿蒙与硬件32」UI互动应用篇9 - 番茄钟倒计时应用
下一篇: 「Mac畅玩鸿蒙与硬件34」UI互动应用篇11 - 颜色选择器

作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=293
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



http://www.ppmy.cn/server/146707.html

相关文章

Linux 系统目录结构

Linux 系统目录结构 登录系统后&#xff0c;在当前命令窗口下输入命令&#xff1a; ls / 你会看到如下图所示: 树状目录结构&#xff1a; 在 Linux 或 Unix 操作系统中&#xff0c;所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构。 文件系统的最顶层是由根目…

React与Ant Design入门指南

创建基于React框架使用Ant Design组件库的技术文档时&#xff0c;我们需要涵盖从安装到使用的各个关键步骤。以下是一份简化的技术文档草稿&#xff0c;它旨在帮助开发者快速上手并开始构建界面。 React与Ant Design入门指南 1. 简介 Ant Design是一个致力于提供企业级UI设计…

Python入门(19)--最终篇

战略性学习与职业发展 &#x1f310; 引言&#xff1a;Python的战略价值 在当今快速evolving的技术景观中&#xff0c;Python已经成为跨领域应用最广泛的编程语言。从人工智能到web开发&#xff0c;从数据科学到云计算&#xff0c;Python展现出令人惊叹的适应性和影响力。 学…

AI前景分析展望——GPTo1 SoraAI

引言 人工智能&#xff08;AI&#xff09;领域的飞速发展已不仅仅局限于学术研究&#xff0c;它已渗透到各个行业&#xff0c;影响着从生产制造到创意产业的方方面面。在这场技术革新的浪潮中&#xff0c;一些领先的AI模型&#xff0c;像Sora和OpenAI的O1&#xff0c;凭借其强大…

初识Linux(4):Linux基础环境工具(下)

1. Git Git是一种版本控制系统&#xff0c;是一种工具&#xff0c;用于代码的存储和版本控制。 而我们常见的Gitee和Gitehub都是基于Git&#xff08;Git是开源的&#xff09;实现的在线代码仓库&#xff0c;而前者服务器位于中国&#xff0c;后者服务器位于美国。 总的来说&…

条件数:概念、矩阵中的应用及实际工业场景应用

一、引言 条件数是数值分析领域中的一个重要概念&#xff0c;它在理解线性方程组的敏感性、矩阵运算的稳定性等方面发挥着关键作用。无论是在纯数学理论研究&#xff0c;还是在解决实际工业问题的工程应用中&#xff0c;条件数都有着广泛的意义。 二、条件数的概念 &#xff…

混淆零碎知识点

minifyEnabled true //混淆开关 zipAlignEnabled true // Zipalign优化 shrinkResources true // 移除无用的resource文件 &#xff08;必须要混淆开了之后才才可以设置为true&#xff09; proguard-rules.pro 为混淆文件 //整个文件保留 不被混淆 -keep class com.cn…

selenium部署分布式 UI 自动化测试环境-Docker

一、根据selenium/hub官网的配置信息&#xff0c;进行配置。 How to run this image The Hub and Nodes will be created in the same network and they will recognize each other by their container name. A Docker network⁠ needs to be created as a first step.Create …