#深入浅出学习eTs#(八)“猜大小”小游戏

本项目gitee仓地址:[深入浅出ets学习: 带大家深入浅出学习ets (gitee.com)](
上一章节提到的模拟器存在的bug问题,目前没有办法直接改善,本来打算直接使用鸿蒙远程设备来实现,但是发现支持api8的设备都被抢光了(包括模拟器),而本地模拟器仅仅都支持api6,也是不能使用的,在之后的内容中咱们还是依托于预览器来实现,如果实现不了的或者有特定需求的,我会使用dayu200真机来实现
一、基本需求
本章节给大家带来一个最基础的一个赌博小游戏,即通过猜大猜小,然后使用随机数来进行判定。
二、控件介绍 本章节中使用到的新控件为进度条和图片(代码),用来展示开奖的这个过程
progress:官方文档 说明: 该组件从api version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
进度条,用于显示内容加载或操作处理进度。
interface progressinterface { (options: progressoptions): progressattribute;}declare interface progressoptions { value: number; // 必须要指定初始进度 total?: number; style?: progressstyle type?: progresstype} 复制
参数
参数名 参数类型 必填 默认值 参数描述
value number 是 - 指定当前进度值。
total number 否 100 指定进度总长。
type progresstype 否 progresstype.linear 指定进度条样式。
主要有以上几种样式,我们在这里使用最基础的长条形来进行使用,
image 图片组件,支持本地图片和网络图片的渲染展示。
说明: 该组件从api version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
权限说明 使用网络图片时,需要在config.json(fa模型)或者module.json5(stage模型)对应的abilities中添加网络使用权限ohos.permission.internet。
abilities: [ { ... permissions: [ohos.permission.internet], ... }] 复制
interface imageinterface { (src: string | pixelmap | resource): imageattribute;}src:设置要加载的图片资源,支持从本地、网络和内存中加载图片,简单样例如下: image($r(app.media.test)) .width(180) .height(80) 复制
三、ui设计 首先将图片放入目录当中
此时在我们的image控件当中就可以使用媒体的路径地址:$r(“app.media.2”)
image($r(app.media.2)) .width(300) .height(300) 复制
此时可以在右侧预览器中显示出来我们的图片
在图片下面需要加入两个按钮,分别是赌大和赌小
row() { button('赌大') .width(150) .onclick(() => { }) button('赌小') .width(150) .onclick(() => { }) } 复制
因为是需要水平排列,这里使用row容器组件,写入点击事件备用
在按钮下边则加入我们的进度条控件
@state set_num: number = 0;progress({ value: this.set_num, // 设置当前进度 total: 100, // 设置进度总量 type: progresstype.linear // 设置进度条的样式为条形样式 }) .size({width: '100%', height: 40}) 复制
设置总宽度为100,当前宽度为0(赋值给了变量)
在最下面放置一个标签,用来提示当前系统的运行状态
四、功能设计 首先呢,需要让我们的进度条动起来,因为没有直接的sleep函数,所以需要我们构建一个,这里引入了同步和异步的概念,怕大家理解不了就不深入展开了,应用方式如下:
function sleep(ms){ return new promise((resolve)=>settimeout(resolve,ms));}async get_result() { this.set_num = 0 for(var i = 0;i<=100;i++) { var temple = await sleep(10); this.set_num = i }} 复制
上面的promise 和 下面的async为对应出现,因为我们把进度条的当前位置赋值给了 this.set_num,那么上面的部分意思就是在for循环中增加进度条的当前位置,间隔为10ms,一共100次,则对应进度条1s走完,实现一个动画效果
在完成动画效果后,我们需要实现“赌博”功能,即实现对赌大赌小的分析,这里使用随机数生成器
this.the_result = math.ceil(math.random() * 100 + 1) 复制
将结果赋值给this.the_result(0-100大小的数)
此时我们判断按下的是赌大还是赌小,分别进行分析
async get_result() { this.set_num = 0 for(var i = 0;i { this.flag = 1 this.get_result() }) button('赌小') .width(150) .onclick(() => { this.flag = 0 this.get_result() }) } 复制
此时便能实现完整的一次运行,在运行后会将结果以及随机数的大小显示在标签上
五、功能演示
如上图,实现了预计功能

笔记本宽屏失真有何解决方法?
对颗粒进行自动定位和化学分析的专用仪器-双激光窄光颗粒计数器面世
OPPOR9和R9Plus的区别有多大
用精准的PWM轻触你的绚烂多彩
Graphcore与神州数码建立合作伙伴关系,为实现爆炸性增长做准备
#深入浅出学习eTs#(八)“猜大小”小游戏
变频器的选型
实物即将到来!索尼发布会将推出智能腕表
分布式能源与充电站一体化解决办法分析以及共直流母线IGBT充电集如何助力
嵌入式工控主板在车载智能交通调度终端的应用
晶电累计今年前三季税后净损25.23亿元 第4季车用部分或有回温迹象
华为与中兴均表示将在6月支持5G消息商用
Mouser Electronics喜获慧聪网电子行业十大评选双料大奖
疫情加速企业数字化转型进程,催化云计算市场呈爆发之势
乐Pro3宣布涨价!但依然是最便宜的骁龙821手机!
诺基亚9渲染图曝光:全面屏+双曲面,对于这样的外观你满意吗?
空调扇的主要原理
再创纪录!中国实现4.1Pb/s单模19芯光纤传输系统实验
细说中国电动自行车出口美国市场准入标准-UL2849认证
Defacto的SoC编译器10.0让SoC构建过程变得如此简单