Jogo da velha
Publicado por Djair Dutra C. Jr. 25/03/2006
[ Hits: 12.839 ]
Este é um script do "sobrenatural" Júlio César Neves. Veio no CD de exemplos do excelente livro Programando em Shell Script.
#!/bin/sh # ####################################################### # JOGO DA VELHA # # DUVIDO QUE VOCE CONSIGA GANHAR! # #-----------------------------------------------------# # TIC TAC TOE # # I WON'T GIVE YOU A CHANCE. YOU'LL NEVER WIN! # ####################################################### # # # Leia: Programacao Shell - Linux # # Autor: Julio Cezar Neves # # Editora: Brasport # # ISBN: 85-7452-076-4 # # # ####################################################### # Para qualquer duvida ou esclarecimento sobre este # # programa estou as ordens em julio.neves@bigfoot.com # #-----------------------------------------------------# # Any doubt about this program you can find me at # # julio.neves@bigfoot.com # ####################################################### # Se voce estiver sob o bash, troque a 1a. linha por # # #!/bin/bash # #-----------------------------------------------------# # If you are running bash change the 1st. line for # # #!/bin/bash # ####################################################### # Este foi um meio divertido que encontrei para # # testar a compatibilidade no uso de arrays entre o # # bash e o ksh. Se alguem quiser desenvolver a rotina # # em que o adversario comeca jogando, sinta-se a # # vontade, porem nao esqueca de mandar-me o modulo # # para incorpora-lo ao meu. # #-----------------------------------------------------# # This program was developed as a funny way to test # # the compatibility between arrays in ksh and bash. # # Feel free for develop the module that the opponent # # start playing, but don't forget to send me the new # # routine because I'll attach it at this one. # ####################################################### # Ganhei=0 Empate=0 Bold=`tput bold` OBold=`tput sgr0` Cols=`tput cols` if [ $Cols -lt 80 -o `tput lines` -lt 25 ] then clear echo "O tamanho minimo da janela deve ser 25 linhas e 80 colunas" exit 2 read lixo fi Col0=`expr \( $Cols - 46 \) / 2` Eng=`echo "To play in english use: $Bold\`basename $0\`$OBold -e (default language is portuguese)"` # Ingles ou Portugues? English or Portuguese? if [ "$1" = -e ] then StrIni[1]=" 1 2 3" StrIni[2]="1 | | +---------+----------+" StrIni[3]=" ---+---+--- | Ties | Wins |" StrIni[4]="2 | | +---------+----------+" StrIni[5]=" ---+---+--- | | |" StrIni[6]="3 | | +---------+----------+" StrGan="I W O N !!!" StrEmp="T I E" StrLe="Now it's our time to play (RowColumn):" StrEr1="At this position already has a -> " StrEr2="Write row and column together. I.E. 13 means row 1 and column 3" StrFim="Do you want to continue?" else StrIni[1]=" 1 2 3" StrIni[2]="1 | | +---------+----------+" StrIni[3]=" ---+---+--- | Empates | Vitorias |" StrIni[4]="2 | | +---------+----------+" StrIni[5]=" ---+---+--- | | |" StrIni[6]="3 | | +---------+----------+" StrGan="G A N H E I !!!" StrEmp="E M P A T E" StrLe="Informe a sua jogada (LinhaColuna):" StrEr1="Nesta posicao ja existe um -> " StrEr2="Informe Linha e Coluna juntos. Ex: 13 = Linha 1 e Coluna 3" StrFim="Deseja continuar?" fi Escrever () { ColIni=`expr \( $Cols - length "$2" \) / 2` tput cup $1 $ColIni echo "$2" } Iniciar () { Jogo= for i in 1 2 3 do for j in 1 2 3 do P[$i$j]= done done clear for i in 1 2 3 4 5 6 do tput cup `expr 11 + $i` $Col0 echo "${StrIni[i]}" done Seg=`date "+%S"` case `expr $Seg % 5` in 0) Jogo=11 ; Saida=1 ;; 1) Jogo=13 ; Saida=2 ;; 2) Jogo=31 ; Saida=3 ;; 3) Jogo=33 ; Saida=4 ;; *) Jogo=22 ; Saida=5 ;; esac tput cup 16 `expr $Col0 + 29` echo $Bold$Empate tput cup 16 `expr $Col0 + 40` echo $Ganhei$OBold } Jogar () { P[$1]=$2 Lin=`echo $1 | cut -c1` Col=`echo $1 | cut -c2` Lin=`expr \( $Lin - 1 \) \* 2 + 13` Col=`expr \( $Col - 1 \) \* 4 + 3 + $Col0` tput cup $Lin $Col echo $2 } Placar () { tput bold if [ $1 = E ] then Empate=$((Empate+1)) tput cup 22 $Col0 echo "$StrEmp" tput cup 16 `expr $Col0 + 29` # Escrevendo Placar echo $Empate else Ganhei=$((Ganhei+1)) tput cup 22 $Col0 echo "$StrGan" tput cup 16 `expr $Col0 + 40` # Escrevendo Placar echo $Ganhei case $2 in L) for j in 1 2 3 do Jogar $i$j X done ;; C) for j in 1 2 3 do Jogar $j$i X done ;; D1) for i in 11 22 33 do Jogar $i X done ;; *) for i in 13 22 31 do Jogar $i X done esac fi tput sgr0 } # Cuidado com o chefe! WARNING! The boss is near you! trap "clear ; exit" 0 2 3 # Jogando Playing while true do Iniciar if [ "$1" != "-e" ] then # tput cup 3 23 Escrever 3 "$Eng" fi Jogar $Jogo X Vez=0 while true do if [ $Vez -eq 4 ] then Placar E break fi tput cup 21 $Col0 echo "$StrLe" tput cup 21 `expr $Col0 + 1 + length "$StrLe"` tput el tput cup 21 `expr $Col0 + 1 + length "$StrLe"` read Jogo case $Jogo in [1-3][1-3]) if [ ${P[$Jogo]} ] then tput cup 22 $Col0 echo -n "$Bold$StrEr1${P[$Jogo]} <-$OBold" read Jogo tput cup 22 $ColIni tput el tput cup 21 `expr $Col0 + 1 + length "$StrLe"` tput el continue fi Jogar $Jogo O Vez=$((Vez+1)) ;; *) tput cup 22 $Col0 echo -n "$Bold$StrEr2$OBold" read Jogo tput cup 22 $Col0 tput el tput cup 21 `expr $Col0 + 1 + length "$StrLe"` tput el continue esac for i in 1 2 3 do LX[i]=0 ; CX[i]=0 ; LO[i]=0 ; CO[i]=0 ; DX[i]=0 ; DO[i]=0 done for i in 1 2 3 do for j in 1 2 3 do [ "${P[$i$j]}" = X ] && LX[i]=$((${LX[$i]}+1)) [ "${P[$i$j]}" = O ] && LO[i]=$((${LO[$i]}+1)) [ "${P[$j$i]}" = X ] && CX[i]=$((${CX[$i]}+1)) [ "${P[$j$i]}" = O ] && CO[i]=$((${CO[$i]}+1)) done done for i in 11 22 33 do [ "${P[$i]}" = X ] && DX[1]=$((${DX[1]}+1)) [ "${P[$i]}" = O ] && DO[1]=$((${DO[1]}+1)) done for i in 13 22 31 do [ "${P[$i]}" = X ] && DX[2]=$((${DX[2]}+1)) [ "${P[$i]}" = O ] && DO[2]=$((${DO[2]}+1)) done # Pra ganhar I wanna win! for i in 1 2 3 do LAlinhadas[i]=$((${LX[i]}-${LO[i]})) CAlinhadas[i]=$((${CX[i]}-${CO[i]})) DAlinhadas[i]=$((${DX[i]}-${DO[i]})) if [ ${LAlinhadas[i]} -eq 2 ] then for j in 1 2 3 do [ ${P[$i$j]} ] && continue Jogo=$i$j Jogar $Jogo X Placar G L break 3 done fi if [ ${CAlinhadas[i]} -eq 2 ] then for j in 1 2 3 do [ ${P[$j$i]} ] && continue Jogo=$j$i Jogar $Jogo X Placar G C break 3 done fi done if [ ${DAlinhadas[1]} -eq 2 ] then for i in 11 22 33 do [ ${P[$i]} ] && continue Jogo=$i Jogar $Jogo X Placar G D1 break 2 done fi if [ ${DAlinhadas[2]} -eq 2 ] then for i in 13 22 31 do [ ${P[$i]} ] && continue Jogo=$i Jogar $Jogo X Placar G D2 break 2 done fi # Pra nao perder I don't wanna lose for i in 1 2 3 do if [ ${LAlinhadas[i]} -eq -2 ] then for j in 1 2 3 do [ ${P[$i$j]} ] && continue Jogo=$i$j Jogar $Jogo X continue 3 done fi if [ ${CAlinhadas[i]} -eq -2 ] then for j in 1 2 3 do [ ${P[$j$i]} ] && continue Jogo=$j$i Jogar $Jogo X continue 3 done fi done if [ ${DAlinhadas[1]} -eq -2 ] then for i in 11 22 33 do [ ${P[$i]} ] && continue Jogo=$i Jogar $Jogo X continue 2 done fi if [ ${DAlinhadas[2]} -eq -2 ] then for i in 13 22 31 do [ ${P[$i]} ] && continue Jogo=$i Jogar $Jogo X continue 2 done fi # Ao ataque! Let's attack! case $Vez in 1) case $Saida in 1) [ ${P[33]} ] && Jogo=13 || Jogo=33 ;; 2) [ ${P[31]} ] && Jogo=33 || Jogo=31 ;; 3) [ ${P[13]} ] && Jogo=11 || Jogo=13 ;; 4) [ ${P[11]} ] && Jogo=31 || Jogo=11 ;; *) if [ ${P[11]} ] then Jogo=33 elif [ ${P[33]} ] then Jogo=11 elif [ ${P[13]} ] then Jogo=31 else Jogo=13 fi esac ;; *) [ $P{[22]} ] && { Jogo= for i in 1 3 do for j in 1 3 do [ ${P[$i$j]} ] && { [ ${P[$j$i]} ] && continue || { Jogo=$j$i break 2 } } || { Jogo=$i$j break 2 } done done [ "$Jogo" ] && { Jogar $Jogo X continue } for i in 1 2 3 do for j in 1 2 3 do [ "${P[$i$j]}" ] && continue Jogo=$i$j break 2 done done } || Jogo=22 esac Jogar $Jogo X done tput cup 23 $Col0 echo "$StrFim" tput cup 23 `expr $Col0 + length "$StrFim" + 1` read a [ `echo $a | tr n N` = N ] && exit done
Script em Xdialog para montar / desmontar dispositivos
Configurar servidor proxy no Apt-get usando SS e Kdialog
Script para Gerenciamento de Pacotes no Slackware
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
VMs e Interfaces de Rede desapareceram (12)
Instalação do drive do adaptador wiffi (7)