Sei sulla pagina 1di 32

RELATÓRIO

Computação Cientifica

Jogo do galo

INTEGRANTES DO GRUPO

CURSO:
DOCENTE:
TURMA: EQM– M1
Página 2 de 32

Introdução
O jogo da velha é um jogo muito simples, geralmente jogado com caneta e papel, por
duas pessoas. Uma pessoa representa suas jogadas por um X e outra por um círculo.
Aqui, ilustraremos estes símbolos com as letras X e O. Se o jogador fizer uma
combinação de três símbolos em uma linha ou diagonal, ele vence.

O princípio deste jogo aqui é o mesmo. A “inteligência artificial” será utilizada para o
computador confrontar o jogador. Ou seja, não haverá duas pessoas, como de costume,
neste jogo. Será o jogador contra o computador.

Este capítulo não introduz muitos conceitos novos, mas aprimora a habilidade para
desenvolver jogos. Afinal, o principal de um jogo não é apenas o uso de recursos
gráficos e sonoros, mas uma boa lógica, funcionando adequadamente.

Objetivo
Página 3 de 32

Objectivo Geral
 Criar um algoritmo do jogo do jogo do galo

Objectivos específicos
 Criar o algoritmo do jogo da velha e inovar o algoritmo

Algoritmo do jogo do galo


Página 4 de 32

Para este projecto do jogo da velha o nosso grupo baseou-se na ideia de (Imguvoss e
KhaosDoctor) em que o algoritmo apresentou diversas melhorias.

algoritmo "Jogodogalo"

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
Página 5 de 32

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
Página 6 de 32

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


Página 7 de 32

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
Página 8 de 32

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
Página 9 de 32

//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

//jogada para ganhar, jogue!

jogadaValorTemp <- RetornaJogadaMaquina(jogadorAtual)

se jogadaValorTemp <> _jogadaInvalida entao

jogadaValor <- jogadaValorTemp

//retorne jogadaValor

fimSe

//Caso tenha alguma jogada, jogue!

outroJogador <- RetornaOutroJogador(jogadorAtual)

jogadaValorTemp <- RetornaJogadaMaquina(outroJogador)

se (jogadaValorTemp <> _jogadaInvalida) e (jogadaValor = 0) entao

jogadaValor <- jogadaValorTemp

retorne jogadaValor

fimSe

//prevenir a vitoria do adversário


Página 10 de 32

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

// 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


Página 11 de 32

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]


Página 12 de 32

//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

//"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
Página 13 de 32

//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("*********ADILSON**PASSOS****JOEL**KAYAYA***PEDRO**SOL
ADY***RICARDO**GOUVEIA******************")
Página 14 de 32

escreval("* JOGO DO GALO


*")

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
Página 15 de 32

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
Página 16 de 32

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
Página 17 de 32

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


Página 18 de 32

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


Página 19 de 32

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)


Página 20 de 32

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
Página 21 de 32

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(" PARABÉNS ",maiusc(ganhador))

escreval(" Você foi o vencedor!!")

escreval("")

escreval("")

escreval("")
Página 22 de 32

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

leia(rodada)

alguemGanhou <- falso

limparVariaveis()

senao

escreval(" kkkkkkkkk " )

escreval(" OS dois estão quentes,foi empate!")

escreval("")

escreval("")

escreval("")

escreval("Queres a desforra? aperta Enter: ")

leia(rodada)

alguemGanhou <- falso

limparVariaveis()

fimSe

fimprocedimento

//Marca na variável do tabuleiro a letra do jogador


Página 23 de 32

funcao MarcarPosicao(posicaoPeca:inteiro;tipoDeCaractere:caractere) : caractere

inicio

se posicaoPeca > 9 entao

retorne "invalido"

fimSe

escolha posicaoPeca

caso 7

se posicaoVetor[3,1] = " " entao

posicaoVetor[3,1] <-
tipoDeCaractere

tabuleiro[7] <- jogadorAtual

retorne "ok"

senao

retorne "ocupado"

fimSe

caso 8

se posicaoVetor[3,2] = " " entao

posicaoVetor[3,2] <-
tipoDeCaractere

tabuleiro[8] <- jogadorAtual

retorne "ok"

senao

retorne "ocupado"

fimSe

caso 9

se posicaoVetor[3,3] = " " entao


Página 24 de 32

posicaoVetor[3,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
Página 25 de 32

tabuleiro[6] <- jogadorAtual

retorne "ok"

senao

retorne "ocupado"

fimSe

caso 1

se posicaoVetor[1,1] = " " entao

posicaoVetor[1,1] <-
tipoDeCaractere

tabuleiro[1] <- jogadorAtual

retorne "ok"

senao

retorne "ocupado"

fimSe

caso 2

se posicaoVetor[1,2] = " " entao

posicaoVetor[1,2] <-
tipoDeCaractere

tabuleiro[2] <- jogadorAtual

retorne "ok"

senao

retorne "ocupado"

fimSe

caso 3

se posicaoVetor[1,3] = " " entao

posicaoVetor[1,3] <-
tipoDeCaractere

tabuleiro[3] <- jogadorAtual


Página 26 de 32

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")
Página 27 de 32

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 adversario(X): ")

leia(jogadorX)

escreva("Digite o nome do segundo adversario (O): ")

leia(jogadorO)

fimSe

se opcao = 3 entao

fimalgoritmo

fimSe

//limpa a tela do jogo


Página 28 de 32

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
Página 29 de 32

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
Página 30 de 32

jogadorAtual <- -1

fimSe

resultado <- ""

ganhador <- ""

fimSe

limpatela

VerificaGanhador()

se alguemGanhou = verdadeiro entao

Parabens()

fimSe

fimenquanto

fimalgoritmo

Representando o tabuleiro
Primeiro, devemos descobrir como representar o tabuleiro como uma variável. No
papel, cruzamos duas linhas horizontais com duas verticais e preenchemos os espaços
em branco, com cada símbolo representando cada jogador.

No programa, vamos representá-lo como uma lista de letras. Cada letra representará
uma das nove posições do tabuleiro. Iremos numerá-las da mesma forma que um
teclado numérico, para que seja fácil lembrarmos cada posição. Veja a figura 2

Os símbolos que representarão os jogadores serão as letras ’X’ e ’O’ e uma letra de
espaço ’ ’ representará as casas em que não foi feita uma jogada ainda.

Raciocínio do jogo

Para o computador responder ao jogo, devemos identificar os locais em que as jogadas


serão feitas. Para tal, identificamos o tabuleiro de acordo com o esquema da figura 3.

O raciocínio do jogo (IA) segue um algoritmo simples. Um algoritmo é uma série de


instruções que executam algo. Logo, tudo o que fizemos até agora, baseou-se em
algoritmos. No caso deste jogo da velha, o algoritmo determinará os passos que definem
a melhor jogada.
Página 31 de 32

Este algoritmo possui os seguintes passos:

1. Primeiro, verificar se o próximo movimento do computador pode ganhar o jogo. Em


caso afirmativo, executar este movimento. Do contrário, seguir próximo passo.

2. Verifica se há algum movimento do jogador que possa fazê-lo ganhar o jogo. Se


houver, o computador bloqueia o jogador. Do contrário, seguir próximo passo.

3. Verifica se há espaços livres nos cantos (posições 1, 3, 7, ou 9) e ocupa um deles.


Caso não haja, seguir próximo passo.

4. Verifica se o centro está livre. Se estiver, a jogada vai para esta posição. Caso
contrário, seguir próximo passo.

5. A jogada irá para qualquer outra posição dos lados (2, 4, 6 ou 8). Não há mais passos,
pois, ao chegar nesta alternativa, o computador já verificou se poderia ocupar qualquer
outra posição disponível no tabuleiro.

Como o programa funciona


A partir de agora, as explicações dos códigos tornar-se-ão mais sucintas. Até este ponto,
você já deve ter desenvolvido a habilidade de observar e compreender o que está
acontecendo no programa, através da análise do código. Não repetiremos mais tantas
linhas de código ou mostraremos exemplos extensos, pois supomos que a sua
capacidade de investigação também tenha se desenvolvido. Desta forma, a explicação se
extenderá através dos pontos principais do programa.

Imprimindo o tabuleiro na tela


A função escreval imprime o tabuleiro na tela. Lembre-se que o nosso tabuleiro é
representado por uma lista de dez letras e que ignoramos as letras com o índice 0, para
que utilizemos os índices das letras de acordo com a posição do tabuleiro,.

Tenha certeza de que os espaços do tabuleiro estejam dispostos corretamente, ou a


ilustração não sairá adequada. Programas de computador apenas fazem exatamente o
que você os manda fazer, mesmo que esteja errado. Por isso, preste atenção em cada
passo do programa.

Finalizando o jogo
No fim do bloco que caracteriza a execução do jogo, há um se para o jogador escolher
jogar novamente. Esta escolha é permitida pela função jogar novamentee, se o jogador
desejar, que inicia o jogo continua executando. Senão, é interrompido e o programa
termina.
Página 32 de 32

Conclusão

Aprendemos agora a criar um jogo do galo, em que o jogador enfrentará uma


inteligência artificial simples. Inteligência artificial (IA) e um outro jogador. é um
programa de computador que pode responder“com inteligência” para os movimentos do
jogador. Este jogo não introduz nenhum conceito muito difícil, apenas mais linhas de
código a serem analisadas.

Potrebbero piacerti anche