前言
本期笔者将在游戏内导入更多题目,并实现游戏处于关卡选择页面时进入不同关卡的页面跳转逻辑。
正文
利用xml布局创建UI
打开entry>src>main>resouce>base>graphic,并在graphic目录下新创建一个xml文件(可以通过复制粘贴graphic目录下的其他xml文件来实现),将其命名为select_text.xml,最后在文件内将代码修改为如下:
接着,在graphic目录下再次新创建一个xml文件,将其命名为select_text_exit.xml,并在文件内添加如下代码:
这样以后,我们就完成了两类组件背景元素的创建,而这两类组件背景元素所实现的UI效果是:当组件处于被点击的状态时,组件改变颜色;当组件未处于被点击的·状态时,组件保持初始的颜色。
之后,打开entry>src>main>resouce>base>layout,并在layout目录下新创建一个xml文件(可以通过复制粘贴layout目录下的其他xml文件来实现),将其命名为select.xml。
最后在文件内将代码修改为如下:
这样以后,我们就完成了基本的组件布局,当然,此xml文件在后文是要与关卡选择界面相绑定的。此时可以打开previewer预览UI效果。
在SelectAbilitySlice内完善交互逻辑
打开先前创建的SelectAbilitySlice(目录路径:entry\src\main\java\com.example.project\slice\SelectAbilitySlice),将代码修改为如下:
在此次的代码添加中,笔者先是扩展了SelectAbilitySlice的框架,并将SelectAbilitySlice与select.xml绑定,这样以后SelectAbilitySlice就可以显示select.xml内设定的布局元素;接着,我们在onActive()函数内声明了已在select.xml设定的6个text组件,并为每个text组件都设定了点击监听器;最后,我们创建了一个intent对象,并在每个text对象的点击监听器内加入指令:将需要传递的数字信息以字符串的形式储存在inent中,并调用present()函数执行页面跳转(从SelectAbilitySlice跳转至新创建的GameAbilitySlice)。由于intent是两个AbilitySlice的信息传递媒介,故当页面导航至新生成的GameAbilitySlice时,GameAbilitySlice可以接收到来自SelectAbilitySlice的intent,而这个intent也是携带重要的数字信息的(点击不同的text组件,intent所携带的数字信息也不同)。关于intent的接收,笔者将在后文阐述。
完成上述操作后,我们打开MainAbilitySlice,设置其页面导航路由,使得我们在主界面点击“开始游戏”后,系统界面可以从主界面跳转至关卡选择界面:
再打开MainAbility,将PageAbility默认展示界面改为InitialAbilitySlice:
完成以上操作后,我们可以打开模拟机查看效果:当界面跳转至游戏的主界面时,我们点击“开始游戏”,游戏则会跳转到关卡选择的画面。
点击:
导入更多的数独题目
在GameAbilitySlice合适的位置加入如下八个数组(局部变量),其中,前四个数组用做数独题答案,后四个数组则将用于题目的初始化、与用户交互。
之后,定义一个新的二维数组grids_initial(可以是局部变量也可以是局部变量):
先找到之前用于创建网格区域的二重for循环:
然后进行如下修改(即将数组grid_c0改为数组grids_initial):
这样以后,grids_initial就作为唯一用于生成游戏题目的数组变量了。
最后,删除之前在onStart()函数内添加的以下赋值代码:
获取intent
终于来到最后一个环节了。在前文的内容中,我们已经实现了一个功能:系统从SelectAbilitySlice导航至GameAbilitySlice时,GameAbilitySlice可以接收到包含数字信息的intent。
那么如何获取intent中的信息呢?如下列代码所示,我们通过getStringParam方法接收从SelectAbilitySlice传入的intent,并提取其携带的字符串信息(其所对应的键是"level"),再将此字符串转化为整形数据,最后存储在一个新声明的整型变量L中。因为intent中存储的字符串代表用户想要进入的关卡,所以在得到L以后,我们通过switch来判断用户点击的是第几关,并将对应关卡的题目与答案分别赋给三个数组变量:grids_win,grids_input与grids_initial。
这样以后,当用户进入不同关卡时,GameAbilitySlice的题目会根据grids_initial初始化,判断游戏成功与否的Gamesuccess()函数也会获取对应的信息与成功条件,我们也就实现了游戏处于关卡选择页面时进入不同关卡的页面跳转逻辑与功能。
此时我们可以打开模拟器查看交互效果:
点击“第二关”:
进入第二关:
结语
本期的内容就先分享到这里,更多关于数独小游戏项目精彩的内容我将在下期继续为大家揭晓。