Skip to content

猜数字小游戏

约 2041 字大约 7 分钟

Shell游戏交互式教学演示

2024-10-16

一个有趣的命令行猜数字小游戏,系统随机生成 1~100 的数字,玩家通过提示猜测正确答案。

功能说明

这是一个交互式的猜数字游戏脚本,主要特性:

  • 🎮 趣味互动 - 命令行游戏,简单有趣
  • 🎯 智能提示 - 根据猜测给出"太大"或"太小"的提示
  • 🎨 彩色输出 - 使用 ANSI 颜色让游戏更炫酷
  • 📊 统计功能 - 记录猜测次数并给出评价
  • 输入验证 - 检测无效输入,确保游戏体验

游戏规则

  1. 系统随机生成 1 到 100 之间的整数
  2. 玩家输入猜测的数字
  3. 系统给出提示:太大、太小或猜对了
  4. 根据猜测次数给出评价

演示效果

🎮 欢迎来到「猜数字小游戏」!
🎯 我已经想好了一个 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

游戏技巧

二分查找法(最优策略):

  1. 第一次猜 50(中间值)
  2. 如果太小,下一次猜 75(50-100 的中间值)
  3. 如果太大,下一次猜 25(1-50 的中间值)
  4. 以此类推,每次在剩余范围的中间位置猜测

使用这个策略,最多只需要 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

关键技术点

  1. 随机数生成

    • RANDOM % 100 + 1 生成 1-100 的随机数
    • RANDOM 是 Bash 内置的随机数变量
  2. 用户输入

    • read -p 显示提示并读取输入
    • 输入验证使用正则表达式 ^[0-9]+$
  3. 条件判断

    • [[ ]] 双方括号支持更多表达式
    • -lt(小于)、-gt(大于)进行数值比较
  4. 彩色输出

    • ANSI 转义序列控制颜色
    • \033[0;31m 红色,\033[0;32m 绿色等
    • \033[0m 重置颜色
  5. 循环控制

    • 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.sh

Q: 如何在游戏中途退出?

A: 按 Ctrl + C 强制退出游戏

学习价值

这个脚本包含了 Shell 编程的多个重要概念:

  1. ✅ 随机数生成
  2. ✅ 用户输入处理
  3. ✅ 循环结构(while)
  4. ✅ 条件判断(if-elif-else)
  5. ✅ 正则表达式验证
  6. ✅ 变量运算
  7. ✅ ANSI 颜色控制
  8. ✅ 逻辑控制(continue、break)

非常适合作为 Shell 交互式脚本的学习材料!

算法知识

二分查找法

这个游戏展示了经典的二分查找算法:

猜测范围:1 - 100
第1次猜:50 (中间值)
  - 如果太小,范围变为:51 - 100
  - 如果太大,范围变为:1 - 49

使用二分法,最多需要 ⌈log₂(100)⌉ = 7 次就能猜中!

更新日志

v1.0.0 (2024-10-16)

  • ✨ 初始版本发布
  • 🎮 实现基本猜数字功能
  • 🎨 添加彩色输出
  • 📊 添加猜测次数统计
  • 🏆 根据次数给出评价

相关资源

许可证

MIT License


提示: 这是一个寓教于乐的小游戏,快来试试你能用几次猜中吧!🎯