小学生系列之七——猜数游戏(1)
一、功能描述
游戏自动出题——生成一个1~100之间的随机数,玩家输入猜测值,并统计猜测次数,猜中后显示本次猜中所用次数以及最小猜中次数;猜中之后,玩家可以选择出新题,或退出游戏。
二、用户界面
三、组件命名及属性设置
组件类型 |
命名 |
属性 |
属性值 |
屏幕 |
Screen1 |
标题 |
猜数游戏 |
水平对齐 |
居中 |
||
水平布局 |
水平布局1 |
宽度 |
充满 |
按钮 |
出题 |
宽度 |
充满 |
显示文本 |
出题 |
||
启用 |
取消勾选 |
||
退出 |
显示文本 |
退出 |
|
水平布局 |
水平布局2 |
宽度 |
98% |
标签 |
标签1 |
显示文本 |
猜测次数: |
猜测次数 |
显示文本 |
0 |
|
水平布局 |
水平布局3 |
宽度 |
98% |
标签 |
标签2 |
显示文本 |
最少次数: |
最少次数 |
显示文本 |
100 |
|
标签3 |
宽度 |
充满 |
|
显示文本 |
题目数: |
||
文本对齐 |
居右 |
||
题目数 |
宽度 |
50像素 |
|
显示文本 |
0 |
||
水平布局 |
水平布局4 |
宽度 |
充满 |
文本输入框 |
猜测值 |
字号 |
36 |
高度 |
80像素 |
||
宽度 |
充满 |
||
提示 |
空 |
||
仅限数字 |
勾选 |
||
文本对齐 |
居中 |
||
按钮 |
确定 |
高度、宽度 |
80像素 |
显示文本 |
确定 |
||
标签 |
提示 |
显示文本 |
输入数字,然后点击确定 |
文本对齐 |
居中 |
注:表格中的粗线界定了布局组件与可视组件之间的包含关系。
四、页面逻辑
1、游戏开始时:
自动生成目标值——一个1~100之间的随机数;
题目数显示为1;
最小猜中次数为100;
禁用出题按钮;
2、玩家在输入框中输入猜测结果,并点击确定按钮:
如果猜测值等于目标值:
a)提示“猜中了!”;
b)比较最小次数与猜测次数,并更新最小次数的显示结果;
c)启用出题按钮;
如果猜测值大于目标值,则提示“大了!”;
如果猜测值小于目标值,则提示“小了!”;
统计并显示猜测次数;
3、玩家猜中结果后,可以点击出题按钮:
生成新的目标值;
禁用出题按钮;
猜测次数归零;
显示题目数+1;
4、退出游戏:玩家可以在任何时候选择退出游戏。
五、认识代码块
1、随机数
图中的代码块用来生成随机整数,它给出的值可能是1~100之间的任意一个整数。随机数是游戏开发中不可缺少的工具,它产生了不确定性,从而增加了游戏的趣味性与难度。1与100这两个值可以随意修改,我们这里就采用它的默认值。
2、全局变量
出题时生成的随机数只是一个数值,它就像我们在路上遇到的陌生人,如果你不记下他的名字和电话号码,他很快就会消失在茫茫人海之中,再也难以寻见。在程序中要向记住某个值,就要用到变量,如上图所示,变量的名字(目标值),就像剧本中主角的名字一样重要,一个有意义的名字,会让开发过程变得轻松和顺畅,也让代码易于阅读。你可以读读看下图中的代码:“如果猜测值(的显示文本)=目标值,则……”,这样的代码意图明确,表明我们的思路也很清晰。
3、组件属性值等同于全局变量
上图中代码块用于更新题目数及猜测次数,这里有两个技术要点需要说明:
(1) 新值 = 原有值 + 1 ,这样的写法在程序中比比皆是,这里的等号不同于数学中的等号,它代表了两次具有先后顺序的操作:
a) 时间点1(在先):取得某个量的当前值,进行加法运算,取得运算结果;
b) 时间点2(在后):将运算结果保存到变量中,或显示为组件的属性值;
(2) 如标题所说, 组件的属性值与全部变量具有相同的作用,它们都可以用来保存数据,不同的是,变量对于用户(应用的使用者)来说是不可见的,而组件的某些属性值对用户是可见的(如标签的显示文本)。
在实际开发中,巧妙地运用组件的属性值,可以减少全局变量的使用数量,进而减少程序对内存的占用。
4、按钮也可以显示图片
如上图所示,当猜对结果时,让确定按钮显示一张OK的图片,可以让用户界面更加友好,改善用户的使用体验,这也是应用开发中需要关注的地方。
5、标签的用法
标签在应用中有两种用法,一是用于显示固定不变的文字,如本应用中的标签1,用来显示“猜测次数:”;另一种用法如上图所示,标签在程序运行过程中显示的内容是可变的。
6、字串的拼接
在上面的图中,我们看到后面的三个代码块中,都使用了“拼字串”块,将某些可变的值与不变的值拼接在一起,起到提示用户的作用。就像数字可以进行加法运算一样,文本的拼接是文本类数据最常见的“运算”方法,目的在于生成一串可变的文本。
7、退出程序
如上图所示,退出程序的指令让应用停止运行,即退出应用。这项功能无法在AI伴侣中进行测试,只有将应用编译安装到手机上之后,这个指令才能生效。
六、操作技巧
1、定义过程提高代码复用性
如上图所示,在程序运行过程中,有两个环节涉及到出题操作,一是屏幕初始化时,另一个是点击出题按钮时。这里定义一个出题过程,分别在两个事件处理程序中调用该过程,提高了代码的复用性(复用:代码被重复利用)。
2、设置按钮组件的启用属性,来限定用户的行为,从而实现对程序的控制。
七、课后作业
1、思考;能否用组件的属性值替代全局变量“目标值”?
2、下列两种代码的运行结果相同,你更喜欢哪一种书写风格?为什么?
上图是确定按钮的点击事件处理程序——一段完整的代码
上图中定义了三个过程,并在确定按钮的点击事件处理程序中调用了三个过程。