Linux\bash\Shell\vim使用while do循环制作猜拳小游戏 并是实现自动猜想

您所在的位置:网站首页 基于android的猜拳小游戏 Linux\bash\Shell\vim使用while do循环制作猜拳小游戏 并是实现自动猜想

Linux\bash\Shell\vim使用while do循环制作猜拳小游戏 并是实现自动猜想

2024-06-12 07:49| 来源: 网络整理| 查看: 265

Shell使用while do循环制作猜拳小游戏

最近看《Linux就该这么学》这本书想了解一下,在while 条件循环语句章节中看见了一个猜价格小游戏示例,示例如下: Cai.sh

#!/bin/bash SUIJISHU=$(expr $RANDOM % 1000) COUNT=0 echo "商品实际价格在0~999,猜猜看是多少?" while true do read -p "请输入你猜的价格:" NUMBER let COUNT++ if [ $NUMBER -eq $SUIJISHU ] ; then echo "恭喜你答对了!价格是"$SUIJISHU echo "一共猜了$COUNT次" exit 0 elif [ $NUMBER -gt $SUIJISHU ] ;then echo "猜高了!" else echo "太低了!" fi done

实现效果: 使用 bash Cai.sh 命令运行

[root@VM-0-12-centos lei]# bash Cai.sh 商品实际价格在0~999,猜猜看是多少? 请输入你猜的价格:500 猜高了! 请输入你猜的价格:250 猜高了! 请输入你猜的价格:125 太低了! 请输入你猜的价格:200 猜高了! 请输入你猜的价格:190 猜高了! 请输入你猜的价格:180 猜高了! 请输入你猜的价格:170 猜高了! 请输入你猜的价格:160 猜高了! 请输入你猜的价格:150 猜高了! 请输入你猜的价格:140 猜高了! 请输入你猜的价格:130 太低了! 请输入你猜的价格:135 猜高了! 请输入你猜的价格:134 恭喜你答对了!价格是134 一共猜了13次

猜了13次才猜对,这游戏让我有种堵得慌的赶脚,那么我就在想,可不可以写一个机器自己来猜的脚本呢?

首先我想的模式是我来只顶数字范围,机器来进行猜想,那么就有以下问题: 机器每次输入的值怎么计算,肯定不能让计算机一个一个的去试错。那我所能想到的办法就是折中来试,首次猜想的价格应该为输入价格的一半,之后每次猜的价格应该加上或减去与上次价格的一半,公式:总结出来应该会有司重情况 首次猜想价格:我输入的价格 / 2 = 当前价格 猜想价格高了【不存在猜想低价时】:(我输入的价格 - 当前价格) / 2 = 新猜想价格 猜想价格高了【存在猜想低价时】:当前价格 -(当前价格 - 低猜想价格)/ 2 = 新猜想价格 猜想价格低了【不存在猜想高价时】:当前价格 +(我输入的价格 - 当前价格) / 2 = 新猜想价格 猜想价格低了【存在猜想高价时】:当前价格 +(高猜想价格 - 当前价格)/ 2 = 新猜想价格

捋下逻辑,感觉可以,上手试验: Cai3.sh

#!/bin/nash #read 接收控制台指令 并赋值给FANWEI read -p "请输入数字猜想的范围:(请输入正整数)" FANWEI #生成随机数 在你输入的范围里 SUIJISHU=$(expr $RANDOM % $FANWEI) #声明次数 COUNT=0 #提示猜价格 echo "商品实际价格在0~$FANWEI之间,猜猜看是多少?" #定义程序首次猜想的数字 SHOU=$(expr $FANWEI / 2) #声明用于保存高价的变量 GAO=0 #声明用于保存低价的变量 DI=0 #开始while循环 条件是一直循环 while true do #let是bash的计算工具 使每次循环次数+1 let COUNT++ #输出一下细节 echo "第$COUNT次 范围在:$FANWEI 实际价格是:$SUIJISHU 当次出价为:$SHOU 高价是:$GAO 低价是:$DI" #判断猜想的是否和随机数相等 if [ $SHOU -eq $SUIJISHU ] ; then echo "恭喜你答对了!价格是"$SUIJISHU echo "一共猜了$COUNT次" #退出循环 exit 0 #判断猜想的价格是否大于随机数 elif [ $SHOU -gt $SUIJISHU ] ; then echo "猜高了!当前价格:$SHOU 实际价格:$SUIJISHU " #判断是否存在低价 如果不存在则为首次猜想价格 if [ $DI -eq 0 ] ; then echo "首次猜想进入高价区" #记录高猜想的值 GAO=$SHOU echo "计算下次猜想价格:$SHOU/2" #首次进入高价区直接数字切半再猜 SHOU=$(expr $GAO / 2) #如果不为首次猜想 else echo "进入高价区(存在上一次低价:$DI)" #记录高猜想值 GAO=$SHOU #计算出高价与低价的区间 GAOA=$(expr $GAO - $DI) #把区间切半 GAOO=$(expr $GAOA / 2) echo "计算下次猜想价格:$GAO-($GAO-$DI)/2" #高价减去区间的一半赋值给猜想数 SHOU=$(expr $GAO - $GAOO) #结束高价区的判断 fi #判断猜想的价格是否小于随机数 elif [ $SHOU -lt $SUIJISHU ] ; then echo "猜低了!当前价格:$SHOU 实际价格:$SUIJISHU " #判断是否存在高价 不存在则为首次猜想价格 if [ $GAO -eq 0 ] ; then echo "首次猜想进入低价区" #记录低猜想值 DI=$SHOU #使用输入的范围数减去低价格 II=` expr $FANWEI - $DI ` #II切半后可得出下次要增长的金额 EI=` expr $II / 2 ` echo "计算下次猜想价格:$DI+($FANWEI-$DI)/2" #计算出下次出价数 SHOU=$( expr $EI + $DI ) #如果不是首次猜想价格 else echo "进入低价区(存在上一次高价:$GAO)" DI=$SHOU DII=` expr $GAO - $DI ` EI=` expr $DII / 2 ` echo "计算下次猜想价格:$DI+($GAO-$DI)/2" SHOU=`expr $EI + $DI ` #结束低价格判断 fi else echo "操作有误,输入范围需在1~9999999999999999999 结束程序!" exit 0 fi done

接下来运行结果:bash Cai3.sh

[root@VM-0-12-centos lei]# bash Cai3.sh 请输入数字猜想的范围:(请输入正整数)1000 商品实际价格在0~1000之间,猜猜看是多少? 第1次 范围在:1000 实际价格是:865 当次出价为:500 高价是:0 低价是:0 猜低了!当前价格:500 实际价格:865 首次猜想进入低价区 计算:500+(865-)/2 下次出价:750 第2次 范围在:1000 实际价格是:865 当次出价为:750 高价是:0 低价是:500 猜低了!当前价格:750 实际价格:865 首次猜想进入低价区 计算:750+(865-)/2 下次出价:875 第3次 范围在:1000 实际价格是:865 当次出价为:875 高价是:0 低价是:750 猜高了!当前价格:875 实际价格:865 进入高价区(存在上一次低价:750) 计算:875-(875-750)/2 下次猜想价格为:813 第4次 范围在:1000 实际价格是:865 当次出价为:813 高价是:875 低价是:750 猜低了!当前价格:813 实际价格:865 进入低价区(存在上一次高价:875) 计算:813+(875-813)/2 下次出价 :844 第5次 范围在:1000 实际价格是:865 当次出价为:844 高价是:875 低价是:813 猜低了!当前价格:844 实际价格:865 进入低价区(存在上一次高价:875) 计算:844+(875-844)/2 下次出价 :859 第6次 范围在:1000 实际价格是:865 当次出价为:859 高价是:875 低价是:844 猜低了!当前价格:859 实际价格:865 进入低价区(存在上一次高价:875) 计算:859+(875-859)/2 下次出价 :867 第7次 范围在:1000 实际价格是:865 当次出价为:867 高价是:875 低价是:859 猜高了!当前价格:867 实际价格:865 进入高价区(存在上一次低价:859) 计算:867-(867-859)/2 下次猜想价格为:863 第8次 范围在:1000 实际价格是:865 当次出价为:863 高价是:867 低价是:859 猜低了!当前价格:863 实际价格:865 进入低价区(存在上一次高价:867) 计算:863+(867-863)/2 下次出价 :865 第9次 范围在:1000 实际价格是:865 当次出价为:865 高价是:867 低价是:863 恭喜你答对了!价格是865 一共猜了9次

总结:

因为我只是看看书只是简单了解了一下Shell,对参数的运算不是很了解,反正我试了好多种方法想把计算公式合并在一行,可总是 报错,没办法我只能把 + - / 分开来写,如果有哪位懂得老兄可以评论指点一下,Shell怎么进行多元运算,哈哈哈哈


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3