Ir ao conteúdo

Posts recomendados

Postado

Estou tentando completar esse código, é para quando finalizar o jogo, perguntar se quer continuar jogando e alternar para quem começa o jogo. 

Primeiramente quem começa o jogo é o "x", aí se escolherem que querem continuar, o jogo tem que começar perguntando em que lugar gostaria de colocar "o" agora. Mas o código não funciona como o esperado.

Criei um procedimento reiniciarVelha() para reiniciar a velha e coloquei essa última parte para ver se conseguia alternar entre os jogadores, mas parece não funcionar

 se simbolo = "x" então
         simbolo <- "o"
      senao
         se simbolo = "o" então
            simbolo <- "x"
         fimse
      fimse

 

 

Código completo :

Algoritmo "JogoDaVelha"

Var

   simbolo, pergunta : caractere
   tabela : vetor [1..3,1..3] de caractere
   linha, coluna, contador,  posicao : inteiro
   resultado, resposta: logico
   jogoTerminou : logico


procedimento mostrarVelha ()
var
   linha,coluna, contador : inteiro
inicio
   contador <- 1
   para linha <- 1 ate 3 faca
      para coluna <- 1 ate 3 faca
         se (tabela[linha,coluna] <> "x") e (tabela[linha,coluna]<> "o") então
            tabela[linha,coluna] <- numpcarac(contador)
         fimse
         escreva(tabela[linha,coluna]:3)
         contador <- contador+1
      fimPara
      escreval()
   fimPara
fimProcedimento

função jogar (simbolo:caractere; posicao:inteiro): logico
var
   mudou : logico
inicio
   mudou <- falso
   para linha <- 1 ate 3 faca
      para coluna <- 1 ate 3 faca
         se (tabela[linha,coluna] = numpcarac(posicao)) então
            tabela[linha,coluna] <- simbolo
            mudou <- verdadeiro
         fimSe
      fimPara
   fimPara
   retorne mudou
fimFuncao

procedimento trocarJogador ()
inicio
   se simbolo = "x" então
      simbolo <- "o"
   senao
      simbolo <- "x"
   fimSe
fimProcedimento

funcao jogoTerminou (): logico
var
   terminou : logico
   espacosDisponiveis : inteiro

inicio
   terminou <- falso
   // linhas
   para linha <- 1 ate 3 faca
      se (tabela[linha,1] = tabela[linha,2])e (tabela[linha,1]= tabela[linha,3])então
         terminou <- verdadeiro
      fimSe
   fimPara
   // colunas
   para coluna <- 1 ate 3 faca
      se (tabela[1,coluna] = tabela[2,coluna])e (tabela[1,coluna]= tabela[3,coluna]) então
         terminou <- verdadeiro
      fimSe
   fimPara
   // diagonal
   se  (tabela[1,1] =  tabela[2,2]) e (tabela[1,1] = tabela[3,3]) ou  (tabela[1,3] =  tabela[2,2]) e  (tabela[1,3] =  tabela[3,1]) então
      terminou <- verdadeiro
   fimSe
   // Empate
   para linha <- 1 ate 3 faca
      para coluna <- 1 ate 3 faca
         se (tabela[linha,coluna] <> "x") e (tabela[linha,coluna]<> "o") então
            espacosDisponiveis <-  espacosDisponiveis+1
         fimSe
      fimPara
   fimPara
   se  espacosDisponiveis = 0 então
      terminou <- verdadeiro
   fimSe
   retorne terminou
fimFuncao

procedimento reiniciarVelha()
var
   contador : inteiro

inicio
   contador <- 1
   para linha <- 1 ate 3 faca
      para coluna <- 1 ate 3 faca
         tabela[linha,coluna] <- numpcarac(contador)
         escreva(tabela[linha,coluna]:3)
         contador <- contador+1
      fimpara
      escreval()
   fimpara
fimProcedimento

Inicio
   mostrarVelha ()
   simbolo <- "x"
   resposta <- Verdadeiro
   enquanto resposta = verdadeiro faca

      repita
         repita
            escreval("Informe a posição que gostaria de jogar ", simbolo:1)
            leia(posicao)
            resultado <- jogar(simbolo,posicao)
            se resultado = falso então
               escreval (" Jogada inválida")
            fimSe
            mostrarVelha ()
         ate resultado = verdadeiro
         trocarJogador ()
      ate jogoTerminou = verdadeiro
      escreval("Jogo finalizado")
      escreval (" Gostaria de continuar jogando?")
      leia(pergunta)
      se pergunta <> "s" então
         resposta <- falso
      fimse
      reiniciarVelha()
      se simbolo = "x" então
         simbolo <- "o"
      senao
         se simbolo = "o" então
            simbolo <- "x"
         fimse
      fimse
   fimenquanto





Fimalgoritmo

 

  • Amei 1
Postado

@Eli Almeida   seu código está funcionando bem ,  porém não entendi o modo de jogar , pois parece que seja para apenas um jogador ,  ou talvez para dois jogadores humanos ,  sendo  que cada um joga  e espera o outro fazer a jogada dele ,   e se fosse para jogar contra o computador  poderia colocar para que o computador escolhesse  aleatoriamente uma das posições usando a função "randi" .

  • Amei 1
Postado

@devair1010 , preciso resolver essa questão que o enunciado mostra através da imagem. Será que o tabuleiro tem que iniciar assim  como está na imagem em verde, ou pode ficar assim como está em preto?  :

Algoritmo "JogoDaVelha"


Var


   simbolo, pergunta,c : caractere
   tabela : vetor [1..3,1..3] de caractere
   linha, coluna, contador,  posicao : inteiro
   resultado, resposta: logico
   jogoTerminou : logico




procedimento mostrarVelha ()
var
   linha,coluna, contador : inteiro
inicio
   contador <- 1
   para linha <- 1 ate 3 faca
      para coluna <- 1 ate 3 faca
         se (tabela[linha,coluna] <> "x") e (tabela[linha,coluna]<> "o") então
            tabela[linha,coluna] <- numpcarac(contador)
         fimse
         escreva(tabela[linha,coluna]:3)
         contador <- contador+1
      fimPara
      escreval()
   fimPara
fimProcedimento


função jogar (simbolo:caractere; posicao:inteiro): logico
var
   mudou : logico
inicio
   mudou <- falso
   para linha <- 1 ate 3 faca
      para coluna <- 1 ate 3 faca
         se (tabela[linha,coluna] = numpcarac(posicao)) então
            tabela[linha,coluna] <- simbolo
            mudou <- verdadeiro
         fimSe
      fimPara
   fimPara
   retorne mudou
fimFuncao


procedimento trocarJogador ()
inicio
   se simbolo = "x" então
      simbolo <- "o"
   senao
      simbolo <- "x"
   fimSe
fimProcedimento


funcao jogoTerminou (): logico
var
   terminou : logico
   espacosDisponiveis : inteiro


inicio
   terminou <- falso
   // linhas
   para linha <- 1 ate 3 faca
      se (tabela[linha,1] = tabela[linha,2])e (tabela[linha,1]= tabela[linha,3])então
         terminou <- verdadeiro
      fimSe
   fimPara
   // colunas
   para coluna <- 1 ate 3 faca
      se (tabela[1,coluna] = tabela[2,coluna])e (tabela[1,coluna]= tabela[3,coluna]) então
         terminou <- verdadeiro
      fimSe
   fimPara
   // diagonal
   se  (tabela[1,1] =  tabela[2,2]) e (tabela[1,1] = tabela[3,3]) ou  (tabela[1,3] =  tabela[2,2]) e  (tabela[1,3] =  tabela[3,1]) então
      terminou <- verdadeiro
   fimSe
   // Empate
   para linha <- 1 ate 3 faca
      para coluna <- 1 ate 3 faca
         se (tabela[linha,coluna] <> "x") e (tabela[linha,coluna]<> "o") então
            espacosDisponiveis <-  espacosDisponiveis+1
         fimSe
      fimPara
   fimPara
   se  espacosDisponiveis = 0 então
      terminou <- verdadeiro
   fimSe
   retorne terminou
fimFuncao


procedimento reiniciarVelha()
var
   contador : inteiro


inicio
   contador <- 1
   para linha <- 1 ate 3 faca
      para coluna <- 1 ate 3 faca
         tabela[linha,coluna] <- numpcarac(contador)
         escreva(tabela[linha,coluna]:3)
         contador <- contador+1
      fimpara
      escreval()
   fimpara
   
   
  se c = "x" então
         simbolo <- "o"
         c <- simbolo
      senao
         se c = "o" então
            simbolo <- "x"
            c <- simbolo
         fimse
      fimse
fimProcedimento


Inicio
   mostrarVelha ()
   simbolo <- "x"
   resposta <- Verdadeiro
   c <- simbolo
   enquanto resposta = verdadeiro faca


      repita
         repita
            escreval("Informe a posição que gostaria de jogar ", simbolo:1)
            leia(posicao)
            resultado <- jogar(simbolo,posicao)
            se resultado = falso então
               escreval (" Jogada inválida")
            fimSe
            mostrarVelha ()
         ate resultado = verdadeiro
         trocarJogador ()
      ate jogoTerminou = verdadeiro
      escreval("Jogo finalizado")
      escreval (" Gostaria de continuar jogando?")
      leia(pergunta)
      se pergunta <> "s" então
         resposta <- falso
      fimse
      reiniciarVelha()


   fimenquanto

Fimalgoritmo

 

   

 

 

 

 

 

 

 

 

 

 

Captura de tela 2024-04-14 235455.png

Captura de tela 2024-04-15 0002008(1).png

Captura de tela_14-4-2024_192548_classroom.google.com(1).jpeg

  • Curtir 1
  • 3 semanas depois...
  • Membro VIP
Postado

Só analisando alguns pontos...

 

 

Um detalhezinho para o primeiro código:

 

Em 14/04/2024 às 01:41, Eli Almeida disse:
      reiniciarVelha()
        
      se simbolo = "x" então
         simbolo <- "o"
      senao
         se simbolo = "o" então
            simbolo <- "x"
         fimse
      fimse

 

Oras! Essa "troca" já existia no código:

 

Em 14/04/2024 às 01:41, Eli Almeida disse:
procedimento trocarJogador ()
inicio
   se simbolo = "x" então
      simbolo <- "o"
   senao
      simbolo <- "x"
   fimSe
fimProcedimento

 

Seria só chamar a função:

 

      reiniciarVelha()
      trocarJogador()

 

...no novo código o problema da substituição já foi resolvida, que seria "salvando o jogador que vai começar". 🙂

 

 

 

 

Para o novo código, temos um probleminha de conceito. Se a função chama-se "mostrar", nela não* deveria mexer em nada nos dados.... Só remover o se.

 

Errado*

Em 15/04/2024 às 01:36, Eli Almeida disse:
procedimento mostrarVelha ()
var
   linha, coluna, contador : inteiro
inicio
   contador <- 1
     
   para linha <- 1 ate 3 faca
      para coluna <- 1 ate 3 faca
         se (tabela[linha,coluna] <> "x") e (tabela[linha,coluna]<> "o") então
            tabela[linha,coluna] <- numpcarac(contador)
         fimse
     
         escreva(tabela[linha,coluna]:3)
         contador <- contador+1
      fimPara
     
      escreval()
   fimPara
fimProcedimento

 

 

Correto:

procedimento mostrarVelha ()
var
   linha, coluna : inteiro
inicio
   para linha <- 1 ate 3 faca
      para coluna <- 1 ate 3 faca
         escreva (tabela[linha,coluna]:3)
      fimPara
      
      escreval()
   fimPara
fimProcedimento

 

 

 

Veja que no código "errado", para cada vez que mostrar a velha, estará reescrevendo a tabela redundantemente. (Onde já tem o número, vai ter o mesmo número novamente...)

 

A mesma regra vale para o reiniciarVelha().

 

Em 15/04/2024 às 01:36, Eli Almeida disse:
procedimento reiniciarVelha()
var
   contador : inteiro
inicio
   contador <- 1
     
   para linha <- 1 ate 3 faca
      para coluna <- 1 ate 3 faca
         tabela[linha,coluna] <- numpcarac(contador)
         escreva(tabela[linha,coluna]:3)
         contador <- contador+1
      fimpara
     
      escreval()
   fimpara
      
   se c = "x" então
      simbolo <- "o"
      c <- simbolo
   senao
      se c = "o" então
         simbolo <- "x"
         c <- simbolo
      fimse
   fimse
fimProcedimento

 

Já existe uma função com o papel de mostrar, correto?... Deixa então o ela executar. Só remover o se lá dentro do para.

 

procedimento reiniciarVelha ()
var
   contador : inteiro
inicio
   contador <- 1
   
   para linha <- 1 ate 3 faca
      para coluna <- 1 ate 3 faca
         tabela[linha,coluna] <- numpcarac(contador)
         contador <- contador+1
      fimpara
   fimpara

   se c = "x" então
      simbolo <- "o"
      c <- simbolo
   senao
      se c = "o" então
         simbolo <- "x"
         c <- simbolo
      fimse
   fimse
fimProcedimento

 

Cada um no seu quadrado 😉.

 

**Como esperado, daí vai precisar chamar as duas funções para o código funcionar corretamente**

 

 

Por falar em papeis... poderia retirar esse "troca da vez" de dentro do reiniciarVelha(), pois seria também uma função separada. Poderia criar algo como "definirQuemJoga()", onde na primeira vez seta para o "x", e depois seguiria com essa lógica de alternar o jogador. No código, chamaria logo após o comando enquanto, antes do repita. (Não testei, mas acho que lá mesmo.)

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!