Jogo da Senha
Publicado por Marcelo Oliver (última atualização em 30/06/2018)
[ Hits: 1.349 ]
É 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.
#!/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 $@
Ligando/Desligando máquina pela rede
Instalar WebCam LG LIC-110 e derivadas
feet.sh - pseudo screensaver em bash
Nenhum comentário foi encontrado.
Vou voltar moderar conteúdos de Dicas e Artigos (0)
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Instalação Uefi com o instalador clássico do Mageia (1)
Vou voltar moderar conteúdos de Dicas e Artigos (0)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta