从零开发HarmonyOS(鸿蒙)运动手表小游戏 您所在的位置:网站首页 华为手表的开发怎么写 从零开发HarmonyOS(鸿蒙)运动手表小游戏

从零开发HarmonyOS(鸿蒙)运动手表小游戏

2024-07-06 06:43| 来源: 网络整理| 查看: 265

HarmonyOS(鸿蒙)运动手表第二个小游戏app——数字华容道 前言 概述 正文 创建项目 实现开始界面的布局 实现数字的随机打乱和方格的移动 实现计时器、重新开始和游戏成功 心得体会 结语 源代码

前言

此次博客是深鸿会博主(Zzt_01-23)学习完HarmonyOS(鸿蒙)后,自行开发的第二个鸿蒙demo——数字华容道,详细讲述了数字华容道的开发思路,适合刚入门小白,使读者能自行从零开发一个小游戏APP——数字华容道,文末附有整个demo的源代码,有兴趣的读者也可以前往观看我的第一个游戏开发学习:黑白翻棋,较第一个而言,此次只是多了滑动事件和计时器,其他组件和第一个游戏一样,建议先观看完第一个再学习第二个。

概述

本个demo将从零基础开始完成鸿蒙小游戏APP在可穿戴设备上的编译,此处以运动手表为例,在项目中我们所使用到的软件为DevEco Studio,下载地址为:DevEco Studio下载、DevEco Studio安装教程,在项目中我们要实现的内容为数字华容道APP的开发。

在初始界面中显示4*4的方阵,方阵中分布有随意打乱的1至15的数字和一个空白方格,方阵上方增加一个计时器,显示游戏进行的时间,单位为秒,方阵下方显示一个“重新开始”的按钮,为用户提供重新开始游戏的机会。 在这里插入图片描述

向上、下、左、右任一方向滑动,空白方格周围对应位置的方格便会随之向对应的方向移动一格,计时器也会显示游戏开始到当前的时间。 在这里插入图片描述

经过若干次移动后,当所有的数字按顺序排列后,则会弹出游戏成功的界面,再滑动也不会有任何变化,此时方阵上方的计时器停止计时,点击“重新开始”的按钮后则会重新返回步骤1界面所示。 在这里插入图片描述

正文 创建项目

DevEco Studio下载安装成功后,打开DevEco Studio,点击左上角的File,点击New,再选择New Project,选择Lite Wearable选项,选择默认的模板,然后选择保存路径,将文件命名为Game1(文件名不能出现中文或者特殊字符,否则将无法成功创建项目文件),最后点击Finish。 在这里插入图片描述 主要编写的文件为index.css、index.hml和index.js,打开路径如图所示,index.hml用于描述页面中包含哪些组件,index.css用于描述页面中的组件都长什么样,index.js用于描述页面中的组件是如何进行交互的。 在这里插入图片描述

实现开始界面的布局

首先,我们要先画出一个4*4的方阵,方阵中按照顺序显示1至15的数字,方阵上方显示“当前秒数:0”,方阵下方有一个“重新开始”的按钮。 在这里插入图片描述 1.在index.hml中添加相应的页面组件: 首先创建一个基础容器div类名为container,用于盛装所有的其他组件

然后在此基础容器中添加一个文字组件text类名为seconds,且注明显示的固定部分“当前秒数:”,为动态变换部分赋予一个名为currentSteps的变量,用于动态显示游戏进行的秒数

当前秒数:{ { currentSeconds}}

再添加一个画布组件canvas类名为canvas,增加一个引用属性ref,用来指定指向子元素或子组件的引用信息,该引用将注册到父组件的$refs 属性对象上,以便在此画布上画出4*4的方阵

最后添加一个普通按钮组件,类名为bit,并赋值“重新开始”,用于重新开始游戏

至此,index.hml文件已经全部编写完毕

当前秒数:{ { currentSeconds}}

2.在index.css中描述刚才添加的页面组件的样式: 首先编写container的样式,flex-direction为容器主轴方向,选择column(垂直方向从上到下),justify-content为容器当前行的主轴对齐格式,选择center(项目位于容器的中心),align-items为容器当前行的交叉轴对齐格式,选择center(元素在交叉轴居中),width、height分别为容器以像素为单位的宽度和高度,都设定为450px

.container { flex-direction: column; justify-content: center; align-items: center; width:450px; height:450px; }

然后编写seconds的样式,font-size为设置文本的尺寸,设定为18px,text-align为设置文本的文本对齐方式,选择center(文本居中对齐),width、height分别设定为300px和20px,letter-spacing为设置文本的字符间距,设定为0px,margin-top为设置上外边距,设定为10px

.seconds{ font-size: 18px; text-align:center; width:300px; height:20px; letter-spacing:0px; margin-top:10px; }

再编写canvas的样式,width、height都设定为320px,background-color为设置背景颜色,设定为#FFFFFF

.canvas{ width:305px; height:305px; background-color: #FFFFFF; }

最后编写bit的样式,width、height分别设定为150px和30px,background-color设定为#AD9D8F,font-size设定为24px,margin-top设定为10px

.bit{ width:150px; height:30px; background-color:#AD9D8F; font-size:24px; margin-top:10px; }

至此,index.css文件已经全部编写完毕 3.在index.js中描述页面中的组件交互情况: 首先在data中为当前秒数currentSeconds赋值为0

data: { currentSeconds:0, }

然后在文件开头定义一个全局变量context,定义一个全局变量的二维数组grids,其中的值为1至15和0,定义全局常量方格的边长SIDELEN为70,方格的间距MARGIN为5,创建一个onReady()函数,用于定义2d绘画工具

var grids=[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 0]]; var context; const SIDELEN = 70; const MARGIN = 5; onReady(){ context=this.$refs.canvas.getContext('2d'); }

再创建drawGrids()函数,先将grids的值利用toString()函数全部转化为字符串,fillStyle为画图工具context的方格的颜色,方格的背景颜色定义为#BBADA0,数字的颜色定义为#000000,fillRect为画图工具context的画图矩形的大小,其中有四个参数,第一个参数指定矩形左上角的x坐标,第二个参数指定矩形左上角的y坐标,第三个参数指定矩形的高度,第四个参数指定矩形的宽度。font为为画图工具context的字体大小,定义为30px HYQiHei-65S,因为要出现一个空白的方格,所以需要添加一个判断语句,当数字为0时不显示数字。fillText为画图工具context的文本字体大小,其中有三个参数,第一个参数为绘制的文本,第二个参数指定文本左上角的x坐标,第三个参数指定文本左上角的y坐标,最后创建onShow()函数,用于调用drawGrids()函数

onShow() { this.drawGrids(); }, drawGrids() { for (let row = 0; row let gridStr = grids[row][column].toString(); context.fillStyle = "#BBADA0"; let leftTopX = column * (MARGIN + SIDELEN) + MARGIN; let leftTopY = row * (MARGIN + SIDELEN) + MARGIN; context.fillRect(leftTopX, leftTopY, SIDELEN, SIDELEN); context.font = "30px HYQiHei-65S"; if (gridStr != "0") { context.fillStyle = "#000000"; let offsetX = (4 - gridStr.length) * (SIDELEN / 8); let offsetY = (SIDELEN - 30) / 2; context.fillText(gridStr, leftTopX + offsetX, leftTopY + offsetY); } } } }

至此,index.jd文件已经全部编写完毕,运行即可得出上述界面布局了

var grids=[[1, 2,


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有