VisuAlg Web

Manipulação de Matrizes

Veja um exemplo completo de jogo da velha em VisuAlg com matrizes, procedimentos, turnos e validacao de jogadas.

Este projeto de encerramento testará suas capacidades em Matrizes e Procedimentos. O objetivo é desenhar um Tabuleiro 3x3 que guarda textos. Começaremos com a sub-rotina para desenhar o ambiente de forma isolada, invocando-a na rotina principal.

Exemplo de codigoVisuAlg
algoritmo "JogoDaVelha_MotorVisual"

var
  m: vetor[1..3, 1..3] de caractere
  l, c: inteiro

procedimento MostrarTabuleiro
  inicio
    limpatela
    escreval(" Jogo da Velha (Motor)")
    escreval("")
    para l de 1 ate 3 faca
      para c de 1 ate 3 faca
        escreva("[", m[l,c]:1, "] ") // O :1 garante uma formatação bonita
      fimpara
      escreval("") // Pula de linha ao terminar as colunas (c)
    fimpara
fimprocedimento

inicio
  // Povoar com espaços vazios para limpar a tela
  para l de 1 ate 3 faca
    para c de 1 ate 3 faca
      m[l,c] <- "-"
    fimpara
  fimpara

  // Fazendo jogadas manuais na matriz:
  m[2,2] <- "X"
  m[1,3] <- "O"

  MostrarTabuleiro // Exibe a interface

fimalgoritmo

No mundo real, essas jogadas (X e O) seriam capturadas no console em um laço de Repetição infinito de até 9 turnos, testando colisão para evitar que o X jogue na mesma gaveta do O. Se você chegou até aqui dominando a lógica de matrizes, o céu é o limite! Parabéns por concluir o material didático do VisuAlg Web.

Exemplo de codigoVisuAlg
algoritmo "JogoDaVelha_BonusColisao"

var
  m: vetor[1..3, 1..3] de caractere
  l, c: inteiro
  linhaJogada, colJogada: inteiro
  turno: inteiro
  simboloAtual: caractere

procedimento MostrarTabuleiro
  inicio
    limpatela
    escreval(" Jogo da Velha (Bonus Colisao)")
    escreval("")
    para l de 1 ate 3 faca
      para c de 1 ate 3 faca
        escreva("[", m[l,c]:1, "] ")
      fimpara
      escreval("")
    fimpara
fimprocedimento

inicio
  para l de 1 ate 3 faca
    para c de 1 ate 3 faca
      m[l,c] <- "-"
    fimpara
  fimpara

  para turno de 1 ate 9 faca
    se (turno MOD 2 = 1) entao
      simboloAtual <- "X"
    senao
      simboloAtual <- "O"
    fimse

    MostrarTabuleiro
    escreval("")
    escreval("Vez do jogador ", simboloAtual)

    escreva("Qual linha deseja jogar? ")
    leia(linhaJogada)
    escreva("Qual coluna deseja jogar? ")
    leia(colJogada)

    se (linhaJogada < 1 ou linhaJogada > 3 ou colJogada < 1 ou colJogada > 3) entao
      escreval("Posicao invalida! Perca o turno.")
    senao
      se (m[linhaJogada, colJogada] = "-") entao
        m[linhaJogada, colJogada] <- simboloAtual
      senao
        escreval("Lugar ja ocupado! Perca o turno.")
      fimse
    fimse
  fimpara

  MostrarTabuleiro
  escreval("Fim do jogo!")
fimalgoritmo
Desafio Final: Use o motor visual base para criar um loop de turnos alternados entre dois jogadores usando a lógica de colisão ensinada no bônus.