Shell脚本实现的猜数字小游戏
程序员文章站
2022-06-13 17:13:48
生成的密码和用户输入可以接受重复数字。
所以相对一般规则的猜数字可能难度要大不少。
本版本规则:
a--数字对,位置也对
b--排除a的结果后,数字对,但位置不对...
生成的密码和用户输入可以接受重复数字。
所以相对一般规则的猜数字可能难度要大不少。
本版本规则:
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 "#############################################"
上一篇: linux进程监控shell脚本代码
下一篇: Shell创建用户并生成随机密码脚本分享