shell案例分享之猜拳人机大战!

需求:猜拳人机大战

思路分析

电脑随机产生3个数中的一个数,每个数各代表剪刀石头布中的一个,我们再输入一个数与电脑产生的数进行比较,根据比较得出输赢。如果是多局就考虑使用循环实现。

脚本实现

(1)单次进行游戏

编写代码

[root@server ~]# vim caiquan.sh

在这里插入图片描述
给脚本执行权限并验证

[root@server ~]# chmod +x caiquan.sh
[root@server ~]# bash caiquan.sh
猜拳人机对战开始
剪刀:0 石头:1:2  请输入数字代表出拳(选择数字012): 1
你赢了
[root@server ~]# bash caiquan.sh
猜拳人机对战开始
剪刀:0 石头:1:2  请输入数字代表出拳(选择数字012): 0
你赢了
[root@server ~]# bash caiquan.sh
猜拳人机对战开始
剪刀:0 石头:1:2  请输入数字代表出拳(选择数字012): 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请输入数字代表出拳(选择数字012): 1
平局
剪刀:0 石头:1:2 这是第2请输入数字代表出拳(选择数字012): 2
平局
剪刀:0 石头:1:2 这是第3请输入数字代表出拳(选择数字012): 1
你输了
剪刀:0 石头:1:2 这是第4请输入数字代表出拳(选择数字012): 0
平局
剪刀:0 石头:1:2 这是第5请输入数字代表出拳(选择数字012): 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局"

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值