Jogo: racha-cuca
Publicado por Xerxes (última atualização em 12/04/2017)
[ Hits: 2.523 ]
Homepage: -
Jogo da minha infância recriado em shell script.
Quem não conhece o jogo racha-cuca? Veja imagem: http://bit.ly/2mlvanM
Veja no cabeçalho do script como jogar.
#!/bin/bash # RACHA CUCA v1.0 # Criado em 05/03/2017 # Xerxes Lins (www.vivaolinux.com.br/~xerxeslins) # GPL # COMO JOGAR: # # Objetivo: colocar os números na ordem de 01 até 15. Assim: # # +----+----+----+----+ # | 01 | 02 | 03 | 04 | # +----+----+----+----+ # | 05 | 06 | 07 | 08 | # +----+----+----+----+ # | 09 | 10 | 11 | 12 | # +----+----+----+----+ # | 13 | 14 | 15 | __ | # +----+----+----+----+ # # Para mover um NÚMERO para o espaço vazio você deve usar as setas # direcionais (cima, baixo, direita e esquerda). Para que não haja confusão: # as setas movem os NÚMEROS e não o espaço vazio (__). # # Para fechar o jogo use Ctrl+c. # # Obs.: aleatoriamente nem toda configuração inicial permite a resolução # do problema, mas o script só cria problemas solúveis. # ######################################################################## bold=$(tput bold) normal=$(tput sgr0) function _embaralha_tudo () { #Embaralha uma lista de números consecutivos (01 a 15) X=$( shuf -e $(seq -w 01 15)) #Adiciona os números embaralhados ao vetor Y for i in {0..14}; do Y[$i]=$(echo $X | cut -d " " -f $(( $i + 1 )) ) done #Atribui o espaço vazio VAZIO=15 Y[$VAZIO]="__" #Checa se o jogo tem solução. Se não tiver, refaz o jogo. #Para mais informações: #http://www.geeksforgeeks.org/check-instance-15-puzzle-solvable/ _inversoes if [ $(( $INVERSAO % 2)) -eq 0 ] then _desenha else _embaralha_tudo fi } #Conta o número de inversões function _inversoes () { INVERSAO=0 for i in {0..13}; do N1=$(echo ${Y[$i]}) x=$(( $i + 1 )) while [ $x -lt 15 ] do N2=$(echo ${Y[$x]}) if [ $N1 -gt $N2 ] then INVERSAO=$(( $INVERSAO + 1 )) fi x=$(( $x + 1 )) clear echo "Criando um problema solúvel. Aguarde... " echo "$i. $N1 > $N2 ($INVERSAO)" sleep 0.02 done done } #Função que enconta o índice da casa vazia no vetor function _vazio () { for i in {0..15}; do if [ "${Y[$i]}" == "__" ] then VAZIO=$i fi done } #Compara cada casa para ver se está na ordem certa function _conseguiu () { FINAL=$(echo $(sort <<<"${X[@]:0:44}")) ATUAL=${Y[@]:0:15} if [ "$ATUAL" == "$FINAL" ] then #Exibe a mensagem e encerra! echo "CONSEGUIU!!! " exit 0 fi } #Realiza o movimento da troca function _move () { TEMP=${Y[$POSICAO]} Y[$POSICAO]=${Y[$VAZIO]} Y[$VAZIO]=$TEMP } #Função para trocar ao pressionar as setas function _troca () { #Verifica distância entre o número que deseja mover e a casa vazia. #Isso determina a direção (esquerda, direita, cima e baixo). DIST=$(( $POSICAO - $VAZIO )) #Colunas laterais COLUNA1=("3" "7" "11" "15") COLUNA2=("0" "4" "8" "12") #Mover para esquerda if [ $DIST -eq -1 ] then if [[ ! " ${COLUNA1[@]} " =~ " ${POSICAO} " ]]; then _move; fi fi #Mover para direita if [ $DIST -eq 1 ] then if [[ ! " ${COLUNA2[@]} " =~ " ${POSICAO} " ]]; then _move; fi fi #Mover para cima ou para baixo if [ $DIST -eq 4 ] || [ $DIST -eq -4 ]; then _move; fi } #Verifica a possibilidade da troca function _verifica () { #Opção do jogador OPT="${Y[$NUM]}" #Checa posição do número escolhido e se o mesmo pertence ao vetor PERTENCE="0" for i in {0..15}; do if [ "${Y[$i]}" == "$OPT" ] || [ "${Y[$i]}" == "0$OPT" ] then POSICAO=$i PERTENCE="1" fi done #Se pertence, pode trocar. if [ $PERTENCE == "1" ] then _troca fi _desenha } #"Desenha" o jogo function _desenha () { _vazio clear echo "Racha-cuca!" #echo "$INVERSAO: ${Y[@]:0:15}" echo "${bold} +----+----+----+----+ | ${Y[0]} | ${Y[1]} | ${Y[2]} | ${Y[3]} | +----+----+----+----+ | ${Y[4]} | ${Y[5]} | ${Y[6]} | ${Y[7]} | +----+----+----+----+ | ${Y[8]} | ${Y[9]} | ${Y[10]} | ${Y[11]} | +----+----+----+----+ | ${Y[12]} | ${Y[13]} | ${Y[14]} | ${Y[15]} | +----+----+----+----+${normal}" echo "" echo "Use as setas para mover os NÚMEROS" echo "Use Ctrl+c para encerrar" echo "$INVERSOES" _conseguiu read -n3 -s INPUT case $INPUT in $'\e[A') NUM=$(( $VAZIO + 4 ));; $'\e[B') NUM=$(( $VAZIO - 4 ));; $'\e[C') NUM=$(( $VAZIO - 1 ));; $'\e[D') NUM=$(( $VAZIO + 1 ));; *) _desenha;; esac _verifica } _embaralha_tudo
Importar varius Emolticons de uma vez para amsn
Uebevert - All in One [version 3]
Script para controle de banda usando FreeRADIUS, PPPoE e HTB
Instalação de servidor Squid rápido e fácil
Somar e exibir resultados gerados pelo monitoramento do DNS
Nenhum comentário foi encontrado.
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Impedir outros proxy da mesma rede (2)
Erro de permissão no samba (0)
O que esta havendo com o mercado de ti? (4)
Não consigo cadastrar nenhuma conta online (2)
Ubuntu 22.04 / Bluethooth - Falha na conexão BlueZ | Não conecta caixa... (8)