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
fimalgoritmoNo 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!")
fimalgoritmoDesafio 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.