Archive for the ‘Exercícios’ Category

Continuando com a tentativa de criar o Jogo do Galo recorrendo a linguagem de programação C consegui fazer mais alguns progressos tendo agora também uma função para as jogadas efetuadas pelo computador e a verificação de quem ganhou o jogo, ou o Humano ou o Computador.

Aqui fica o código:

/**************************************************************
Nome: Nuno Santos
Data: 06-04-2012
Projecto: Jogo do Galo_1.05
**************************************************************/

#include<stdio.h>
#include<stdlib.h>

#define DIM 3

int matriz[DIM][DIM];

void iniciar_matriz();
void coordenadas();
void coordenadas_pc();
int verifica_vencedor();
void apresenta_matriz();

int main()
{
    printf("\t\t\t\t Jogo do Galo \n\n\n");

    iniciar_matriz(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");
            break;
        }

        coordenadas_pc();

        //Verifica o vencedor após a jogada do Computador

        if (verifica_vencedor() == 1)
        {
            printf("\n\nO Vencedor é o Computador!\n\n");
            break;
        }

        apresenta_matriz();

    }while(1);

    // Apresentar a Matriz após a verificação do vencedor
    apresenta_matriz();

    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;
        }
    }
}

Sei que esta solução ainda não resolve o desafio e que pode muito bem ser melhorada, principalmente no modo em como o computador joga pois da forma que esta implementada é sempre possível ser o Humano a ganhar, pelo que estou aberto a todas as sugestões que me possam dar.

Share

Continuando com a tentativa de criar o Jogo do Galo recorrendo a linguagem de programação C consegui fazer mais alguns progressos tendo agora também uma função para as jogadas efetuadas pelo computador.

O código é o seguinte:

/**************************************************************
Nome: Nuno Santos
Data: 04-04-2012
Projecto: Jogo do Galo_1.04
**************************************************************/

#include<stadio.h>
#include<stdlib.h>

#define DIM 3

int matriz[DIM][DIM];

void iniciar_matriz();
void coordenadas();
void coordenadas_pc();
void apresenta_matriz();

int main()
{
    printf("\t\t\t\t Jogo do Galo \n\n\n");

    iniciar_matriz(matriz);

    do
    {

        coordenadas();

        coordenadas_pc();

        apresenta_matriz();

    }while(1);

    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;
            }
        }
    }
}

Sei que esta solução ainda não resolve o desafio e que pode muito bem ser melhorada, pelo que estou aberto a todas as sugestões que me possam dar.

Share

Jogo do Galo em C – Versão 1.03

Tenho continuado a explorar e a exercitar os meus pequenos conhecimentos em C tentado programar o Jogo do Galo. Tal como me foi indicado aqui: Jogo do Galo em C – Versão 1.02 pelos visitantes tentei passar todas as funcionalidades já programadas para funções, necessitando apenas de as chamar no main().

Aqui fica o código que efectuei:

/**************************************************************
Nome: Nuno Santos
Data: 04-04-2012
Projecto: Jogo do Galo_1.04
**************************************************************/

#include<stdio.h>
#include<stdlib.h>

#define DIM 3

int matriz[DIM][DIM];

void iniciar_matriz();
void coordenadas();
void apresenta_matriz();

int main()
{
    printf("\t\t\t\t Jogo do Galo \n\n\n");

    iniciar_matriz(matriz);

    coordenadas();

    apresenta_matriz();

    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");

}

Substitui o system(“PAUSE”); presente no main() por getch(); devido a estar a programar em Linux, onde o system(“PAUSE”); gera um pequeno erro ao compilar.

Sei que esta solução ainda não resolve o desafio e que pode muito bem ser melhorada, pelo que estou aberto a todas as sugestões que me possam dar.

Share

Continuo a tentar evoluir os meus conhecimentos em C tentado criar o “meu” Jogo do Galo. No post anterior, Jogo do Galo em C – Versão 1.01 o visitante Ricardo referiu que eu deveria implementar uma função para efectuar a leitura das coordenadas para evitar ter de repetir sempre esse pedaço de código.

Confesso que ainda tenho algumas dificuldades a implementar funções, nomeadamente na definição dos argumentos e dos parâmetros, e como tal para conseguir implementar este exemplo tive de recorrer a variáveis globais, coisa que não se deve usar.

No seguimento da evolução do projecto surgiu um outro problema que foi ao apresentar a jogada, as coordenadas anteriores e a consequente jogada desaparecem do tabuleiro, e não sei como poderei contornar esta situação.

Aqui fica o código:

/************************************************
Nome: Nuno Santos
Data: 02-04-2012
Projecto: Jogo do Galo_1.03
************************************************/

#include <stdio.h>
#include <stdlib.h>

#define DIM 3

int x, y;
int n_jogadas;

void posicoes()
{
    // Acção Jogador - Coordenadas

        printf("\nDigite as coordenadas do X: ");
        scanf("%d", &x);
        fflush(stdin);

        printf("\nDigite as coordenadas do Y: ");
        scanf("%d", &y);
        fflush(stdin);

        x--;
        y--;
}

int main()
{
    char Galo [DIM][DIM] = {{' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '}};
    int i, j, n;

    // Inicia a Matriz

    while(n_jogadas < DIM*DIM)
    {
        for(i = 0; i < 3; i++)
        {
            for(j = 0; j < 3; j++)
            {
                Galo[i][j] = ' ';
            }
        }

        posicoes(x, y);

        if(Galo[x][y] != ' ')
        {
            printf("\nPosicao invalida, tente novamente.\n");
        }
        else
        {
            Galo[x][y] = 'X';
        }

        // Apresenta a Matriz

        printf("\n");

        for(n = 0; n < 3; n++)
        {
            printf(" %c | %c | %c ", Galo[n][0], Galo[n][1], Galo[n][2]);

            if(n != 2)
            {
                printf("\n---|---|---\n");
            }
        }

        n_jogadas++;

        printf("\n");
    }

    system("PAUSE");
}

Se fosse possível gostaria que me fossem dadas algumas dicas de como resolver estes problemas, no entanto continuarei a pesquisar sobre o assunto.

Share

Jogo do Galo em C – Versão 1.01

Na tentativa de evoluir os meus conhecimentos na linguagem C, decidi tentar fazer o jogo do galo, tal como já referi aqui: Jogo do Galo em C .

Após numa primeira fase ter conseguido mostrar apenas o tabuleiro de jogo, consegui agora introduzir uma acção por parte de um jogador, e apresentar essa mesma jogada no tabuleiro.

Aqui fica o código que consegui:

#include <stdio.h>
#include <stdlib.h>

#define DIM 3

int main()
{
char Galo [DIM][DIM] = {{' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '}};
int i, j, n;
int posx, posy;

// Inicia a Matriz

for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
Galo[i][j] = ' ';
}
}

// Acção Jogador - Coordenadas

printf("\nDigite as coordenadas do X: ");
scanf("%d", &posx);

printf("\nDigite as coordenadas do Y: ");
scanf("%d", &posy);

posx--;
posy--;

if(Galo[posx][posy] != ' ')
{
printf("\nPosicao invalida, tente novamente.\n");
}
else
{
Galo[posx][posy] = 'X';
}

// Apresenta a Matriz

printf("\n");

for(n = 0; n < 3; n++)
{
printf(" %c | %c | %c ", Galo[n][0], Galo[n][1], Galo[n][2]);

if(n != 2)
{
printf("\n---|---|---\n");
}
}

printf("\n");

system("PAUSE");
}

Tenho a completa noção de que este é ainda um pequeno passo para a execução da totalidade do Jogo do Galo, e que possivelmente a forma como o implementei não é a mais indicada.
Caso tenham algum reparo a fazer ao código que criei ou uma qualquer dica, agradeço pois todas as criticas e dicas são úteis.

Share