Pular para o conteúdo

Jogo da Senha

É 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.
Marcelo Oliver msoliver
Hits: 1.886 Categoria: Shell Script Subcategoria: Miscelânea
  • Download
  • Nova versão
  • Indicar
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Descrição

É 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.
Download Jogo_da_Senha.sh Enviar nova versão
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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 $@
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Quebra-Galho-Faz-tudo-Configurator

Script para atualizar o Debian 13

Firewall

Adição automática dos repositórios do Google Chrome, Google Talk Plugin, Google Earth, Dro no Ubuntu

Colocar palavras em minúsculas

Nenhum comentário foi encontrado.

Contribuir com comentário

Entre na sua conta para comentar.