Ir para conteúdo
Fórum Script Brasil
  • 0

Julia Emily

Pergunta

Olá galera, eu gostaria de saber se alguém conseguiria me ajudar na implementação dos prototypes do exercício abaixo, porque eu não domino muito arquivo e alocação dinâmica, sendo que o programa jogo da velha funciona da seguinte forma:

  • O Jogador1 inicia a primeira jogada escolhendo dentro de uma matriz 3x3 uma posição, por exemplo velha.matriz[2][2] = 1;.
  • O Jogador2 valida se o Jogador1 ganhou, caso tenha ganhado o mesmo retorna o valor diferente de 0 (zero), senão realiza a sua jogada diferente da jogada do Jogador1. Exemplovelha.matriz[0][0] = 2;
  • A cada rodada, os jogadores deverão ler e escrever em um arquivo a matriz do jogo da velha.
  • Ao final quem conseguir marcar primeiro um linha adjacente é o vencedor da rodada.
  • O jogo será em formato de melhor de três rodadas (desconsiderando velha [empate]).
  • Caso ocorram 5 (cinco) velhas consecutivas, o vencedor será o que estiver com maior quantidade de rodadas ganhas, caso o número de rodadas ganhas seja igual, será sorteado um dos dois jogadores para iniciar a primeira jogada manualmente, sendo que a jogada deverá ser diferente das jogadas iniciais que causaram as “velhas”, e o vencedor desta, será o ganhador da atual batalha.

 

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

struct tJogada {
        int coluna;
        int linha;
        int quem;
};

typedef struct tJogada Jogada;

struct tVelha {
        int matriz[3][3];
};

typedef struct tVelha Velha;

/* Voce dever implementar apenas um conjuntos de funcoes */
void       imprimir34033 (int jogada, Velha * velha);
Velha *    lerVelha34033 (char *  nomeArquivo);
void    criarJogada34033 (int quem, char * nomeArquivo, Jogada * jogada);
int    validaJogada34033 (char * nomeArquivo, Jogada * jogada);
void    salvarVelha34033 (Velha *velha);
/* Sera utilizado apenas para os seus testes */
void criarJogada2 (int quem, char * nomeArquivo, Jogada * jogada);
int validaJogada2 (char * nomeArquivo, Jogada * jogada);

void criarJogada1 (int quem, char * nomeArquivo, Jogada * jogada) {
        criarJogada34033(quem, nomeArquivo, jogada);
}

int validaJogada1 (char * nomeArquivo, Jogada * jogada) {
        return validaJogada34033(nomeArquivo, jogada);
}

void imprimirVelha (int jogada, char * nomeArquivo) {
        Velha * velha = lerVelha34033(nomeArquivo);
        imprimir34033(jogada, velha);
}

int main() {

        char * nomeArquivo = "matriz.txt";
        int jogada = 0;
        int ganhou = 0;
        int numero = 0;

        while (jogada < 4) {

                Jogada j1;
                numero = 1;
                criarJogada1(numero, nomeArquivo, &j1);
                
                /* A funcao validaJogada deve fechar o programa
                   caso uma inconsistancia seja encontrada */
                ganhou = validaJogada2(nomeArquivo, &j1);

                imprimirVelha(jogada + 1, nomeArquivo);

                if(ganhou) {
                        printf("\n GANHOU JOGADOR %i", numero);
                        break;
                }

                Jogada j2;
                numero = 2;
                criarJogada2(numero, nomeArquivo, &j2);
                
                /* A funcao validaJogada deve fechar o programa
                   caso uma inconsistancia seja encontrada */
                ganhou = validaJogada1(nomeArquivo, &j2);

                imprimirVelha(jogada + 1, nomeArquivo);

                if(ganhou) {
                        printf("\n GANHOU JOGADOR %i", numero);
                        break;
                }

                jogada++;
        }

        if(!ganhou) {
                printf("\n EMPATE!");
        }

        return 0;
}

 

 

 

Agradeço já!

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Olá, amigo. Vou passar uma maneira simplificada de como eu fiz esse jogo. Mas é importante saber bem o q está acontecendo no código para não ficar na base do copia/cola. Saiba q eu perdi muito tempo fazendo esse tipo de coisa e acabei não aprendendo nada com o tal copia/cola. Fika a dica. Experiência própria!

Segue o código:

#include "stdio.h"

typedef enum {FALSE, TRUE} bool;

int matriz[3][3];

void init_matriz();
void show_matriz();
void play_request(char simbolo);
int isFull();
int isSequence();


int main()
{
	system("title Jogo da Velha");

	int vez = 1;
	char simbolo;
	char nome1[21], nome2[21];
	char *c;

	printf("   =====================\n");
	printf("   ==| JOGO DA VELHA |==\n");
	printf("   =====================\n");

	printf("\n");

	printf("Nome do jogador 1: ");
	scanf("%s", nome1);
	
	printf("Nome do jogador 2: ");
	scanf("%s", nome2);
	
	init_matriz();

	while (TRUE)
	{
		printf("\n");

		show_matriz();

		printf("\n");

		if (vez)
		{
			printf("E a vez do jogador %s\n", nome1);
			simbolo = 'X';
			play_request(simbolo);
			vez = 0;
		}
		else
		{
			printf("E a vez do jogador %s\n", nome2);
			simbolo = 'O';
			play_request(simbolo);
			vez = 1;
		}

		
		if (isSequence())
		{
			if (vez)
			{
				printf("\n");
				show_matriz();
				printf("\n");
				printf("O jogador %s ganhou!\n\n", nome2);
				break;
			}
			else
			{
				printf("\n");
				show_matriz();
				printf("\n");
				printf("O jogador %s ganhou!\n\n", nome1);
				break;
			}
		}
		else if (isFull())
		{
			printf("\n");
			show_matriz();
			printf("\n");
			printf("O jogo terminou empatado!\n\n");
			break;
		}

	}

	printf("Fim de Jogo!\n\n");
    
	return 0;
}

void init_matriz()
{
	int i;
	int j;

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



void show_matriz()
{
	int i;

	printf("\n");

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

		if (i < 2)
		{
			printf("\n       ---|---|---\n");
		}
	}

	printf("\n\n");
}


void play_request(char simbolo)
{
	int i;
	int j;
	int jogada = 0;

	printf("\n");

	
	do {
		do
		{
			printf("Linha: ");
			scanf("%d", &i);

			if (i > 3 || i < 1)
			{
				printf("\n");
				printf("Erro: Jogada invalida!\n");
				printf("\n");
				jogada = 0;
			}
			else
			{
				jogada = 1;
			}
		} while (jogada == 0);

		do
		{
			printf("Coluna: ");
			scanf("%d", &j);

			if (j > 3 || j < 1)
			{
				printf("\n");
				printf("Erro: Jogada invalida!\n");
				printf("\n");
				jogada = 0;
			}
			else
			{
				jogada = 1;
			}
		
		} while (jogada == 0);

		if (matriz[i - 1][j - 1] != ' ')
		{
			printf("\n");
			printf("Erro: Essa jogada já foi efetuada!\n");
			printf("\n");
			continue;
		}

	} while (matriz[i - 1][j - 1] != ' ');
	
	matriz[i - 1][j - 1] = simbolo;

}

int isFull()
{
	int i;
	int j;

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

		}
	}
	return 1;
}


int isSequence()
{
	// Linhas
	if (matriz[0][0] == matriz[0][1] && matriz[0][1] == matriz[0][2] && matriz[0][0] != ' ')
	{
		return 1;
	}
	if (matriz[1][0] == matriz[1][1] && matriz[1][1] == matriz[1][2] && matriz[1][0] != ' ')
	{
		return 1;
	}
	if (matriz[2][0] == matriz[2][1] && matriz[2][1] == matriz[2][2] && matriz[2][0] != ' ')
	{
		return 1;
	}
	// Colunas
	if (matriz[0][0] == matriz[1][0] && matriz[1][0] == matriz[2][0] && matriz[0][0] != ' ')
	{
		return 1;
	}
	if (matriz[0][1] == matriz[1][1] && matriz[1][1] == matriz[2][1] && matriz[0][1] != ' ')
	{
		return 1;
	}
	if (matriz[0][2] == matriz[1][2] && matriz[1][2] == matriz[2][2] && matriz[0][2] != ' ')
	{
		return 1;
	}
	// Diagonais
	if (matriz[0][0] == matriz[1][1] && matriz[1][1] == matriz[2][2] && matriz[0][0] != ' ')
	{
		return 1;
	}
	if (matriz[2][0] == matriz[1][1] && matriz[1][1] == matriz[0][2] && matriz[2][0] != ' ')
	{
		return 1;
	}
	
	return 0;

}

 

Link para o comentário
Compartilhar em outros sites

  • 0

Tem outra coisa q não fiz nesse código q postei e q vai tornar o mesmo melhor.

Seria criar um ponteiro tipo: char *limparBuffer; e depois de cada entrada de dados colocar um outro scanf()  tipo:

scanf("%c", &limparBuffer); . Isso serve parar limpar o buffer de entrada e evitar que valores "sujos" sejam lidos ao entrar com um novo dado.

Exemplo no código:

	printf("Nome do jogador 1: ");
	scanf("%s", nome1);
	scanf("%c", &limparBuffer); // Essa linha é ignorada pelo compilador. Serve para limpar o buffer de entrada
	
	printf("Nome do jogador 2: ");
	scanf("%s", nome2);
	scanf("%c", &limparBuffer);

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...