Acerte a carta
Publicado por Xerxes (última atualização em 01/06/2016)
[ Hits: 3.843 ]
Homepage: -
Na sua frente há três cartas viradas. Duas delas tem estrelas brancas e apenas uma tem estrela preta.
Você deve adivinhar onde está a carta com a estrela preta.
Após escolher sua carta, uma carta de estrela branca será revelada. Cabe a você, então, escolher se continua com a sua primeira escolha ou se troca de carta.
Sim, esta é uma variação do problema de Monty Hall. Mostra na prática se é mais vantajoso, ou não, trocar de carta.
#!/bin/bash
#
# ----------------------------------------------------------------------
# Na sua frente há três cartas viradas. Duas delas tem estrelas brancas e
# apenas uma tem estrela preta.
#
# Você deve adivinhar onde está a carta com a estrela preta.
#
# Após escolher sua carta, uma carta de estrela branca será revelada.
# Cabe a você, então, escolher se continua com a sua primeira escolha ou
# Se troca de carta.
#
# Sim, esta é uma variação do problema de Monty Hall.
# Mostra na prática se é mais vantajoso, ou não, trocar de carta.
#
# ----------------------------------------------------------------------
#
# Autor: Xerxes Lins (xerxeslins@gmail.com) vivaolinux.com.br/~xerxeslins
#
# Versão 1.0b - 25/04/2016
#
# ----------------------------------------------------------------------
#
# Define qual das três é a carta certa
function _certa {
CERTA=$(( ( RANDOM % 3 ) + 1 ))
}
# "Redesenha" as cartas
function _atualiza_cartas {
DESENHO=" $FIG_CARTA1 $FIG_CARTA2 $FIG_CARTA3"
}
# Vira todas as cartas para baixo
function _vira_cartas {
FIG_CARTA1="🂠"
FIG_CARTA2="🂠"
FIG_CARTA3="🂠"
}
# Vira todas as cartas para cima
function _vira_cartas2 {
FIG_CARTA1="🃟"
FIG_CARTA2="🃟"
FIG_CARTA3="🃟"
}
# Ao final do jogo exibe sua taxa de sucesso
function _stats {
# Com contribuição do Lcavalheiro para obter casas decimais
VIT_PERCENT=$(bc -l <<< "scale=2 ; $WIN_TROCA / $TOTAL_ROLLS * 100 ")
#LOS_PERCENT=$(( ( $LOSE_TROCA / $LOSE ) * 100 ))
clear
echo "De todas as suas tentativas ($TOTAL_ROLLS), $VIT_PERCENT% dos acertos ocorreram quando você trocou de carta."
#echo "De todas os seus erros, $LOS_PERCENT% ocorreram quando você trocou de carta."
}
# Fim do jogo
function _finalizou {
clear
echo ""
echo "$FRASE_FINAL"
echo ""
echo "A carta certa era a de número $CERTA!"
_atualiza_cartas
echo ""
echo "$DESENHO"
echo ""
ERRADA=0
echo "Continuar? (S/*)"
read CONT
case $CONT in
s|S) NOVO_JOGO=0 && TROCA=0 && _vira_cartas && _jogo ;;
*) _stats && exit;;
esac
}
# Verifica se a carta escolhida é a certa
function _checa {
# Contador de tentativas
TOTAL_ROLLS=$(( $TOTAL_ROLLS + 1 ))
# Verifica se houve troca
if [ $OLD_CARD != $ESCOLHIDA ]
then
TROCA=yes
fi
# Desvira todas e "pinta" a certa
_vira_cartas2
if [ $CERTA = 1 ]
then
FIG_CARTA1="🃏"
elif [ $CERTA = 2 ]
then
FIG_CARTA2="🃏"
else
FIG_CARTA3="🃏"
fi
# Acertou ou errou?
if [ $ESCOLHIDA -eq $CERTA ]
then
FRASE_FINAL="Você acertou!!!"
WIN=$(( $WIN + 1 ))
# Se teve troca, lembra disso
if [ $TROCA == yes ]
then
WIN_TROCA=$(( $WIN_TROCA + 1 ))
fi
else
FRASE_FINAL="Você errou!!!"
LOSE=$(( $LOSE + 1 ))
# Se teve troca, lembra disso
if [ $TROCA == yes ]
then
LOSE_TROCA=$(( $LOSE_TROCA + 1 ))
fi
fi
_finalizou
}
# Após escolher a carta, pergunta se quer trocar
function _escolha1() {
clear
_vira_cartas
# Se o jogo for "novo" então lembra se houve troca
if [ $NOVO_JOGO -eq 1 ]
then OLD_CARD=$1
fi
# carta escolhida pelo jogador
ESCOLHIDA=$1
# Carta errada
ERRADA=1
while [ "$ERRADA" = "$ESCOLHIDA" ] || [ "$ERRADA" = "$CERTA" ]; do
ERRADA=$(( ( RANDOM % 3 ) + 1 ))
done
# Carta que "sobra"
SOBRA=1
while [ "$SOBRA" = "$ESCOLHIDA" ] || [ "$SOBRA" = "$ERRADA" ]; do
SOBRA=$(( ( RANDOM % 3 ) + 1 ))
done
# Desvira a carta errada
if [ $ERRADA = 1 ]
then
FIG_CARTA1="🃟"
elif [ $ERRADA = 2 ]
then
FIG_CARTA2="🃟"
else
FIG_CARTA3="🃟"
fi
_atualiza_cartas
echo "
Você escolheu a carta $ESCOLHIDA.
Revelação:
A carta certa NÃO É a carta $ERRADA
$DESENHO
Gostaria de trocar para a carta $SOBRA? (S/N)"
read RESPOSTA
case $RESPOSTA in
s|S) ESCOLHIDA=$SOBRA && _checa ;;
n|N) _checa ;;
*) clear && echo "Opção inválida. Saindo..." && exit ;;
esac
}
# Jogo principal
function _jogo {
# Contador para saber se é novo
NOVO_JOGO=$(( $NOVO_JOGO + 1 ))
clear
_atualiza_cartas
echo "
Onde está a carta certa (🃏)?
Cartas (1, 2 e 3):
$DESENHO
Escolha uma carta...
________________________________
Acertos
totais $WIN
Acertos
após trocar
de carta $WIN_TROCA
Erros
totais $LOSE
Erros
após trocar
de carta $LOSE_TROCA
(X e Enter para sair)"
read CARD
case $CARD in
1|2|3) _escolha1 $CARD ;;
x|X) _stats && exit ;;
*) clear && echo "Opção inválida. Escolha 1, 2 ou 3." && sleep 2 && _jogo ;;
esac
}
# Função do começo
function _start {
_vira_cartas
NOVO_JOGO=0
TOTAL_ROLLS=0
ERRADA=0
ESCOLHIDA=0
WIN=0
LOSE=0
WIN_TROCA=0
LOSE_TROCA=0
_certa
_jogo
}
# Começa o jogo
_start
Script Shell para Administração e Configuração do Samba em Red-Hat / Fedora
Script para impressao em codigo de barras.
Conversor de vídeo com opção de legenda
Calculando tempo para reportar relatórios ou as famosas log`s.
Nenhum comentário foi encontrado.
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
Como rodar o Folding@home no Linux
Criando um painel de controle (Dashboard) para seu servidor com o Homepage
O Abismo entre o Código e o Chão: Saltos Tecnológicos e a Exclusão Estrutural no Brasil
Instalar e Configurar a santíssima trindade (PAP) no Void Linux
Pisando no acelerador do Linux Mint: Kernel XanMod, zRAM e Ajustes de Swap
Como compilar kernel no Linux Mint
Lançamento do Brutal DOOM test 6
Consertando o erro no Brave de webgl
Solução para ter de volta as bordas e barra de títulos das janelas em zenity no Debian 13.x
Seno, Coseno, Tangente em CLIPPER (0)
Inserir uma URL num arquvo pelo Ubuntu (CLIPPER) (0)
VMWare Player não conecta na rede nem consigo intercambiar arquivos (1)









