Jogo Descubra a Senha - Parte 2
Vamos modificar o Jogo "Descubra a Senha".
É muito difícil achar a senha sabendo apenas se acertou ou errou cada dígito da senha.
Vamos fazer o computador indicar se cada dígito da senha é maior ou menor que o usuário tentou.
Por exemplo:
Se a senha é: 2345
E o usuário digitar: 5275
O computador deverá mostrar: -+-5
Isso indicará que:
O primeiro dígito da senha é menor que o número tentado
O segundo dígito da senha é maior que o número tentado
O terceiro dígito da senha é menor que o número tentado
O quarto dígito da senha é exatamente o número tentado
| descubra_senha2.sh |
senha1=$((RANDOM % 10 ))
senha2=$((RANDOM % 10 ))
senha3=$((RANDOM % 10 ))
senha4=$((RANDOM % 10 ))
for ((x=5;x>=1;x--));
do
resp=$(Xdialog --stdout --inputbox "Você tem $x chance(s) para achar a senha\n \
Qual senha você acha que é? \n \
Digite os quatros algarismos separados por um espaço exemplo: 1 4 3 2" 0 0)
resp1=${resp:0:1}
resp2=${resp:2:1}
resp3=${resp:4:1}
resp4=${resp:6:1}
if [ "$senha1" -lt "$resp1" ]; then resp1='-';
elif [ "$senha1" -gt "$resp1" ]; then resp1='+'; fi
if [ "$senha2" -lt "$resp2" ]; then resp2='-';
elif [ "$senha2" -gt "$resp2" ]; then resp2='+'; fi
if [ "$senha3" -lt "$resp3" ]; then resp3='-';
elif [ "$senha3" -gt "$resp3" ]; then resp3='+'; fi
if [ "$senha4" -lt "$resp4" ]; then resp4='-';
elif [ "$senha4" -gt "$resp4" ]; then resp4='+'; fi
if [[ $resp1 = "-" || $resp2 = "-" || $resp3 = "-" || $resp4 = "-" || $resp1 = "+" || $resp2 = "+" || $resp3 = "+" || $resp4 = "+" ]]
then
Xdialog --msgbox "$resp1 $resp2 $resp3 $resp4" 0 0
else
Xdialog --msgbox "Parabéns, você acertou a senha" 0 0
exit 0
fi
done
Xdialog --msgbox "Infelizmente você não descobriu a senha. A senha era: \n \
$senha1 $senha2 $senha3 $senha4" 0 0
|
Foi modificado o IF para verificar se o digito colocado pelo usuário é Maior ou Menor que o dígito da senha que o computador selecionou.
O incoveniente é que tivemos que tornar muito maior a linha que verifica se o usuário acertou o digito, ou errou.
Existe uma maneira de tornar essa linha menor?
A resposta é sim
A partir do Bash versão 3, é possível usar expressão regular nas condições IF
Para usar a expressão regular adicionamos um "~" após o sinal de "="
A linha ficará:
if [[ $resp1 =~ [-+] || $resp2 =~ [-+] || $resp3 =~ [-+] || $resp4 =~ [-+] ]]
Atenção! A expressão regular só funcionará se as condições dentro do IF estiverem entre dois colchetes [[ ]]
Se usar a condição entre 1 colchete [ ], o bash retornará erro
Nota: 8
Postado em: 2008-09-11