Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Flávio Jussiê

Jogo da Velha - Visualg

Recommended Posts

Olá a todos.

Sou novo na programação, estou começando minha graduação em analise e desenvolvimento de sistema e estou iniciando lógica de programação. Recentemente me foi proposto criar no visualg um jogo da velha. Criei este algorítimo, ele está funcionando perfeitamente:

 

algoritmo "jogodavelha"
var
jog: vetor[1..3,1..3] de caractere
comp,cont, i, j, a, b, fim: inteiro
resp, aux: caractere
procedimento interface()
inicio
escreval ("===================")
escreval (" JOGO DA VELHA ")
escreval ("+-----+-----+-----+")
para i de 1 ate 3 faca
para j de 1 ate 3 faca
escreva ("| ")
escreva (jog[i,j]:4)
fimpara
escreva ("|")
escreval ()
escreval ("+-----+-----+-----+")
fimpara
fimprocedimento
inicio
comp <- 1
para i de 1 ate 3 faca
para j de 1 ate 3 faca
cont <- cont+1
jog[i,j] <- NumpCarac(cont)
fimpara
fimpara
interface()
repita
escreval ()
escreva ("Jogar onde? ")
leia (resp)
a <- 1
b <- 1
enquanto (jog[a,b] <> resp) faca
se (jog[a,b] <> resp) entao
b <- b + 1
se (b > 3) entao
a <- a + 1
b <- 1
fimse
se (a = 3) entao
a <- 1
limpatela
interface()
escreval ()
escreva ("Jogada inválida, escolha outra: ")
leia (resp)
fimse
fimse
fimenquanto
escolha comp
caso 1
jog[a,b] <- "X"
caso 2
jog[a,b] <- "O"
comp <- 0
fimescolha
comp <- comp + 1
limpatela
interface ()
para i de 1 ate 3 faca
se (jog[i,1] = jog[i,2]) e (jog[i,2] = jog[i,3]) entao
fim <- 1
fimse
fimpara
para i de 1 ate 3 faca
se (jog[1,i] = jog[2,i]) e (jog[2,i] = jog[3,i]) entao
fim <- 1
fimse
fimpara
se (jog[1,1] = jog[2,2]) e (jog[2,2] = jog[3,3]) entao
fim <- 1
fimse
se (jog[1,3] = jog[2,2]) e (jog[2,2] = jog[3,1]) entao
fim <- 1
fimse
ate (fim = 1)
escreval ("Fim de Partida")
fimalgoritmo
Há possibilidades de melhora-lo ou estou no caminho certo?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom! Meus parabéns pela sua força de vontade e persistência. Um jogo, de qualquer natureza, é sempre uma das coisas mais complexas de se fazer em programação.

 

Continue neste caminho e será um excelente programador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parabéns pelo seu Jogo da velha, para um iniciante ele está mais que excelente com disse meu amigo KhaosDoctor, jogos são uma parte bem complicada da programação, mas não posso deixar de deixar abaixo meu jogo da velha. Você pode usar ele para implementar seu código deixando ele mais funcional.

algoritmo "Jogodavelha"

var
   Numerodejogadas : inteiro
   Jogadavalortemp : inteiro
   Jogadavalor : inteiro
   Jogadoratual : inteiro
   Outrojogador : inteiro
   Contador : inteiro
   Jogadasvalidas : inteiro
   Jogadavalorretorno : inteiro
   _JogadaInvalida : inteiro
   Rodada: caractere
   Alguemganhou, turno : logico
   PosicaoX, PosicaoO, PontuacaoX, PontuacaoO, PontuacaoEmpate, ContadorColuna, ContadorLinha, Opcao : inteiro
   Tabuleiro: vetor[1..9] de inteiro
   Listajogadasvalidas:vetor[1..10] de inteiro
   JogadorX, JogadorO, Resultado, Ganhador, Crialinha : caractere
	Posicaovetor:vetor[1..3,1..3] de caractere
	Listras: vetor[1..8,1..6] de caractere
   

FUNCAO RetornaJogadaMaquina(jogadorEmQuestao : inteiro) : inteiro
var
   valorAtual : inteiro
inicio

      valorAtual <- jogadorEmQuestao
      jogadaValorRetorno <- 0

      se (tabuleiro[7] + tabuleiro[8] + tabuleiro[9]) = (2 * valorAtual) entao
         se tabuleiro[7] = 0 entao
            jogadaValorRetorno <- 7
         senao
              se tabuleiro[8] = 0 entao
                 jogadaValorRetorno <- 8
              senao
                   jogadaValorRetorno <- 9
              fimSe
         fimSe
      fimSe

      se (tabuleiro[4] + tabuleiro[5] + tabuleiro[6]) = (2 * valorAtual) entao
         se tabuleiro[4] = 0 entao
            jogadaValorRetorno <- 4
         senao
              se tabuleiro[5] = 0 entao
                 jogadaValorRetorno <- 5
              senao
                   jogadaValorRetorno <- 6
              fimSe
         fimSe
      fimSe

      se (tabuleiro[1] + tabuleiro[2] + tabuleiro[3]) = (2 * valorAtual) entao
         se tabuleiro[1] = 0 entao
            jogadaValorRetorno <- 1
         senao
              se tabuleiro[2] = 0 entao
                 jogadaValorRetorno <- 2
              senao
                   jogadaValorRetorno <- 3
              fimSe
         fimSe
      fimSe

      se (tabuleiro[7] + tabuleiro[4] + tabuleiro[1]) = (2 * valorAtual) entao
         se tabuleiro[7] = 0 entao
            jogadaValorRetorno <- 7
         senao
              se tabuleiro[4] = 0 entao
                 jogadaValorRetorno <- 4
              senao
                   jogadaValorRetorno <- 1
              fimSe
         fimSe
      fimSe

      se (tabuleiro[8] + tabuleiro[5] + tabuleiro[2]) = (2 * valorAtual) entao
         se tabuleiro[8] = 0 entao
            jogadaValorRetorno <- 8
         senao
              se tabuleiro[5] = 0 entao
                 jogadaValorRetorno <- 5
              senao
                   jogadaValorRetorno <- 2
              fimSe
         fimSe
      fimSe

      se (tabuleiro[9] + tabuleiro[6] + tabuleiro[3]) = (2 * valorAtual) entao
         se tabuleiro[9] = 0 entao
            jogadaValorRetorno <- 9
         senao
              se tabuleiro[6] = 0 entao
                 jogadaValorRetorno <- 6
              senao
                   jogadaValorRetorno <- 3
              fimSe
         fimSe
      fimSe

      se (tabuleiro[7] + tabuleiro[5] + tabuleiro[3]) = (2 * valorAtual) entao
         se tabuleiro[7] = 0 entao
            retorne 7
         senao
              se tabuleiro[5] = 0 entao
                 jogadaValorRetorno <- 5
              senao
                   jogadaValorRetorno <- 3
              fimSe
         fimSe
      fimSe

      se (tabuleiro[9] + tabuleiro[5] + tabuleiro[1]) = (2 * valorAtual) entao
         se tabuleiro[9] = 0 entao
            jogadaValorRetorno <- 9
         senao
              se tabuleiro[5] = 0 entao
                 jogadaValorRetorno <- 5
              senao
                   jogadaValorRetorno <- 1
              fimSe
         fimSe
      fimSe
      
      se jogadaValorRetorno <> 0 entao
         retorne jogadaValorRetorno
      senao
         retorne _jogadaInvalida
      fimSe
      
fimfuncao

//Decide a melhor jogada para a máquina
funcao JogadaDaMaquina() : inteiro
inicio

      jogadaValor <- 0
      //Se não existir mais jogadas retorna invalido
      se numeroDeJogadas = 9 entao
         jogadaValor <- -1
         retorne jogadaValor
      fimSe
      
      //Se ouver alguma jogada que possa te fazer ganhar, jogue!
      jogadaValorTemp <- RetornaJogadaMaquina(jogadorAtual)
      se jogadaValorTemp <> _jogadaInvalida entao
         jogadaValor <- jogadaValorTemp
         //retorne jogadaValor
      fimSe
      
      //Caso exita alguma jogada que não te faça perder, jogue!
      outroJogador <- RetornaOutroJogador(jogadorAtual)
      jogadaValorTemp <- RetornaJogadaMaquina(outroJogador)
      se (jogadaValorTemp <> _jogadaInvalida) e (jogadaValor = 0) entao
         jogadaValor <- jogadaValorTemp
         retorne jogadaValor
      fimSe

      //Tenta prevenir a vitoria do adversário (procura montar duas vitorias ao mesmo tempo)
      se (numeroDeJogadas = 3) e (jogadaValor = 0) entao
         se ((tabuleiro[1] * tabuleiro[9]) = 1) ou ((tabuleiro[3] * tabuleiro[7]) = 1) e (tabuleiro[5] <> 0)
            jogadaValor <- 1
            retorne jogadaValor
         fimSe
         
         se ((tabuleiro[2] * tabuleiro[9]) = 1) ou ((tabuleiro[1] * tabuleiro[6]) = 1) ou ((tabuleiro[2] * tabuleiro[6]) = 1) e (tabuleiro[5] <> 0)
            jogadaValor <- 2
            retorne jogadaValor
         fimSe
      fimSe
         
         //Tenta jogar no meio ou nas diagonais, maior chance de vitoria
      se (numeroDeJogadas <= 2) e (jogadaValor = 0) entao
         se tabuleiro[5] = 0 entao
            jogadaValor <- 5
         senao
            se tabuleiro[1] = 0 entao
               jogadaValor <- 1
            senao
               jogadaValor <- 8
            fimSe
         fimSe
      senao
           se jogadaValor = 0 entao
              jogadaValor <- _jogadaInvalida
              se tabuleiro[5] = 0 entao
                 jogadaValor <- 5
              senao
                 se tabuleiro[7] = 0 entao
                    jogadaValor <- 7
                 senao
                      se tabuleiro[9] = 0 entao
                         jogadaValor <- 9
                      senao
                           se tabuleiro[1] = 0 entao
                              jogadaValor <- 1
                           senao
                              se tabuleiro[3] = 0 entao
                                 jogadaValor <- 3
                              fimSe
                           fimSe
                      fimSe
                 fimSe
              fimSe
              se jogadaValor <> _jogadaInvalida entao
                 retorne jogadaValor
              fimSe
           fimSe
      fimSe
      
      PupulaListaDeJogadasValidas()
      jogadasValidas <- ListaJogadasValidas[1]
      
      //Se apenas restar uma jogada, jogue a primeira
      se (jogadasValidas = 1) entao
         jogadaValor <- ListaJogadasValidas[2]
         retorne jogadaValor
      fimSe
      
      //Se Nenhuma das regras não forem  atendidas, jogue a primeira jogada
      se jogadaValor <> 0 entao
         retorne jogadaValor
      senao
         jogadasValidas <- ListaJogadasValidas[2]
         retorne jogadasValidas
      fimSe
      
fimfuncao


//Popula o array "jogadasValdas" com uma lista de jogadas válidas
procedimento PupulaListaDeJogadasValidas
inicio

      //limpa variável
      para contador de 1 ate 10 faca
           ListaJogadasValidas[contador] <- 0
      fimPara

      //Preenche a variável
      ListaJogadasValidas[1] <- 0
      para contador de 1 ate 9 faca
           se tabuleiro[contador] = 0 entao
              ListaJogadasValidas[1] <- ListaJogadasValidas[1] + 1
              ListaJogadasValidas[ListaJogadasValidas[1] + 1] <- contador
           fimSe
      fimPara
      
fimProcedimento


//Retorna o valor do outro jogador
funcao RetornaOutroJogador(jogador:inteiro) : inteiro
inicio
      se jogador = -1 entao
         retorne 1
      senao
           retorne -1
      fimSe
fimfuncao

//Cabeçalho do jogo
procedimento  Cabecalho
   inicio
 	escreval("**********************************************************************************")
	escreval("*			      JOGO DA VELHA                                      *")
	escreval("**********************************************************************************")
	escreval("")
	escreval("")
fimprocedimento

//limpa o array do jogo
procedimento limparVariaveis
	inicio
	posicaoVetor[1,1] <- " "
	posicaoVetor[1,2] <- " "
	posicaoVetor[1,3] <- " "
	posicaoVetor[2,1] <- " "
	posicaoVetor[2,2] <- " "
	posicaoVetor[2,3] <- " "
	posicaoVetor[3,1] <- " "
	posicaoVetor[3,2] <- " "
	posicaoVetor[3,3] <- " "
	
	para contador de 1 ate 9 faca
	     tabuleiro[contador] <- 0
	fimPara
fimprocedimento

//Exibe o tabuleiro do jogo na tela
procedimento ExibirTabuleiro
   inicio
	escreval(" ",listras[7,1]," ",listras[4,1],"    |    ",listras[5,1],"    |   ",listras[6,1]," ",listras[8,1]," ")
	escreval(" ",listras[1,1]," ",posicaoVetor[1,1]," ",listras[1,2],"  | ",listras[1,3],"  ",posicaoVetor[1,2],"  ",listras[1,4]," | ",listras[1,5]," ",posicaoVetor[1,3]," ",listras[1,6]," ")
	escreval("   ",listras[4,2],"  ",listras[7,2]," |    ",listras[5,2],"    | ",listras[8,2]," ",listras[6,2],"   ")
	escreval("--------+---------+-------")
	escreval("   ",listras[4,3],"    | ",listras[7,3],"  ",listras[5,3],"  ",listras[8,3]," |   ",listras[6,3],"   ")
	escreval(" ",listras[2,1]," ",posicaoVetor[2,1]," ",listras[2,2],"  | ",listras[2,3],"  ",posicaoVetor[2,2],"  ",listras[2,4]," | ",listras[2,5]," ",posicaoVetor[2,3]," ",listras[2,6]," ")
	escreval("   ",listras[4,4],"    | ",listras[8,4],"  ",listras[5,4],"  ",listras[7,4]," |   ",listras[6,4],"   ")
	escreval("--------+---------+-------")
	escreval("   ",listras[4,5],"  ",listras[8,5]," |    ",listras[5,5],"    | ",listras[7,5]," ",listras[6,5],"   ")
	escreval(" ",listras[3,1]," ",posicaoVetor[3,1]," ",listras[3,2],"  | ",listras[3,3],"  ",posicaoVetor[3,2],"  ",listras[3,4]," | ",listras[3,5]," ",posicaoVetor[3,3]," ",listras[3,6]," ")
	escreval(" ",listras[8,6]," ",listras[4,6],"    |    ",listras[5,6],"    |   ",listras[6,6]," ",listras[7,6]," ")
	escreval("")
	escreval("")

fimprocedimento

//Cria uma linha setando a coluna ou linha ganhadora
funcao CriaLinhaGanhador(char:caractere;linha:inteiro) : caractere
inicio
	
	se linha = 0 entao
		para contadorColuna de 1 ate 8 faca
			para contadorLinha de 1 ate 6 faca
				listras[contadorColuna,contadorLinha] <- " "
			fimPara
		fimPara
	senao
		para contadorLinha de 1 ate 6 faca
			listras[linha,contadorLinha] <- char
		fimPara
	fimSe

fimfuncao

//Verifica se ouve algum ganhador.
procedimento VerificaGanhador
   inicio
		se  (posicaoVetor[1,1] = "X") e (posicaoVetor[1,2] = "X") e (posicaoVetor[1,3] = "X") entao
		ganhador <- jogadorX
		pontuacaoX <- pontuacaoX + 1
		criaLinha <- CriaLinhaGanhador("°",1)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,1] = "X") e (posicaoVetor[2,2] = "X") e (posicaoVetor[3,3] = "X") entao
		ganhador <- jogadorX
		pontuacaoX <- pontuacaoX + 1
		criaLinha <- CriaLinhaGanhador("°",7)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,1] = "X") e (posicaoVetor[2,1] = "X") e (posicaoVetor[3,1] = "X") entao
		ganhador <- jogadorX
		pontuacaoX <- pontuacaoX + 1
		criaLinha <- CriaLinhaGanhador("°",4)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,2] = "X") e (posicaoVetor[2,2] = "X") e (posicaoVetor[3,2] = "X") entao
		ganhador <- jogadorX
		pontuacaoX <- pontuacaoX + 1
		criaLinha <- CriaLinhaGanhador("°",5)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[2,1] = "X") e (posicaoVetor[2,2] = "X") e (posicaoVetor[2,3] = "X") entao
		ganhador <- jogadorX
		pontuacaoX <- pontuacaoX + 1
		criaLinha <- CriaLinhaGanhador("°",2)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[3,1] = "X") e (posicaoVetor[3,2] = "X") e (posicaoVetor[3,3] = "X") entao
		ganhador <- jogadorX
		pontuacaoX <- pontuacaoX + 1
		criaLinha <- CriaLinhaGanhador("°",3)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[3,1] = "X") e (posicaoVetor[2,2] = "X") e (posicaoVetor[1,3] = "X") entao
		ganhador <- jogadorX
		pontuacaoX <- pontuacaoX + 1
		criaLinha <- CriaLinhaGanhador("°",8)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,3] = "X") e (posicaoVetor[2,3] = "X") e (posicaoVetor[3,3] = "X") entao
		ganhador <- jogadorX
		pontuacaoX <- pontuacaoX + 1
		criaLinha <- CriaLinhaGanhador("°",6)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,1] = "O") e (posicaoVetor[1,2] = "O") e (posicaoVetor[1,3] = "O") entao
		ganhador <- jogadorO
		pontuacaoO <- pontuacaoO + 1
		criaLinha <- CriaLinhaGanhador("°",1)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,1] = "O") e (posicaoVetor[2,2] = "O") e (posicaoVetor[3,3] = "O") entao
		ganhador <- jogadorO
		pontuacaoO <- pontuacaoO + 1
		criaLinha <- CriaLinhaGanhador("°",7)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,1] = "O") e (posicaoVetor[2,1] = "O") e (posicaoVetor[3,1] = "O") entao
		ganhador <- jogadorO
		pontuacaoO <- pontuacaoO + 1
		criaLinha <- CriaLinhaGanhador("°",4)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,2] = "O") e (posicaoVetor[2,2] = "O") e (posicaoVetor[3,2] = "O") entao
		ganhador <- jogadorO
		pontuacaoO <- pontuacaoO + 1
		criaLinha <- CriaLinhaGanhador("°",5)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[2,1] = "O") e (posicaoVetor[2,2] = "O") e (posicaoVetor[2,3] = "O") entao
		ganhador <- jogadorO
		pontuacaoO <- pontuacaoO + 1
		criaLinha <- CriaLinhaGanhador("°",2)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[3,1] = "O") e (posicaoVetor[3,2] = "O") e (posicaoVetor[3,3] = "O") entao
		ganhador <- jogadorO
		pontuacaoO <- pontuacaoO + 1
		criaLinha <- CriaLinhaGanhador("°",3)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[3,1] = "O") e (posicaoVetor[2,2] = "O") e (posicaoVetor[1,3] = "O") entao
		ganhador <- jogadorO
		pontuacaoO <- pontuacaoO + 1
		criaLinha <- CriaLinhaGanhador("°",8)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,3] = "O") e (posicaoVetor[2,3] = "O") e (posicaoVetor[3,3] = "O") entao
		ganhador <- jogadorO
		pontuacaoO <- pontuacaoO + 1
		criaLinha <- CriaLinhaGanhador("°",6)
		alguemGanhou <- verdadeiro
		senao
		se (posicaoVetor[1,1] <> " ") e (posicaoVetor[1,2] <> " ") e (posicaoVetor[1,3] <> " ") e (posicaoVetor[2,1] <> " ") e (posicaoVetor[2,2] <> " ") e (posicaoVetor[2,3] <> " ")e (posicaoVetor[3,1] <> " ") e (posicaoVetor[3,2] <> " ") e (posicaoVetor[3,3] <> " ") entao
		 ganhador <- "Empate"
		 pontuacaoEmpate <- pontuacaoEmpate + 1
		 alguemGanhou <- verdadeiro
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
fimprocedimento


//Apresenta mensagem de Parabens ou empate.
procedimento Parabens
    inicio
    Cabecalho()
	ExibirTabuleiro()
	
    se ganhador <> "Empate" entao

       escreval("                             PARABENS ",maiusc(ganhador))
       escreval("                            Você foi o vencedor!!")
       escreval("")
       escreval("")
       escreval("")

       escreval("Precione ENTER para uma nova rodada: ")

       leia(rodada)
	
	  alguemGanhou <- falso
	  limparVariaveis()

    senao
       escreval("                                 OPS!!!!!")
       escreval("                               Deu Velha!")
       escreval("")
       escreval("")
       escreval("")

       escreval("Precione ENTER para uma nova rodada: ")
       leia(rodada)

	  alguemGanhou <- falso
	  limparVariaveis()


    fimSe

fimprocedimento

//Marca na variável do tabuleiro a letra do jogador
funcao MarcarPosicao(posicaoPeca:inteiro;tipoDeCaractere:caractere) : caractere
	inicio
	
	se posicaoPeca > 9 entao
		retorne "invalido"
	fimSe
	
	escolha posicaoPeca
		caso 7
			se posicaoVetor[1,1] = " " entao
				posicaoVetor[1,1] <- tipoDeCaractere
				tabuleiro[7] <- jogadorAtual
				retorne "ok"
			senao
				retorne "ocupado"
			fimSe
		caso 8
			se posicaoVetor[1,2] = " "  entao
				posicaoVetor[1,2] <- tipoDeCaractere
				tabuleiro[8] <- jogadorAtual
				retorne "ok"
			senao
				retorne "ocupado"
			fimSe
		caso 9
			se posicaoVetor[1,3] = " " entao
				posicaoVetor[1,3] <- tipoDeCaractere
				tabuleiro[9] <- jogadorAtual
				retorne "ok"
			senao
				retorne "ocupado"
			fimSe
		caso 4
			se posicaoVetor[2,1] = " " entao
				posicaoVetor[2,1] <- tipoDeCaractere
				tabuleiro[4] <- jogadorAtual
				retorne "ok"
			senao
				retorne "ocupado"
			fimSe
		caso 5
			se posicaoVetor[2,2] = " " entao
				posicaoVetor[2,2] <- tipoDeCaractere
				tabuleiro[5] <- jogadorAtual
				retorne "ok"
			senao
				retorne "ocupado"
			fimSe
		caso 6
			se posicaoVetor[2,3] = " " entao
				posicaoVetor[2,3] <- tipoDeCaractere
				tabuleiro[6] <- jogadorAtual
				retorne "ok"
			senao
				retorne "ocupado"
			fimSe
		caso 1
			se posicaoVetor[3,1] = " " entao
				posicaoVetor[3,1] <- tipoDeCaractere
				tabuleiro[1] <- jogadorAtual
				retorne "ok"
			senao
				retorne "ocupado"
			fimSe
		caso 2
			se posicaoVetor[3,2] = " " entao
				posicaoVetor[3,2] <- tipoDeCaractere
				tabuleiro[2] <- jogadorAtual
				 retorne "ok"
			senao
				retorne "ocupado"
			fimSe
		caso 3
			se posicaoVetor[3,3] = " " entao
				posicaoVetor[3,3] <- tipoDeCaractere
				tabuleiro[3] <- jogadorAtual
				retorne "ok"
			senao
				retorne "ocupado"
			fimSe
	fimescolha

fimfuncao

//Exibe as pontuações dos jogadores
procedimento ExibirPontuacaoJogadores
inicio
      escreval("  Pontuação:")
      escreval("       ",jogadorX,": ",pontuacaoX)
      escreval("       ",jogadorO,": ",pontuacaoO)
      escreval("       Empate: ",pontuacaoEmpate)
      escreval("")
fimprocedimento


inicio

   _jogadaInvalida <- -1
   Cabecalho()
	
	escreval("Selecione um Jogo:")
	escreval("")
	escreval("1 - Um Jogador")
	escreval("2 - Dois Jogadores")
	escreval("3 - Sair")
	escreval("")
	escreva("Opção desejada: ")
	leia(opcao)
	
	limpatela
	Cabecalho()
	
	//Etapa para obter as informações dos jogadores
	se opcao = 1 entao
	   escreva("Digite o nome do jogador(X): ")
   	leia(jogadorX)
   	jogadorO <- "Maquina"
	fimSe
	
	se opcao = 2 entao
   	escreva("Digite o nome do primeiro jogador(X): ")
   	leia(jogadorX)
   	escreva("Digite o nome do segundo jogador(O): ")
   	leia(jogadorO)
	fimSe
	
	se opcao = 3 entao
	   fimalgoritmo
	fimSe
	//limpa a tela do jogo
	limpatela
	limparVariaveis()
	
	alguemGanhou <- falso
	jogadorAtual <- -1
	turno <- verdadeiro
	resultado <- ""
	pontuacaoO <- 0
	pontuacaoX <- 0
	criaLinha <- CriaLinhaGanhador(" ",0)
	
	//laço para a repetição para o display do jogo
	enquanto alguemGanhou = falso faca
	   numeroDeJogadas <- numeroDeJogadas + 1
	   limpatela
	   criaLinha <- CriaLinhaGanhador(" ",0)
		Cabecalho()
		ExibirTabuleiro()
		ExibirPontuacaoJogadores()
		
		se (jogadorAtual = -1) entao
			escreval("Agora é sua vez ",maiusc(jogadorX))
			escreva("Digite um número de 1 a 9 de acordo com as casas: ")
			leia(posicaoX)
			resultado <- MarcarPosicao(posicaoX,"X")
			//tabuleiro[posicaoX] <- -1
			se resultado = "ocupado" entao
			    escreval("A posição já esta ocupada, escolha outa.")
			senao
			    jogadorAtual <- 1
			fimSe
			resultado <- ""
			ganhador <- ""
		senao
   			se opcao = 1 entao
               escreval("Agora é sua vez ",maiusc(jogadorO))
      			//escreva("Digite um número de 1 a 9 de acordo com as casas: ")
               //leia(posicaoO)
               posicaoO <- JogadaDaMaquina()
      			resultado <- MarcarPosicao(posicaoO,"O")
      			//tabuleiro[posicaoO] <- 1
   			senao
   			   escreval("Agora é sua vez ",maiusc(jogadorO))
      			escreva("Digite um número de 1 a 9 de acordo com as casas: ")
               leia(posicaoO)
      			resultado <- MarcarPosicao(posicaoO,"O")
   			fimSe
   			se resultado = "ocupado" entao
   			    escreval("A posição já esta ocupada, escolha outa.")
   			senao
   			    jogadorAtual <- -1
   			fimSe
   			resultado <- ""
   			ganhador <- ""
		fimSe
		
      limpatela
      VerificaGanhador()

      se alguemGanhou = verdadeiro entao
         Parabens()
      fimSe

	fimenquanto

      
fimalgoritmo 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Imguvoss e KhaosDoctor, sei que ainda terei um caminho árduo pela frente. Sou graduado em Educação Física, mas minha paixão são as tecnologias, estou disposto a enfrentar esse caminho. Em breve, estarei voltando a faculdade para mais um desafio. Obrigado pelo isentivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 12/01/2016 at 14:34, Imguvoss disse:

Parabéns pelo seu Jogo da velha, para um iniciante ele está mais que excelente com disse meu amigo KhaosDoctor, jogos são uma parte bem complicada da programação, mas não posso deixar de deixar abaixo meu jogo da velha. Você pode usar ele para implementar seu código deixando ele mais funcional.


algoritmo "Jogodavelha"

var
   Numerodejogadas : inteiro
   Jogadavalortemp : inteiro
   Jogadavalor : inteiro
   Jogadoratual : inteiro
   Outrojogador : inteiro
   Contador : inteiro
   Jogadasvalidas : inteiro
   Jogadavalorretorno : inteiro
   _JogadaInvalida : inteiro
   Rodada: caractere
   Alguemganhou, turno : logico
   PosicaoX, PosicaoO, PontuacaoX, PontuacaoO, PontuacaoEmpate, ContadorColuna, ContadorLinha, Opcao : inteiro
   Tabuleiro: vetor[1..9] de inteiro
   Listajogadasvalidas:vetor[1..10] de inteiro
   JogadorX, JogadorO, Resultado, Ganhador, Crialinha : caractere
	Posicaovetor:vetor[1..3,1..3] de caractere
	Listras: vetor[1..8,1..6] de caractere
   

FUNCAO RetornaJogadaMaquina(jogadorEmQuestao : inteiro) : inteiro
var
   valorAtual : inteiro
inicio

      valorAtual <- jogadorEmQuestao
      jogadaValorRetorno <- 0

      se (tabuleiro[7] + tabuleiro[8] + tabuleiro[9]) = (2 * valorAtual) entao
         se tabuleiro[7] = 0 entao
            jogadaValorRetorno <- 7
         senao
              se tabuleiro[8] = 0 entao
                 jogadaValorRetorno <- 8
              senao
                   jogadaValorRetorno <- 9
              fimSe
         fimSe
      fimSe

      se (tabuleiro[4] + tabuleiro[5] + tabuleiro[6]) = (2 * valorAtual) entao
         se tabuleiro[4] = 0 entao
            jogadaValorRetorno <- 4
         senao
              se tabuleiro[5] = 0 entao
                 jogadaValorRetorno <- 5
              senao
                   jogadaValorRetorno <- 6
              fimSe
         fimSe
      fimSe

      se (tabuleiro[1] + tabuleiro[2] + tabuleiro[3]) = (2 * valorAtual) entao
         se tabuleiro[1] = 0 entao
            jogadaValorRetorno <- 1
         senao
              se tabuleiro[2] = 0 entao
                 jogadaValorRetorno <- 2
              senao
                   jogadaValorRetorno <- 3
              fimSe
         fimSe
      fimSe

      se (tabuleiro[7] + tabuleiro[4] + tabuleiro[1]) = (2 * valorAtual) entao
         se tabuleiro[7] = 0 entao
            jogadaValorRetorno <- 7
         senao
              se tabuleiro[4] = 0 entao
                 jogadaValorRetorno <- 4
              senao
                   jogadaValorRetorno <- 1
              fimSe
         fimSe
      fimSe

      se (tabuleiro[8] + tabuleiro[5] + tabuleiro[2]) = (2 * valorAtual) entao
         se tabuleiro[8] = 0 entao
            jogadaValorRetorno <- 8
         senao
              se tabuleiro[5] = 0 entao
                 jogadaValorRetorno <- 5
              senao
                   jogadaValorRetorno <- 2
              fimSe
         fimSe
      fimSe

      se (tabuleiro[9] + tabuleiro[6] + tabuleiro[3]) = (2 * valorAtual) entao
         se tabuleiro[9] = 0 entao
            jogadaValorRetorno <- 9
         senao
              se tabuleiro[6] = 0 entao
                 jogadaValorRetorno <- 6
              senao
                   jogadaValorRetorno <- 3
              fimSe
         fimSe
      fimSe

      se (tabuleiro[7] + tabuleiro[5] + tabuleiro[3]) = (2 * valorAtual) entao
         se tabuleiro[7] = 0 entao
            retorne 7
         senao
              se tabuleiro[5] = 0 entao
                 jogadaValorRetorno <- 5
              senao
                   jogadaValorRetorno <- 3
              fimSe
         fimSe
      fimSe

      se (tabuleiro[9] + tabuleiro[5] + tabuleiro[1]) = (2 * valorAtual) entao
         se tabuleiro[9] = 0 entao
            jogadaValorRetorno <- 9
         senao
              se tabuleiro[5] = 0 entao
                 jogadaValorRetorno <- 5
              senao
                   jogadaValorRetorno <- 1
              fimSe
         fimSe
      fimSe
      
      se jogadaValorRetorno <> 0 entao
         retorne jogadaValorRetorno
      senao
         retorne _jogadaInvalida
      fimSe
      
fimfuncao

//Decide a melhor jogada para a máquina
funcao JogadaDaMaquina() : inteiro
inicio

      jogadaValor <- 0
      //Se não existir mais jogadas retorna invalido
      se numeroDeJogadas = 9 entao
         jogadaValor <- -1
         retorne jogadaValor
      fimSe
      
      //Se ouver alguma jogada que possa te fazer ganhar, jogue!
      jogadaValorTemp <- RetornaJogadaMaquina(jogadorAtual)
      se jogadaValorTemp <> _jogadaInvalida entao
         jogadaValor <- jogadaValorTemp
         //retorne jogadaValor
      fimSe
      
      //Caso exita alguma jogada que não te faça perder, jogue!
      outroJogador <- RetornaOutroJogador(jogadorAtual)
      jogadaValorTemp <- RetornaJogadaMaquina(outroJogador)
      se (jogadaValorTemp <> _jogadaInvalida) e (jogadaValor = 0) entao
         jogadaValor <- jogadaValorTemp
         retorne jogadaValor
      fimSe

      //Tenta prevenir a vitoria do adversário (procura montar duas vitorias ao mesmo tempo)
      se (numeroDeJogadas = 3) e (jogadaValor = 0) entao
         se ((tabuleiro[1] * tabuleiro[9]) = 1) ou ((tabuleiro[3] * tabuleiro[7]) = 1) e (tabuleiro[5] <> 0)
            jogadaValor <- 1
            retorne jogadaValor
         fimSe
         
         se ((tabuleiro[2] * tabuleiro[9]) = 1) ou ((tabuleiro[1] * tabuleiro[6]) = 1) ou ((tabuleiro[2] * tabuleiro[6]) = 1) e (tabuleiro[5] <> 0)
            jogadaValor <- 2
            retorne jogadaValor
         fimSe
      fimSe
         
         //Tenta jogar no meio ou nas diagonais, maior chance de vitoria
      se (numeroDeJogadas <= 2) e (jogadaValor = 0) entao
         se tabuleiro[5] = 0 entao
            jogadaValor <- 5
         senao
            se tabuleiro[1] = 0 entao
               jogadaValor <- 1
            senao
               jogadaValor <- 8
            fimSe
         fimSe
      senao
           se jogadaValor = 0 entao
              jogadaValor <- _jogadaInvalida
              se tabuleiro[5] = 0 entao
                 jogadaValor <- 5
              senao
                 se tabuleiro[7] = 0 entao
                    jogadaValor <- 7
                 senao
                      se tabuleiro[9] = 0 entao
                         jogadaValor <- 9
                      senao
                           se tabuleiro[1] = 0 entao
                              jogadaValor <- 1
                           senao
                              se tabuleiro[3] = 0 entao
                                 jogadaValor <- 3
                              fimSe
                           fimSe
                      fimSe
                 fimSe
              fimSe
              se jogadaValor <> _jogadaInvalida entao
                 retorne jogadaValor
              fimSe
           fimSe
      fimSe
      
      PupulaListaDeJogadasValidas()
      jogadasValidas <- ListaJogadasValidas[1]
      
      //Se apenas restar uma jogada, jogue a primeira
      se (jogadasValidas = 1) entao
         jogadaValor <- ListaJogadasValidas[2]
         retorne jogadaValor
      fimSe
      
      //Se Nenhuma das regras não forem  atendidas, jogue a primeira jogada
      se jogadaValor <> 0 entao
         retorne jogadaValor
      senao
         jogadasValidas <- ListaJogadasValidas[2]
         retorne jogadasValidas
      fimSe
      
fimfuncao


//Popula o array "jogadasValdas" com uma lista de jogadas válidas
procedimento PupulaListaDeJogadasValidas
inicio

      //limpa variável
      para contador de 1 ate 10 faca
           ListaJogadasValidas[contador] <- 0
      fimPara

      //Preenche a variável
      ListaJogadasValidas[1] <- 0
      para contador de 1 ate 9 faca
           se tabuleiro[contador] = 0 entao
              ListaJogadasValidas[1] <- ListaJogadasValidas[1] + 1
              ListaJogadasValidas[ListaJogadasValidas[1] + 1] <- contador
           fimSe
      fimPara
      
fimProcedimento


//Retorna o valor do outro jogador
funcao RetornaOutroJogador(jogador:inteiro) : inteiro
inicio
      se jogador = -1 entao
         retorne 1
      senao
           retorne -1
      fimSe
fimfuncao

//Cabeçalho do jogo
procedimento  Cabecalho
   inicio
 	escreval("**********************************************************************************")
	escreval("*			      JOGO DA VELHA                                      *")
	escreval("**********************************************************************************")
	escreval("")
	escreval("")
fimprocedimento

//limpa o array do jogo
procedimento limparVariaveis
	inicio
	posicaoVetor[1,1] <- " "
	posicaoVetor[1,2] <- " "
	posicaoVetor[1,3] <- " "
	posicaoVetor[2,1] <- " "
	posicaoVetor[2,2] <- " "
	posicaoVetor[2,3] <- " "
	posicaoVetor[3,1] <- " "
	posicaoVetor[3,2] <- " "
	posicaoVetor[3,3] <- " "
	
	para contador de 1 ate 9 faca
	     tabuleiro[contador] <- 0
	fimPara
fimprocedimento

//Exibe o tabuleiro do jogo na tela
procedimento ExibirTabuleiro
   inicio
	escreval(" ",listras[7,1]," ",listras[4,1],"    |    ",listras[5,1],"    |   ",listras[6,1]," ",listras[8,1]," ")
	escreval(" ",listras[1,1]," ",posicaoVetor[1,1]," ",listras[1,2],"  | ",listras[1,3],"  ",posicaoVetor[1,2],"  ",listras[1,4]," | ",listras[1,5]," ",posicaoVetor[1,3]," ",listras[1,6]," ")
	escreval("   ",listras[4,2],"  ",listras[7,2]," |    ",listras[5,2],"    | ",listras[8,2]," ",listras[6,2],"   ")
	escreval("--------+---------+-------")
	escreval("   ",listras[4,3],"    | ",listras[7,3],"  ",listras[5,3],"  ",listras[8,3]," |   ",listras[6,3],"   ")
	escreval(" ",listras[2,1]," ",posicaoVetor[2,1]," ",listras[2,2],"  | ",listras[2,3],"  ",posicaoVetor[2,2],"  ",listras[2,4]," | ",listras[2,5]," ",posicaoVetor[2,3]," ",listras[2,6]," ")
	escreval("   ",listras[4,4],"    | ",listras[8,4],"  ",listras[5,4],"  ",listras[7,4]," |   ",listras[6,4],"   ")
	escreval("--------+---------+-------")
	escreval("   ",listras[4,5],"  ",listras[8,5]," |    ",listras[5,5],"    | ",listras[7,5]," ",listras[6,5],"   ")
	escreval(" ",listras[3,1]," ",posicaoVetor[3,1]," ",listras[3,2],"  | ",listras[3,3],"  ",posicaoVetor[3,2],"  ",listras[3,4]," | ",listras[3,5]," ",posicaoVetor[3,3]," ",listras[3,6]," ")
	escreval(" ",listras[8,6]," ",listras[4,6],"    |    ",listras[5,6],"    |   ",listras[6,6]," ",listras[7,6]," ")
	escreval("")
	escreval("")

fimprocedimento

//Cria uma linha setando a coluna ou linha ganhadora
funcao CriaLinhaGanhador(char:caractere;linha:inteiro) : caractere
inicio
	
	se linha = 0 entao
		para contadorColuna de 1 ate 8 faca
			para contadorLinha de 1 ate 6 faca
				listras[contadorColuna,contadorLinha] <- " "
			fimPara
		fimPara
	senao
		para contadorLinha de 1 ate 6 faca
			listras[linha,contadorLinha] <- char
		fimPara
	fimSe

fimfuncao

//Verifica se ouve algum ganhador.
procedimento VerificaGanhador
   inicio
		se  (posicaoVetor[1,1] = "X") e (posicaoVetor[1,2] = "X") e (posicaoVetor[1,3] = "X") entao
		ganhador <- jogadorX
		pontuacaoX <- pontuacaoX + 1
		criaLinha <- CriaLinhaGanhador("°",1)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,1] = "X") e (posicaoVetor[2,2] = "X") e (posicaoVetor[3,3] = "X") entao
		ganhador <- jogadorX
		pontuacaoX <- pontuacaoX + 1
		criaLinha <- CriaLinhaGanhador("°",7)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,1] = "X") e (posicaoVetor[2,1] = "X") e (posicaoVetor[3,1] = "X") entao
		ganhador <- jogadorX
		pontuacaoX <- pontuacaoX + 1
		criaLinha <- CriaLinhaGanhador("°",4)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,2] = "X") e (posicaoVetor[2,2] = "X") e (posicaoVetor[3,2] = "X") entao
		ganhador <- jogadorX
		pontuacaoX <- pontuacaoX + 1
		criaLinha <- CriaLinhaGanhador("°",5)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[2,1] = "X") e (posicaoVetor[2,2] = "X") e (posicaoVetor[2,3] = "X") entao
		ganhador <- jogadorX
		pontuacaoX <- pontuacaoX + 1
		criaLinha <- CriaLinhaGanhador("°",2)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[3,1] = "X") e (posicaoVetor[3,2] = "X") e (posicaoVetor[3,3] = "X") entao
		ganhador <- jogadorX
		pontuacaoX <- pontuacaoX + 1
		criaLinha <- CriaLinhaGanhador("°",3)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[3,1] = "X") e (posicaoVetor[2,2] = "X") e (posicaoVetor[1,3] = "X") entao
		ganhador <- jogadorX
		pontuacaoX <- pontuacaoX + 1
		criaLinha <- CriaLinhaGanhador("°",8)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,3] = "X") e (posicaoVetor[2,3] = "X") e (posicaoVetor[3,3] = "X") entao
		ganhador <- jogadorX
		pontuacaoX <- pontuacaoX + 1
		criaLinha <- CriaLinhaGanhador("°",6)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,1] = "O") e (posicaoVetor[1,2] = "O") e (posicaoVetor[1,3] = "O") entao
		ganhador <- jogadorO
		pontuacaoO <- pontuacaoO + 1
		criaLinha <- CriaLinhaGanhador("°",1)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,1] = "O") e (posicaoVetor[2,2] = "O") e (posicaoVetor[3,3] = "O") entao
		ganhador <- jogadorO
		pontuacaoO <- pontuacaoO + 1
		criaLinha <- CriaLinhaGanhador("°",7)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,1] = "O") e (posicaoVetor[2,1] = "O") e (posicaoVetor[3,1] = "O") entao
		ganhador <- jogadorO
		pontuacaoO <- pontuacaoO + 1
		criaLinha <- CriaLinhaGanhador("°",4)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,2] = "O") e (posicaoVetor[2,2] = "O") e (posicaoVetor[3,2] = "O") entao
		ganhador <- jogadorO
		pontuacaoO <- pontuacaoO + 1
		criaLinha <- CriaLinhaGanhador("°",5)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[2,1] = "O") e (posicaoVetor[2,2] = "O") e (posicaoVetor[2,3] = "O") entao
		ganhador <- jogadorO
		pontuacaoO <- pontuacaoO + 1
		criaLinha <- CriaLinhaGanhador("°",2)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[3,1] = "O") e (posicaoVetor[3,2] = "O") e (posicaoVetor[3,3] = "O") entao
		ganhador <- jogadorO
		pontuacaoO <- pontuacaoO + 1
		criaLinha <- CriaLinhaGanhador("°",3)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[3,1] = "O") e (posicaoVetor[2,2] = "O") e (posicaoVetor[1,3] = "O") entao
		ganhador <- jogadorO
		pontuacaoO <- pontuacaoO + 1
		criaLinha <- CriaLinhaGanhador("°",8)
		alguemGanhou <- verdadeiro
		senao
		se  (posicaoVetor[1,3] = "O") e (posicaoVetor[2,3] = "O") e (posicaoVetor[3,3] = "O") entao
		ganhador <- jogadorO
		pontuacaoO <- pontuacaoO + 1
		criaLinha <- CriaLinhaGanhador("°",6)
		alguemGanhou <- verdadeiro
		senao
		se (posicaoVetor[1,1] <> " ") e (posicaoVetor[1,2] <> " ") e (posicaoVetor[1,3] <> " ") e (posicaoVetor[2,1] <> " ") e (posicaoVetor[2,2] <> " ") e (posicaoVetor[2,3] <> " ")e (posicaoVetor[3,1] <> " ") e (posicaoVetor[3,2] <> " ") e (posicaoVetor[3,3] <> " ") entao
		 ganhador <- "Empate"
		 pontuacaoEmpate <- pontuacaoEmpate + 1
		 alguemGanhou <- verdadeiro
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
		fimSe
fimprocedimento


//Apresenta mensagem de Parabens ou empate.
procedimento Parabens
    inicio
    Cabecalho()
	ExibirTabuleiro()
	
    se ganhador <> "Empate" entao

       escreval("                             PARABENS ",maiusc(ganhador))
       escreval("                            Você foi o vencedor!!")
       escreval("")
       escreval("")
       escreval("")

       escreval("Precione ENTER para uma nova rodada: ")

       leia(rodada)
	
	  alguemGanhou <- falso
	  limparVariaveis()

    senao
       escreval("                                 OPS!!!!!")
       escreval("                               Deu Velha!")
       escreval("")
       escreval("")
       escreval("")

       escreval("Precione ENTER para uma nova rodada: ")
       leia(rodada)

	  alguemGanhou <- falso
	  limparVariaveis()


    fimSe

fimprocedimento

//Marca na variável do tabuleiro a letra do jogador
funcao MarcarPosicao(posicaoPeca:inteiro;tipoDeCaractere:caractere) : caractere
	inicio
	
	se posicaoPeca > 9 entao
		retorne "invalido"
	fimSe
	
	escolha posicaoPeca
		caso 7
			se posicaoVetor[1,1] = " " entao
				posicaoVetor[1,1] <- tipoDeCaractere
				tabuleiro[7] <- jogadorAtual
				retorne "ok"
			senao
				retorne "ocupado"
			fimSe
		caso 8
			se posicaoVetor[1,2] = " "  entao
				posicaoVetor[1,2] <- tipoDeCaractere
				tabuleiro[8] <- jogadorAtual
				retorne "ok"
			senao
				retorne "ocupado"
			fimSe
		caso 9
			se posicaoVetor[1,3] = " " entao
				posicaoVetor[1,3] <- tipoDeCaractere
				tabuleiro[9] <- jogadorAtual
				retorne "ok"
			senao
				retorne "ocupado"
			fimSe
		caso 4
			se posicaoVetor[2,1] = " " entao
				posicaoVetor[2,1] <- tipoDeCaractere
				tabuleiro[4] <- jogadorAtual
				retorne "ok"
			senao
				retorne "ocupado"
			fimSe
		caso 5
			se posicaoVetor[2,2] = " " entao
				posicaoVetor[2,2] <- tipoDeCaractere
				tabuleiro[5] <- jogadorAtual
				retorne "ok"
			senao
				retorne "ocupado"
			fimSe
		caso 6
			se posicaoVetor[2,3] = " " entao
				posicaoVetor[2,3] <- tipoDeCaractere
				tabuleiro[6] <- jogadorAtual
				retorne "ok"
			senao
				retorne "ocupado"
			fimSe
		caso 1
			se posicaoVetor[3,1] = " " entao
				posicaoVetor[3,1] <- tipoDeCaractere
				tabuleiro[1] <- jogadorAtual
				retorne "ok"
			senao
				retorne "ocupado"
			fimSe
		caso 2
			se posicaoVetor[3,2] = " " entao
				posicaoVetor[3,2] <- tipoDeCaractere
				tabuleiro[2] <- jogadorAtual
				 retorne "ok"
			senao
				retorne "ocupado"
			fimSe
		caso 3
			se posicaoVetor[3,3] = " " entao
				posicaoVetor[3,3] <- tipoDeCaractere
				tabuleiro[3] <- jogadorAtual
				retorne "ok"
			senao
				retorne "ocupado"
			fimSe
	fimescolha

fimfuncao

//Exibe as pontuações dos jogadores
procedimento ExibirPontuacaoJogadores
inicio
      escreval("  Pontuação:")
      escreval("       ",jogadorX,": ",pontuacaoX)
      escreval("       ",jogadorO,": ",pontuacaoO)
      escreval("       Empate: ",pontuacaoEmpate)
      escreval("")
fimprocedimento


inicio

   _jogadaInvalida <- -1
   Cabecalho()
	
	escreval("Selecione um Jogo:")
	escreval("")
	escreval("1 - Um Jogador")
	escreval("2 - Dois Jogadores")
	escreval("3 - Sair")
	escreval("")
	escreva("Opção desejada: ")
	leia(opcao)
	
	limpatela
	Cabecalho()
	
	//Etapa para obter as informações dos jogadores
	se opcao = 1 entao
	   escreva("Digite o nome do jogador(X): ")
   	leia(jogadorX)
   	jogadorO <- "Maquina"
	fimSe
	
	se opcao = 2 entao
   	escreva("Digite o nome do primeiro jogador(X): ")
   	leia(jogadorX)
   	escreva("Digite o nome do segundo jogador(O): ")
   	leia(jogadorO)
	fimSe
	
	se opcao = 3 entao
	   fimalgoritmo
	fimSe
	//limpa a tela do jogo
	limpatela
	limparVariaveis()
	
	alguemGanhou <- falso
	jogadorAtual <- -1
	turno <- verdadeiro
	resultado <- ""
	pontuacaoO <- 0
	pontuacaoX <- 0
	criaLinha <- CriaLinhaGanhador(" ",0)
	
	//laço para a repetição para o display do jogo
	enquanto alguemGanhou = falso faca
	   numeroDeJogadas <- numeroDeJogadas + 1
	   limpatela
	   criaLinha <- CriaLinhaGanhador(" ",0)
		Cabecalho()
		ExibirTabuleiro()
		ExibirPontuacaoJogadores()
		
		se (jogadorAtual = -1) entao
			escreval("Agora é sua vez ",maiusc(jogadorX))
			escreva("Digite um número de 1 a 9 de acordo com as casas: ")
			leia(posicaoX)
			resultado <- MarcarPosicao(posicaoX,"X")
			//tabuleiro[posicaoX] <- -1
			se resultado = "ocupado" entao
			    escreval("A posição já esta ocupada, escolha outa.")
			senao
			    jogadorAtual <- 1
			fimSe
			resultado <- ""
			ganhador <- ""
		senao
   			se opcao = 1 entao
               escreval("Agora é sua vez ",maiusc(jogadorO))
      			//escreva("Digite um número de 1 a 9 de acordo com as casas: ")
               //leia(posicaoO)
               posicaoO <- JogadaDaMaquina()
      			resultado <- MarcarPosicao(posicaoO,"O")
      			//tabuleiro[posicaoO] <- 1
   			senao
   			   escreval("Agora é sua vez ",maiusc(jogadorO))
      			escreva("Digite um número de 1 a 9 de acordo com as casas: ")
               leia(posicaoO)
      			resultado <- MarcarPosicao(posicaoO,"O")
   			fimSe
   			se resultado = "ocupado" entao
   			    escreval("A posição já esta ocupada, escolha outa.")
   			senao
   			    jogadorAtual <- -1
   			fimSe
   			resultado <- ""
   			ganhador <- ""
		fimSe
		
      limpatela
      VerificaGanhador()

      se alguemGanhou = verdadeiro entao
         Parabens()
      fimSe

	fimenquanto

      
fimalgoritmo 

Curti o seu, mas meus professores querem uma validação que não seja fixa! Alguém saberia uma forma de fazer? Na diagonal pelo menos???

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.