外观
猜数字小游戏
一个有趣的命令行猜数字小游戏,系统随机生成 1~100 的数字,玩家通过提示猜测正确答案。
功能说明
这是一个交互式的猜数字游戏脚本,主要特性:
- 🎮 趣味互动 - 命令行游戏,简单有趣
- 🎯 智能提示 - 根据猜测给出"太大"或"太小"的提示
- 🎨 彩色输出 - 使用 ANSI 颜色让游戏更炫酷
- 📊 统计功能 - 记录猜测次数并给出评价
- ✅ 输入验证 - 检测无效输入,确保游戏体验
游戏规则
- 系统随机生成 1 到 100 之间的整数
- 玩家输入猜测的数字
- 系统给出提示:太大、太小或猜对了
- 根据猜测次数给出评价
演示效果
🎮 欢迎来到「猜数字小游戏」!
🎯 我已经想好了一个 1 到 100 之间的数字,你能猜中吗?
请输入你猜的数字 (1~100):50
📈 太小了!再猜大一点~
请输入你猜的数字 (1~100):75
📉 太大了!再猜小一点~
请输入你猜的数字 (1~100):63
📈 太小了!再猜大一点~
请输入你猜的数字 (1~100):69
🎉 恭喜你,猜对了!
🔢 答案就是:69
🎯 你总共猜了 4 次!
👍 不错哦,运气 + 智商在线!环境要求
运行环境
- 操作系统: Linux / macOS / WSL(Windows Subsystem for Linux)
- Shell: Bash 4.0+
- 终端支持 ANSI 颜色代码(大部分现代终端都支持)
依赖项
无需额外依赖,使用 Bash 内置功能即可运行。
安装方法
方式一:直接下载
# 下载脚本
wget https://cnb.cool/merma/ScriptsHub/-/raw/main/scripts/shell/ToolScript/guess_number.sh
# 添加执行权限
chmod +x guess_number.sh方式二:使用 curl
# 下载脚本
curl -O https://cnb.cool/merma/ScriptsHub/-/raw/main/scripts/shell/ToolScript/guess_number.sh
# 添加执行权限
chmod +x guess_number.sh方式三:克隆仓库
git clone https://cnb.cool/merma/ScriptsHub.git
cd ScriptsHub/scripts/shell/ToolScript
chmod +x guess_number.sh方式四:手动创建
直接复制下方的脚本源码,创建文件并保存。
使用方法
基本用法
# 运行游戏
./guess_number.sh或者:
# 使用 bash 命令运行
bash guess_number.sh游戏技巧
二分查找法(最优策略):
- 第一次猜 50(中间值)
- 如果太小,下一次猜 75(50-100 的中间值)
- 如果太大,下一次猜 25(1-50 的中间值)
- 以此类推,每次在剩余范围的中间位置猜测
使用这个策略,最多只需要 7 次就能猜中!
评分标准:
- 1-3 次:🏆 预言家级别!
- 4-6 次:👍 运气 + 智商在线!
- 7-10 次:😊 还可以,多练练就能更厉害!
- 10+ 次:😅 多猜几次就熟练啦!
脚本源码
点击展开查看完整源码
#!/bin/bash
# 颜色定义(可选,让提示更炫)
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
MAGENTA='\033[0;35m'
NC='\033[0m' # No Color
# 猜数字小游戏 - 命令行版本
# 系统随机生成 1~100 的数字,你来猜!
echo -e "\n🎮 欢迎来到「猜数字小游戏」!"
echo -e "🎯 我已经想好了一个 1 到 100 之间的数字,你能猜中吗?\n"
# 生成 1~100 的随机数
target_number=$(( RANDOM % 100 + 1 ))
# 记录猜测次数
guess_count=0
# 开始猜!
while true; do
read -p "请输入你猜的数字 (1~100):" guess
# 检查输入是否为数字
if ! [[ "$guess" =~ ^[0-9]+$ ]]; then
echo -e "${RED}❌ 请输入一个有效的数字!${NC}"
continue
fi
guess_num=$guess
guess_count=$((guess_count + 1))
if [[ $guess_num -lt 1 || $guess_num -gt 100 ]]; then
echo -e "${YELLOW}⚠️ 请输入 1 到 100 之间的数字哦!${NC}"
elif [[ $guess_num -lt $target_number ]]; then
echo -e "${CYAN}📈 太小了!再猜大一点~${NC}"
elif [[ $guess_num -gt $target_number ]]; then
echo -e "${CYAN}📉 太大了!再猜小一点~${NC}"
else
echo -e "${GREEN}"
echo "🎉 恭喜你,猜对了!"
echo "🔢 答案就是:$target_number"
echo "🎯 你总共猜了 $guess_count 次!"
if [[ $guess_count -le 3 ]]; then
echo "🏆 哇,你是预言家吗?太神了!"
elif [[ $guess_count -le 6 ]]; then
echo "👍 不错哦,运气 + 智商在线!"
elif [[ $guess_count -le 10 ]]; then
echo "😊 还可以,多练练就能更厉害!"
else
echo "😅 没关系,多猜几次就熟练啦,再来一局?"
fi
echo -e "${NC}"
break
fi
done在 CNB 查看: guess_number.sh
代码解析
核心逻辑
# 1. 生成随机数
target_number=$(( RANDOM % 100 + 1 ))
# 2. 循环读取用户输入
while true; do
read -p "请输入你猜的数字 (1~100):" guess
# 3. 输入验证
if ! [[ "$guess" =~ ^[0-9]+$ ]]; then
echo "请输入有效数字"
continue
fi
# 4. 比较并给出提示
if [[ $guess_num -lt $target_number ]]; then
echo "太小了"
elif [[ $guess_num -gt $target_number ]]; then
echo "太大了"
else
echo "猜对了!"
break
fi
done关键技术点
随机数生成
RANDOM % 100 + 1生成 1-100 的随机数RANDOM是 Bash 内置的随机数变量
用户输入
read -p显示提示并读取输入- 输入验证使用正则表达式
^[0-9]+$
条件判断
[[ ]]双方括号支持更多表达式-lt(小于)、-gt(大于)进行数值比较
彩色输出
- ANSI 转义序列控制颜色
\033[0;31m红色,\033[0;32m绿色等\033[0m重置颜色
循环控制
while true无限循环continue跳过本次循环break退出循环
使用场景
- 🎮 休闲娱乐 - 工作间隙放松一下
- 📚 教学示例 - Shell 交互式脚本入门教程
- 🎓 算法学习 - 理解二分查找等算法
- 👨👩👧👦 亲子互动 - 和孩子一起玩数字游戏
扩展功能
你可以基于这个脚本进行扩展:
示例 1: 自定义难度
#!/bin/bash
echo "选择难度:"
echo "1. 简单 (1-50)"
echo "2. 中等 (1-100)"
echo "3. 困难 (1-500)"
read -p "请选择 [1-3]: " difficulty
case $difficulty in
1) MAX=50 ;;
2) MAX=100 ;;
3) MAX=500 ;;
*) MAX=100 ;;
esac
target_number=$(( RANDOM % MAX + 1 ))
echo "我想好了一个 1 到 $MAX 之间的数字..."示例 2: 添加计时功能
#!/bin/bash
start_time=$(date +%s)
# ... 游戏逻辑 ...
end_time=$(date +%s)
elapsed=$((end_time - start_time))
echo "用时:$elapsed 秒"示例 3: 记录最佳成绩
#!/bin/bash
SCORE_FILE="$HOME/.guess_number_best"
# 读取历史最佳成绩
if [[ -f "$SCORE_FILE" ]]; then
best_score=$(cat "$SCORE_FILE")
else
best_score=999
fi
# ... 游戏结束后 ...
if [[ $guess_count -lt $best_score ]]; then
echo "🎊 恭喜!创造新纪录!"
echo "$guess_count" > "$SCORE_FILE"
fi注意事项
提示
- 脚本在大多数 Linux 发行版和 macOS 上可以直接运行
- Windows 用户需要使用 WSL 或 Git Bash
- 确保终端支持 ANSI 颜色代码(现代终端基本都支持)
兼容性
RANDOM变量是 Bash 特有的,在 sh 中不可用- 正则表达式
=~需要 Bash 3.0+ - 彩色输出在某些老旧终端可能显示异常
常见问题
Q: 颜色显示不正常怎么办?
A: 可能是终端不支持 ANSI 颜色,可以修改脚本删除颜色代码,或者使用现代终端(如 GNOME Terminal、iTerm2、Windows Terminal)
Q: 可以修改数字范围吗?
A: 可以!修改这一行:
target_number=$(( RANDOM % 100 + 1 ))将 100 改为其他数字,比如改为 1000:
target_number=$(( RANDOM % 1000 + 1 ))Q: 运行提示 "Permission denied" 怎么办?
A: 需要添加执行权限:
chmod +x guess_number.shQ: 如何在游戏中途退出?
A: 按 Ctrl + C 强制退出游戏
学习价值
这个脚本包含了 Shell 编程的多个重要概念:
- ✅ 随机数生成
- ✅ 用户输入处理
- ✅ 循环结构(while)
- ✅ 条件判断(if-elif-else)
- ✅ 正则表达式验证
- ✅ 变量运算
- ✅ ANSI 颜色控制
- ✅ 逻辑控制(continue、break)
非常适合作为 Shell 交互式脚本的学习材料!
算法知识
二分查找法
这个游戏展示了经典的二分查找算法:
猜测范围:1 - 100
第1次猜:50 (中间值)
- 如果太小,范围变为:51 - 100
- 如果太大,范围变为:1 - 49
使用二分法,最多需要 ⌈log₂(100)⌉ = 7 次就能猜中!更新日志
v1.0.0 (2024-10-16)
- ✨ 初始版本发布
- 🎮 实现基本猜数字功能
- 🎨 添加彩色输出
- 📊 添加猜测次数统计
- 🏆 根据次数给出评价
相关资源
许可证
MIT License
提示: 这是一个寓教于乐的小游戏,快来试试你能用几次猜中吧!🎯