Shell脚本实现的猜数字小游戏

 更新时间:2014年12月23日 10:20:48   投稿:junjie  
这篇文章主要介绍了Shell脚本实现的猜数字小游戏,本文的猜数字规则相对一般规则的猜数字可能难度要大不少,需要的朋友可以参考下

生成的密码和用户输入可以接受重复数字。
所以相对一般规则的猜数字可能难度要大不少。

本版本规则:

A--数字对,位置也对
B--排除A的结果后,数字对,但位置不对

开始后,系统化初始化一个4位可重复数字,如“1223”。假设用户第一次输入“1234”,那么系统将提示“2A1B”,前两位数字“12”相同并且位置也相同,为“2A”。后两位数字中,用户输入的“3”与密文中“3”相同,但两者位置不同,则为“1B”,最终结果为“2A1B”。

再假设用户此时输入“1232”,那么结果则为“2A2B”,计算方法与前次一样。

代码如下:

#!/bin/bash
clear
echo
echo "###################################################################"
echo "# this is a bash-shell game write by Email:breeze7086@gmail.com #"
echo "# the game called *digits*,and this version have repeated numbers #"
echo "#              version 1.0              #"
echo "###################################################################"
echo -e "\n\n"
declare INPUT
declare PASSWORD
declare A
declare B
declare X
declare Y
declare LOOP
#This funtion init the variable PASSWORD that user need to guess
init_password()
{
    PASSWORD=`echo $(($RANDOM%10000))`
    echo $PASSWORD | grep '^[0-9]\{4\}$' >/dev/null 2>&1
    if [ $? != 0 ]
    then
        init_password
    else
        input
    fi
}
#This funtion accept the input from user's keyboard
input()
{
    echo -n "please input a number between 0000-9999:"
    read INPUT
    echo $INPUT | grep '^[0-9]\{4\}$' >/dev/null 2>&1
    if [ $? != 0 ]
    then
        echo "retry a number between 0000-9999 and do not input a char"
        input
    else
        judge
    fi
}
#This funtion is the main funtion
judge()
{
    X=$INPUT
    Y=$PASSWORD
    while [ $INPUT != $PASSWORD ]
    do
        A=0
        B=0
        judge_a
        judge_b
        LOOP=`expr $LOOP + 1`
        echo "****************************"
        echo "*      "$A"A"$B"B      *"
        echo "****************************"
        input
    done
}
#This funtion count the variable A's value
judge_a()
{
        for i in `seq 4`
        do
            VAR_INPUT=`expr substr "$X" $i 1`
            for j in `seq 4`
            do
                VAR_PASSWORD=`expr substr "$Y" $j 1`
                if [[ $VAR_INPUT = $VAR_PASSWORD && $VAR_INPUT != "" && $VAR_PASSWORD != "" && $i = $j ]]
                then
                    A=`expr $A + 1`
                    X=`expr substr $X 1 "$[$i-1]"``expr substr $X "$[$i+1]" 4`
                    Y=`expr substr $Y 1 "$[$i-1]"``expr substr $Y "$[$i+1]" 4`
                    judge_a
                fi
            done
        done
}
#This funtion count the variable B's value
judge_b()
{
        for i in `seq 4`
        do
            VAR_INPUT=`expr substr "$X" $i 1`
            for j in `seq 4`
            do
                VAR_PASSWORD=`expr substr "$Y" $j 1`
                if [[ $VAR_INPUT = $VAR_PASSWORD && $VAR_INPUT != "" && $VAR_PASSWORD != "" ]]
                then
                    B=`expr $B + 1`
                    X=`expr substr "$X" 1 "$[$i-1]"``expr substr "$X" "$[$i+1]" 4`
                    Y=`expr substr "$Y" 1 "$[$j-1]"``expr substr "$Y" "$[$j+1]" 4`
                    judge_b
                fi
            done
        done
}
#This is the begin of script
LOOP=1
init_password
echo "#############################################"
echo "#congratulations!You have tried $LOOP times!  #"
echo "#    The password is $PASSWORD !       #"
echo "#############################################"

相关文章

  • shell脚本换行问题实战记录

    shell脚本换行问题实战记录

    换行相信大家都不陌生,下面这篇文章主要给大家介绍了关于shell脚本换行问题的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Bash Shell中双引号中的感叹号问题小结

    Bash Shell中双引号中的感叹号问题小结

    当你在双引号中使用感叹号时,如果你在双引号中直接使用感叹号,它可能会被解释为历史扩展的一部分,这篇文章主要介绍了Bash Shell中双引号中的感叹号问题小结,需要的朋友可以参考下
    2024-03-03
  • Bash Shell脚本学习小结

    Bash Shell脚本学习小结

    今天需要写一个Shell脚本。很简单,判断一个日志文件是否大大于2G,如果大于2G则删除。久了没有写bash,竟然一点都想不起来写了。于是复习了一下,下面对今天的学习做个小结
    2013-01-01
  • 一天一个shell命令 文本操作系列-comm命令用法

    一天一个shell命令 文本操作系列-comm命令用法

    这篇文章主要介绍了linux系统下的comm命令是一个非常实用的文件对比命令,需要的朋友可以参考下
    2016-05-05
  • 使用Linux shell脚本实现FTP定时执行批量下载指定文件

    使用Linux shell脚本实现FTP定时执行批量下载指定文件

    使用FTP定时批量下载指定文件的shell脚本,具体实例介绍如下所示,需要的朋友参考下吧
    2017-04-04
  • CentOS下redis自启动shell脚本

    CentOS下redis自启动shell脚本

    这篇文章主要介绍了CentOS下redis自启动shell脚本,使用此脚本可以加入系统服务,实现redis机启动,并且包含了如启动、停止、重启等功能命令,需要的朋友可以参考下
    2014-08-08
  • Shell编程条件测试的实现

    Shell编程条件测试的实现

    Shell脚本的条件测试可以用于测试字符串、文件状态和数字。本文就详细的介绍一下Shell编程条件测试,具有一定的参考价值,感兴趣的可以了解一下
    2021-11-11
  • Shell脚本实现监控swap空间使用情况和查看占用swap的进程

    Shell脚本实现监控swap空间使用情况和查看占用swap的进程

    这篇文章主要介绍了Shell脚本实现监控swap空间使用情况和查看占用swap的进程,曾经有一段时间机器的swap不停上涨,监控后发现是一些java进程占用swap空间后,完全不释放,杀死这些java进程后,释放swap,需要的朋友可以参考下
    2014-12-12
  • Linux命令之ps命令使用详解

    Linux命令之ps命令使用详解

    这篇文章主要给大家介绍Linux命令之ps命令使用方法,文中有详细的代码示例,对我们学习Linux命令有一定的帮助,感兴趣的同学可以参考阅读下
    2023-06-06
  • shell 提取文件名和目录名的方法实现

    shell 提取文件名和目录名的方法实现

    本文主要介绍了shell 提取文件名和目录名的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02

最新评论