文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-06-04 21:45

关注

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

本版本规则:

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 "nn"

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 "#############################################"

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯