Jogo do Galo em C – Versão 1.07
Posted by admin on 11 de Abril de 2012 | Filed under Exercícios, Línguagens de Programação, Programação
Continuando com a evolução do meu projecto de execução do jogo do galo em C implementei uma nova funcionalidade que não é mais que as estatísticas do jogo. Neste momento as estatísticas apenas ficam guardadas em memória pelo que o só são válidas enquanto o programa não for terminado, mas futramente irei guardar essa informação num ficheiro que posteriormente será lido e actualizado.
O código que criei até agora é o seguinte:
/**************************************************************
Nome: Nuno Santos
Data: 06-04-2012
Projecto: Jogo do Galo_1.07
**************************************************************/
#include<stdio.h>
#include<stdlib.h>
#define DIM 3
int matriz[DIM][DIM];
int contapc = 0, contahumano = 0;
void iniciar_matriz();
void coordenadas();
void coordenadas_pc();
int verifica_vencedor();
void apresenta_matriz();
void apresenta_estatisticas(int contahumano, int contapc);
int main()
{
printf("\t\t\t\t Jogo do Galo \n\n\n");
int escolha = 0;
do
{
printf("\t\t\t\t*MENU*\n\n\n");
printf("1 - Jogar Jogo do Galo:\n");
printf("2 - Consultar Estatísticas de Jogo:\n");
printf("3 - SAIR\n");
printf("Opção: ");
scanf("%d", &escolha);
switch(escolha)
{
case 1:
{
iniciar_matriz(matriz);
apresenta_matriz();
do
{
coordenadas();
//Verifica o vencedor após a Jogada do Humano
if (verifica_vencedor() == 1)
{
printf("\n\nO Vencedor é o Jogador Humano!\n\n");
contahumano = contahumano + 1;
break;
}
coordenadas_pc();
//Verifica o vencedor após a jogada do Computador
if (verifica_vencedor() == 1)
{
printf("\n\nO Vencedor é o Computador!\n\n");
contapc = contapc + 1;
break;
}
apresenta_matriz();
}while(1);
// Apresentar a Matriz após a verificação do vencedor
apresenta_matriz();
break;
}
case 2:
{
printf("\t\t\t*Estatisticas do Jogo*\n\n\n");
apresenta_estatisticas(contahumano, contapc);
break;
}
case 3:
{
printf("Deseja Sair!");
exit(0);
}
default:
{
printf("Opção Inválida");
return main;
}
}
}
while(escolha != 3);
getchar();
}
// Função que Incializa a matriz
void iniciar_matriz()
{
int i, j;
for(i = 0; i < DIM; i++)
{
for (j = 0; j < DIM; j++)
{
matriz[i][j] = ' ';
}
}
}
//Função para a coodenadas
void coordenadas()
{
int x, y;
printf("Insira a coordenada X: ");
scanf("%d", &x);
fflush(stdin);
printf("\n\nInsira a coordenada Y: ");
scanf("%d", &y);
fflush(stdin);
x--;
y--;
if (matriz[x][y] != ' ')
{
printf("\n Posição Ocupada! \n");
coordenadas();
}
else
{
matriz[x][y] = 'X';
}
}
//Função para apresentar a matriz
void apresenta_matriz()
{
int i;
printf("\n");
for (i = 0; i < DIM; i++)
{
printf(" %c | %c | %c ", matriz[i][0], matriz[i][1], matriz[i][2]);
if ( i != 2)
{
printf("\n");
printf("---|---|---");
printf("\n");
}
}
printf("\n");
}
// Função para A Jogada do Computador
void coordenadas_pc()
{
int i, j;
for (i = 0; i < DIM; i++)
{
for(j = 0; j < DIM; j++)
{
if (matriz[i][j] == ' ')
{
matriz[i][j] = 'O';
return;
}
}
}
}
//Função para verificar o Vencedor do jogo
int verifica_vencedor()
{
int i;
// Verificar Linhas e retorna o valor 1 caso seja verdadeiro
for (i = 0; i < DIM; i++)
{
if (matriz[i][0] != ' ' && matriz[i][1] != ' ' && matriz[i][2] != ' ')
{
if(matriz[i][0] == matriz[i][1] && matriz[i][0] == matriz[i][2])
{
return 1;
}
}
}
// Verificar Linhas e retorna o valor 1 caso seja verdadeiro
for (i = 0; i < DIM; i++)
{
if (matriz[0][i] != ' ' && matriz[1][i] != ' ' && matriz[2][i] != ' ')
{
if (matriz[0][i] == matriz[1][i] && matriz[0][i] == matriz[2][i])
{
return 1;
}
}
}
// Verificar as diagonais e retornar o valor 1 caso seja verdadeiro
if(matriz[0][0] != ' ' && matriz[1][1] != ' ' && matriz[2][2] != ' ')
{
if (matriz[0][0] == matriz[1][1] && matriz[0][0] == matriz[2][2])
{
return 1;
}
}
if(matriz[0][2] != ' ' && matriz[1][1] != ' ' && matriz[2][0] != ' ')
{
if(matriz[0][2] == matriz[1][1] && matriz[0][2] == matriz[2][0])
{
return 1;
}
}
}
//Função para calculo das estatísticas e apresentação
void apresenta_estatisticas(int contahumano, int contapc)
{
printf("Numero de jogos Ganhos pelo Humano: %d\n\n", contahumano);
printf("Numero de Jogos Ganhos Pelo Computador: %d\n\n", contapc);
}
Sei que esta solução ainda não resolve o desafio e que pode muito bem ser melhorada, principalmente no método da inteligência artificial do modo como o computador joga e sobre como é guardada a informação das estatísticas do jogo, pelo que estou aberto a todas as sugestões que me possam dar.
Share



Abril 11th, 2012 at 12:28 pm
Viva,
O “while(1)” q usas para q sejam feitas as jogadas é das piores coisas que podes fazer. É muito má prática usar algo deste tipo, pois estás a dizer para algo estar sempre a correr. O que deves fazer é arranjar uma variável que muda o seu valor, podes por exemplo criar uma variável à qual é mudada o valor quando detecta um vencedor, ou quando o jogo fica empatado, e q serve de condição de término.
Outro ponto é que podes deixar de lado as variáveis globais. Em vez de as declarares como globais, declara-as dentro do main(), e depois é só enviá-las para as funções. Não te esqueças é de mudar tb o cabeçalho das funções.
Junho 18th, 2012 at 11:51 pm
Boa noite. Gostaria de saber se poderias-me ajudar com o teu verificar vencedor. é que eu não estou a perceber muito bem o que cada if faz! Será que podes-me ajudar?
obrigado
Junho 18th, 2012 at 11:59 pm
Olá
Bem na função verifica_vencedor(), cada if está a verificar o estado da posição [i][0], até [i][3] ou seja todas as posições existentes quer seja nas linhas, colunas ou mesmo diagonais.
Os if verificam o estado ou seja, verificam se tem lá ‘x’ ou ‘o’ ou está vazio ‘ ‘ e mediante isso retornam um valor para que se possa saber quem foi o vencedor.
Cumps
Junho 19th, 2012 at 1:03 am
ok obrigado.
É que o teu trabalho foi uma grande ajuda para mim!
Cumps
Junho 19th, 2012 at 2:14 pm
É um prazer poder ajudar quem tal como eu está a começar e a aprender a programar.
Cumprimentos