Jogo da Senha

Publicado por Marcelo Oliver (última atualização em 30/06/2018)

[ Hits: 1.349 ]

Download Jogo_da_Senha.sh




É gerada uma senha com a quantidade de dígitos a sua escolha (parâmetro-[Dd]N) e o objetivo é acertar a mesma no tempo definido (parâmetro -[Tt]N).

A cada jogada, são mostrados os números e as posições corretas.

O tempo e os dígitos padrão, são respectivamente,   60 segundos e 4 dígitos.

  



Esconder código-fonte

#!/bin/bash

VERSAO="01 - Junho/2018"
cb='\e[0;38;5;33m'
cr="\e[0;38;5;196m"
cg="\e[0;38;5;2m"
cy='\e[0;38;5;11m'
cfim="\e[m"
COLS=$(tput cols)
LINES=$(tput lines)
cols=(%$(((COLS-50)/2))s)
qtdgt=4
tempo=90

LINHA() { 
   [ $1 ] && NN="$1" || NN="23"   
   printf '%*s' "$NN" '' | sed "s/ /—/g" ; }

USO() {
   printf "$cols$(LINHA 51)
"$cols""$cy"Modo de Uso:"$cfim"
"$cols"$0 -[Hh]: Mostra este texto.
"$cols"$0 -[Vv]: Mostra Versão.
"$cols"$0 -[Ss]: Default: $tempo Seg/$qtdgt Dig.
"$cols"$0 -[Tt]n  -[Dd]n
"$cols"T Define duração: (n <= 3600).
"$cols"D Define dígitos: (n <= 10).
"$cols"Ex: $0 -T 300 -D 7.
"$cols"LIMITE de 300 segundos, SENHA com 07 digitos.
"$cols"$(LINHA 51)\n"
printf "\n${cy}%$(((COLS-43)/2))s$(LINHA 43)\n%$(((COLS-45)/2))s<< TECLE [Ss] PARA INICIAR em MODO DEFAULT >>\n%$(((COLS-43)/2))s$(LINHA 43)\n${cfim}";
read -n1 resp;
[[ $resp =~ S|s ]] && $0 -s || tput clear;exit 0;
}

AJUDA() {
   printf "$cols$(LINHA 51)
"$cols""$cy"Objetivo:"$cfim"
"$cols"Acertar a combinação numérica no tempo definido.
"$cols"As colunas: \"| N |\", \"| D |\" e \"| P |\"
"$cols"Indicam respectivamente:
"$cols"Nºs jogados, DIGITOS corretos e POSIÇÕES corretas.
"$cols"$(LINHA 51)\n"
USO
}

MSGERRO() { printf "$cr\e[2;17f<PARAMETRO INVÁLIDO>\n$cfim" ; USO ; }

INIC_00() {
tput clear;[[ ! $@ =~ ^\-.+ ]] && MSGERRO

while getopts ':SsHhVvT:t:D:d:' OPCAO; do
    case $OPCAO in
    H|h) AJUDA ;;
    S|s) ;; #MODO DEFAULT
    T|t) (($((10#${OPTARG})) > 0 && $((10#${OPTARG})) <= "3600" )) && tempo=${OPTARG} ;;
    V|v) printf "$cy\e[2;$(((COLS-25)/2))f$(LINHA 25)\e[3;$(((COLS-27)/2))f| Versão: $VERSAO |\e[4;$(((COLS-27)/2))f|  https://goo.gl/dYY7i9  |\e[5;$(((COLS-25)/2))f$(LINHA 25)$cfim\n\n";exit 0 ;;
    D|d) (( ${OPTARG} > 0 && ${OPTARG} <= 10 )) && qtdgt="${OPTARG}" ;;
    :) printf "$cr\e[2;17fOPÇãO \"-${OPTARG}\", REQUER ARGUMENTO."$cfim"\n" >&2 ; USO ;;
    ?) printf "$cr\e[2;17fOPÇãO INVáLIDA: \"-${OPTARG}\""$cfim"\n" >&2 ; USO ;;
    esac
done
    [[ $LINES -lt 45 || $COLS -lt $((50+(4*$qtdgt+15))) ]] && { printf "${cr}\e[2;$(((COLS-43)/2))f$(LINHA 43)\e[3;$(((COLS-45)/2))f| Ajuste a tela para 45 linhas x $((50+(4*$qtdgt+15))) Colunas |\e[4;$(((COLS-43)/2))f$(LINHA 43)\n\n" ; sleep 2.5 ; exit ; }
for n in $(seq 1 $qtdgt);do SENHA="$((RANDOM%10))$SENHA";sleep 0.125;done;
count=0;
INIC_01 "$tempo" "$qtdgt" ;
}

INIC_01() {
   for T in {31..00};do printf "\e[3;$(((COLS-(31+${#tempo}))/2))f${cb}Acerte a senha em até $tempo segundos\e[4;$(((COLS-31)/2))f••• Iniciando em: \e[1;38;5;$((10#$T+1))m [00:%02d] ${cb} •••${cfim}\n" "$((10#$T))";sleep 0.1;done;tput clear;
   titulo=$(printf '|Jgd%*s|D|P|\n' "$qtdgt"|sed "s/ /| N /g;s/[^N| ]\+/ & /g")
   printf "${cy}\e[1;$(( (COLS-(4*qtdgt+13)) /2))f$(LINHA $((4*qtdgt+13)))"; printf "\e[2;$(( (COLS-(4*qtdgt+15)) /2))f$titulo\n\e[3;$(( (COLS-(4*qtdgt+13)) /2))f$(LINHA $((4*qtdgt+13)))${cfim}";   
   PEGA_APOSTA "$tempo" "$qtdgt" ;
}

READ() {
    cnt=$(printf "%02d" "$count");TEMPO_RESTANTE
    limpalinha=$(printf '%*s' "$((qtdgt*4+1))")
    printf "\e[$((LINES-2));1f${limpalinha}"
    printf "\e[$((LINES-2));1f";read -p " ${count}ª Chance: " -n"$qtdgt" APOSTA
    APOSTA=$(sed 's/[^0-9]/0/g' <<< "$APOSTA")
   if ((${#APOSTA} < $qtdgt));then
   printf "\e[$((LINES-3));1f${cr} Digite $qtdgt DIGITOS!${cfim}";
   sleep 2.5;
   printf "\e[$((LINES-3));1f                              ";
   READ
   else
   D=0;P=0;senha="$SENHA";
       for n in $(seq 0 $((qtdgt-1)));do
           if grep -q ${APOSTA:$n:1} <<< $senha;then senha=$(sed 's/'${APOSTA:$n:1}'//' <<< "$senha");fi
                if grep -boq "${APOSTA:$n:1}" <<< ${SENHA:$n:1};then let P++;fi
       done
   D=$(( ${#SENHA} - ${#senha} ))
   printf "\e[$((count*2+2));$(( (COLS-(4*qtdgt+15)) /2))f${cy}|${cfim} $cnt ${cy}$(sed "s/[0-9]/| & /g" <<< ${APOSTA})${cb}| ${D} | ${P} |\n${cy}\e[$((count*2+3));$(( (COLS-(4*qtdgt+13)) /2))f$(LINHA $((4*qtdgt+13)))${cfim}"
   fi
    TEMPO_RESTANTE
}

PEGA_APOSTA() {
    TINI=$(printf "%(%s)T"); TFIM=$((TINI+tempo));APOSTA="1234";
    while (($TFIM >= $(printf "%(%s)T") && $((10#$SENHA)) != $((10#$APOSTA))));do
    TEMPO_RESTANTE
    let count++
    READ
   if (($(printf "%(%s)T") >= $TFIM));then
   printf "${cr}\e[$((count*2+3));$(( (COLS-(4*qtdgt+13)) /2))f$(LINHA $((4*qtdgt+13)))\e[$((count*2+4));$(((COLS-15)/2))f| P E R D E U |\n\e[$((count*2+5));$(((COLS-(4*qtdgt+13))/2))f$(LINHA $((4*qtdgt+13)))${cfim}\n" ;
   printf "\e[$((LINES-4));1f${cr} Tempo Esgotado!\n =>SENHA: ${SENHA}<=${cfim}\n\n";   
   elif (("$((10#$SENHA))" == "$((10#$APOSTA))"));then
   ACABOU=$(( $(printf "%(%s)T")-TINI ))
   printf "${cg}\e[$((count*2+3));$(((COLS-(4*qtdgt+13))/2))f$(LINHA $((4*qtdgt+13)))\e[$((count*2+4));$(((COLS-15)/2))f| G A N H O U |\n\e[$((count*2+5));$(((COLS-(4*qtdgt+13))/2))f$(LINHA $((4*qtdgt+13)))${cfim}\n";
   printf "\e[$((LINES-4));1f${cg} Acertou!!!\n Tempo: $(date -d@${ACABOU} +%M:%S)${cfim}\n\n";
   break;
   fi
    done
}

TEMPO_RESTANTE() {
    agora=$(printf "%(%s)T");resta=$((TFIM-agora));
    if (($resta>$((tempo/3*2))));then cct="$cg" ;elif (($resta<$((tempo/3))));then cct="$cr";else cct="$cy";fi
    printf "\e[$LINES;1f["$cct"00:$(date -d"@$resta" +%M:%S)$cfim]"
}

INIC_00 $@

Scripts recomendados

Fazendo Backup com Rsync

Conversor de M4A para MP3

Ligando/Desligando máquina pela rede

Instalar WebCam LG LIC-110 e derivadas

feet.sh - pseudo screensaver em bash


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts