shell案例分享之猜拳人机大战!
Posted 龙少。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell案例分享之猜拳人机大战!相关的知识,希望对你有一定的参考价值。
需求:猜拳人机大战
思路分析
电脑随机产生3个数中的一个数,每个数各代表剪刀石头布中的一个,我们再输入一个数与电脑产生的数进行比较,根据比较得出输赢。如果是多局就考虑使用循环实现。
脚本实现
(1)单次进行游戏
编写代码
[root@server ~]# vim caiquan.sh
给脚本执行权限并验证
[root@server ~]# chmod +x caiquan.sh
[root@server ~]# bash caiquan.sh
猜拳人机对战开始
剪刀:0 石头:1 步:2 请输入数字代表出拳(选择数字0,1,2): 1
你赢了
[root@server ~]# bash caiquan.sh
猜拳人机对战开始
剪刀:0 石头:1 步:2 请输入数字代表出拳(选择数字0,1,2): 0
你赢了
[root@server ~]# bash caiquan.sh
猜拳人机对战开始
剪刀:0 石头:1 步:2 请输入数字代表出拳(选择数字0,1,2): 2
你赢了
[root@server ~]#
执行结果
(2)一起进行5次游戏并统计结果输出
假定比赛5局,比完5局并统计相应的猜拳结果,可以对上面代码进行优化修改。
[root@server ~]# vim caiquan.sh
#!/bin/bash
#这是一个猜拳人机大战的脚本
#作者:古怪七
echo -e "\\e[32m猜拳人机对战开始\\e[0m"
win=0
ping=0
loss=0
for((i=1;i<=5;i++))
do
#提示输入你的出拳
read -p "剪刀:0 石头:1 步:2 这是第$i局 请输入数字代表出拳(选择数字0,1,2): " number
#定义一个变量随机数为电脑出的数值来代表出拳
com=`expr $RANDOM % 3`
case $number in
[0])
if [ $com -eq 0 ];then
echo "平局"
let ping=$ping+1
elif [ $com -eq 1 ];then
echo "你输了"
let loss=$loss+1
elif [ $com -eq 2 ];then
echo "你赢了"
let win=$win+1
fi
;;
[1])
if [ $com -eq 0 ];then
echo "你赢了"
let win=$win+1
elif [ $com -eq 1 ];then
echo "平局"
let ping=$ping+1
elif [ $com -eq 2 ];then
echo "你输了"
let loss=$loss+1
fi
;;
[2])
if [ $com -eq 0 ];then
echo "你输了"
let loss=$loss+1
elif [ $com -eq 1 ];then
echo "你赢了"
let win=$win+1
elif [ $com -eq 2 ];then
echo "平局"
let ping=$ping+1
fi
;;
*)
echo "你的输入错误,出拳错误"
;;
esac
done
let i=$i-1
echo "一共进行了$i局,你赢了$win局,平了$ping局,输了$loss局"
[root@server ~]# bash caiquan.sh
猜拳人机对战开始
剪刀:0 石头:1 步:2 这是第1局 请输入数字代表出拳(选择数字0,1,2): 1
平局
剪刀:0 石头:1 步:2 这是第2局 请输入数字代表出拳(选择数字0,1,2): 2
平局
剪刀:0 石头:1 步:2 这是第3局 请输入数字代表出拳(选择数字0,1,2): 1
你输了
剪刀:0 石头:1 步:2 这是第4局 请输入数字代表出拳(选择数字0,1,2): 0
平局
剪刀:0 石头:1 步:2 这是第5局 请输入数字代表出拳(选择数字0,1,2): 1
你输了
一共进行了5局,你赢了0局,平了3局,输了2局
(3)进行自定义多次游戏并统计最终结果
对以上脚本进行进一步优化。
[root@server ~]# vim caiquan.sh
#!/bin/bash
#这是一个猜拳人机大战的脚本
#作者:古怪七
echo -e "\\e[32m猜拳人机对战开始\\e[0m"
#定义一个变量为统计赢的局数
win=0
#定义一个变量为统计平的局数
ping=0
#定义一个变量为统计输的局数
loss=0
#定义一个变量为出拳输入错误的局数
cuo=0
#提示输入要对战的总局数
read -p "请输入你要进行对战的总局数:" n
for((i=1;i<=$n;i++))
do
#提示输入你的出拳
read -p "剪刀:0 石头:1 步:2 这是第$i局 请输入数字代表出拳(选择数字0,1,2): " number
#定义一个变量随机数为电脑出的数值来代表出拳
com=`expr $RANDOM % 3`
case $number in
[0])
if [ $com -eq 0 ];then
echo "平局"
let ping=$ping+1
elif [ $com -eq 1 ];then
echo "你输了"
let loss=$loss+1
elif [ $com -eq 2 ];then
echo "你赢了"
let win=$win+1
fi
;;
[1])
if [ $com -eq 0 ];then
echo "你赢了"
let win=$win+1
elif [ $com -eq 1 ];then
echo "平局"
let ping=$ping+1
elif [ $com -eq 2 ];then
echo "你输了"
let loss=$loss+1
fi
;;
[2])
if [ $com -eq 0 ];then
echo "你输了"
let loss=$loss+1
elif [ $com -eq 1 ];then
echo "你赢了"
let win=$win+1
elif [ $com -eq 2 ];then
echo "平局"
let ping=$ping+1
fi
;;
*)
echo "你的输入错误,出拳错误"
let cuo=$cuo+1
;;
esac
done
echo "一共进行了$n局,你赢了$win局,平了$ping局,输了$loss局,出拳输入错误$cuo局"
以上是关于shell案例分享之猜拳人机大战!的主要内容,如果未能解决你的问题,请参考以下文章