小游戏AB猜数字
这个游戏由来已久。记得我小学的时候流行过电子词典,就是袖珍版的笔记本电脑。主要功能是查英语单词的翻译。记得当时我手里这款里边有几种小游戏,现在还记得的有一个养猫游戏,每天给它喂食、给它球玩之类的。另一个记得的就是这个猜数字的游戏,当时觉得还挺难的,经常无法通关。最近又在某视频平台看到有人玩,于是想拿出来再玩玩。
最近正好在整理 shell 编程相关的知识,就用 shell 写一个小游戏吧。正好这个游戏的逻辑不复杂。游戏名实在是忘了,就叫它AB猜数字吧,lol
先介绍一下游戏规则。每局游戏会生成一个随机排列的四位数字,四个数字不重复。玩家有8次机会给出自己的答案。如果数字和位置都正确,用A标记;如果数字正确但位置错误,用B标记。比如正确答案是2478,如果玩家给出的答案是1286,返回的标记是0A2B,如果玩家给出的答案是2487,返回的标记是2A2B。
好的,规则就这么一点儿。
下边来看一下代码实现逻辑:
第一步,生成随机四位数字作为正确答案:
# 创建数组,元素是0到9
num_array=( $(seq 0 9) )
# 定义一个变量amount, 生成随机数使用
amount=10
# 定义一个空数组 bingo,用来放置生成的四个数字
declare -a bingo
# 定义变量i, 作为循环变量
i=0
# 四次循环,因为答案是四个数字
while [ $i -lt 4 ]
do
# num 是 1-10 的随机数
num=$((RANDOM%amount))
# n 是 以 num 为索引从数组中取出的一个数字(0到9)
n=${num_array[$num]}
# 如果在之前的循环中已经取出了数字,就直接进入下一次循环
if [ -z "$n" ]
then
continue
else
# 将取出的数字存到数组 bingo 中
bingo[$i]=$n
# 将取出的数字从原数组中删除,避免出现重复数字
unset 'num_array[$n]'
fi
# 索引自增
(( i ))
done
第二步,游戏进行:
# 记录A结果的变量
a_result=0
# 记录B结果的变量
b_result=0
# 记录游戏次数
count=0
# 整个进行阶段使用一个 while 循环包起来,最主要的功能是读取用户输入
while read -rp "请输入你的答案:" ans
do
# 如果给出的答案不足四个数字,打印错误
if [ ${#ans} -ne 4 ]
then
echo "格式错误"
continue
else
# 这里用了双层 for 循环,分别比较正确答案和给出的答案的每一位数字是否相同
for bingo_index in {0..3}
do
for ans_index in {0..3}
do
# 如果数字相同且位置也相同,记录A的结果的变量 a_result 自增1
# 如果数字相同但位置不相同,记录B的结果的变量 b_result 自增1
if [ "${bingo[$bingo_index]}" -eq "${ans:${ans_index}:1}" ]
then
if [ "$bingo_index" -eq "$ans_index" ]
then
(( a_result ))
break
else
(( b_result ))
break
fi
fi
done
done
# 如果 a_result 等于4,也就是答案正确,游戏结束,打印恭喜玩家字样
if [ "$a_result" -eq 4 ]
then
echo "恭喜你答对了!"
exit 1
else
# 如果 a_result 不等于4,打印当前的答案状态,即xAyB,并打印剩余猜测次数
echo "${a_result}A${b_result}B 加油!你还有$(( 7 - count ))次机会~"
fi
# 标记当前次数的变量 count 自增 1
(( count ))
# 如果 count 等于8,也就是说这是最后一次,打印失败字样,并打印正确答案
if [ "$count" -eq 8 ]
then
echo "你已经尝试8次了,挑战失败"
echo "正确答案是:${bingo[*]}"
exit 1
fi
# 每次循环之后清空 a_result 和 b_result
a_result=0
b_result=0
fi
done
游戏截图:
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggebhg
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13