第五章 猜数字游戏:学习条件判断与循环逻辑
5.1 项目概述
猜数字游戏是经典的编程入门项目,它不仅能巩固你已经学到的变量和事件处理知识,还能让你首次接触到条件判断和循环逻辑这两个核心编程概念。在这个项目中,计算机会在1-100之间随机生成一个数字,玩家需要通过不断猜测来找到这个数字,每次猜测后系统会提示“大了”或“小了”,最终找到正确答案。
项目功能清单:
- 计算机随机生成1-100之间的整数
- 玩家通过文本框输入猜测的数字
- 系统判断猜测是否正确,并给出提示
- 记录并显示猜测范围的变化过程
- 最终猜中时显示胜利信息
5.2 界面设计
5.2.1 组件布局
这个游戏的界面非常简单,主要包含三个组件:
| 组件类型 | 组件名称 | 属性设置 | 功能说明 |
|---|---|---|---|
| 标签 | 标签1 | 文本:“1~100” |
显示游戏规则和猜测范围提示 |
| 文本框 | 文本输入框1 | 数字模式(仅限数字):真 | 玩家输入猜测数字 |
| 按钮 | 按钮1 | 文本:“猜” | 提交猜测 |
5.2.2 界面预览

注意: 这个界面设计非常简洁,专注于核心功能。在实际开发中,你可以根据喜好添加更多装饰性元素,如图片、背景颜色等。
5.3 游戏逻辑分析
猜数字游戏的核心算法是二分查找的简化版本。玩家每次猜测后,系统会根据猜测值与目标值的比较,缩小搜索范围:
5.4 代码实现
5.4.1 全局变量初始化
游戏开始时,需要初始化三个重要的全局变量:
这三个变量的作用:
- 随机数:计算机随机生成的目标数字
- 上次大数字:当前猜测范围的上限
- 上次小数字:当前猜测范围的下限
5.4.2 核心游戏逻辑
当玩家点击“猜”按钮时,执行以下逻辑:
5.5 关键技术点详解
5.5.1 变量的动态更新
游戏过程中,两个边界变量(上次大数字和上次小数字)会不断更新:
| 游戏状态 | 上次小数字 | 上次大数字 | 说明 |
|---|---|---|---|
| 初始状态 | 1 | 100 | 游戏开始,范围是1-100 |
| 猜测50,实际是30 | 1 | 50 | 50太大了,新的上限是50 |
| 猜测25,实际是30 | 25 | 50 | 25太小了,新的下限是25 |
| 猜测37,实际是30 | 25 | 37 | 37太大了,新的上限是37 |
| ... | ... | ... | 范围不断缩小 |
这种范围缩小算法是二分查找的核心思想,它能高效地定位目标值。
5.5.2 输入验证与错误处理
一个好的程序应该能够处理各种异常情况。在这个游戏中,我们实现了简单的输入验证:
- 空输入检查:防止玩家不输入数字就点击按钮
- 范围检查:确保输入的数字在有效范围内(1-100)
- 数字格式检查:通过设置文本框的
仅限数字属性为真,确保只能输入数字
5.5.3 随机数生成
随机数是游戏的核心。App Inventor提供了简单的随机数生成块:
在这个项目中,我们使用在 1 到 100 之间取随机整数来生成目标数字。每次游戏开始时,这个数字都是随机生成的,确保游戏的可玩性。
5.6 游戏策略与算法分析
对于这个游戏,玩家可以采用不同的猜测策略:
| 策略名称 | 具体方法 | 平均猜测次数 | 特点 |
|---|---|---|---|
| 随机猜测 | 每次在范围内随机猜一个数 | 约25次 | 简单但不高效 |
| 线性搜索 | 从1开始顺序猜测 | 平均50次 | 最坏情况需要100次 |
| 二分查找 | 每次猜范围中间的数 | 最多7次 | 最有效的策略 |
5.7 扩展与改进
5.7.1 功能扩展建议
| 扩展功能 | 实现思路 | 难度等级 |
|---|---|---|
| 记录猜测次数 | 添加计数器变量,每次猜测后加1 | ★☆☆ |
| 限制猜测次数 | 设置最大尝试次数,超过后游戏结束 | ★★☆ |
| 难度等级选择 | 让玩家选择范围(如1-50、1-200等) | ★★☆ |
| 倒计时模式 | 在规定时间内猜出数字 | ★★★ |
| 对战模式 | 两人轮流猜,看谁用的次数少 | ★★★ |
5.7.2 界面美化建议
- 添加视觉反馈:根据猜测结果改变标签颜色(如红色表示“大了”,蓝色表示“小了”)
- 显示历史记录:在列表框中显示每次猜测的数字和结果
- 添加动画效果:猜中时显示庆祝动画
- 声音反馈:不同的结果播放不同的音效
5.7.3 代码优化建议
- 提取重复代码:将清空输入框的操作提取到单独的位置
- 添加输入验证函数:创建一个专门的函数来验证输入是否有效
- 使用列表存储历史记录:便于显示和分析玩家的猜测模式
- 添加游戏重置功能:猜中后可以重新开始新游戏
5.8 常见问题与调试技巧
5.8.1 游戏逻辑问题
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 游戏一开始就显示“猜对了” | 随机数生成范围错误 | 检查随机数生成块,确保范围是1-100 |
| 范围更新不正确 | 条件判断逻辑错误 | 逐层检查条件判断块,确保逻辑正确 |
| 输入超过100时没有提示 | 条件判断顺序错误 | 确保检查超过100的条件在其他条件之前 |
5.8.2 输入处理问题
- 输入非数字字符:确保文本框的
仅限数字属性设置为真 - 输入小数:同样通过
仅限数字属性限制 - 输入负数:可以通过额外的条件判断来处理
5.8.3 变量状态问题
- 游戏无法重新开始:添加重置函数,重新初始化所有变量
- 范围变量不会更新:检查赋值语句是否正确执行
- 多个屏幕的状态同步:如果有多屏,确保使用正确的变量作用域
5.9 项目总结与学习收获
通过猜数字游戏项目,你已经掌握了以下重要编程概念:
- 条件判断:使用
如果...则...否则...块实现复杂逻辑分支 - 变量更新:在程序运行过程中动态修改变量的值
- 算法思维:理解并实现了二分查找算法的简化版本
- 输入验证:处理用户输入的各种异常情况
- 游戏状态管理:跟踪和更新游戏的当前状态
核心概念回顾:
- 全局变量:在整个应用中都可以访问的变量
- 条件嵌套:在一个条件语句内部包含另一个条件语句
- 范围缩小算法:通过不断缩小搜索范围来高效定位目标
- 用户交互设计:设计简单直观的用户界面和交互流程
这个项目虽然代码量不大,但包含了编程中的多个核心概念。理解这些概念对你学习更复杂的编程技术至关重要。
下一步建议:尝试实现5.7节中的扩展功能,特别是“记录猜测次数”和“难度等级选择”。这将帮助你巩固变量和条件判断的使用,并为学习列表和函数打下基础。
章节练习:
- 添加一个计数器,显示玩家用了多少次才猜中数字
- 添加“重新开始”按钮,点击后重新生成随机数并重置游戏状态
- 添加难度选择:简单(1-50)、中等(1-100)、困难(1-200)
- 添加音效:猜中时播放胜利音效,猜错时播放提示音效
- 将玩家的猜测历史记录在列表中,并显示出来
完成这些练习后,你将对这个猜数字游戏有更深入的理解,并能够创建更复杂、功能更丰富的应用程序。