Eu tenho este código em baixo foi baseado para testar um partida de jogo, funciona sem erro semântico e por vezes contem algum erro sintáctico na qual resulta em erros de obter resultados pretendidos.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 10
#define N 5
typedef struct BOLA BOLA; // tipo de dados estruturado BOLA que irá ser declarado
typedef struct JOGADOR JOGADOR; // tipo de dados estruturado JOGADOR que irá ser declarado
typedef struct CAMPO CAMPO; // tipo de dados estruturado CAMPO que irá ser declarado
struct BOLA {//cada bola
int num_bola; // contem um numero de bola
}; // Declaração da estrutura que define a bola
struct JOGADOR {//cada jogador
int num_jogador; // contem um numero de jogador
BOLA bola[2]; // no maximo 2 bolas
}; // Declaração da estrutura que define o jogador
struct CAMPO {//O campo
JOGADOR jogadores[MAX]; // contem no maximo 10 jogadores
BOLA bolas[N]; // possui no maximo 5 bolas para cada jogo
}; // Declaração da estrutura que define o campo
JOGADOR novo_jogador; /*novo jogador*/
BOLA nova_bola; /*nova bola*/
CAMPO campo;
BOLA *ptr_bola; /*apontador para nova bola*/
JOGADOR *ptr_jogador; /*apontador para novo jogador*/
CAMPO *ptr_campo; /*apontador para campo*/
void criar_jogador(void);
void criar_bola(void);
void comecar_jogo(void);
void criar_jogador(void) {
int i; //identificador para incrementar criação de jogador
/* criar jogador*/
for (i = 0; i < MAX; i++) {
novo_jogador.num_jogador++; //incrementa o numero de jogador
campo.jogadores[i] = novo_jogador; //adicionar o jogador no campo
ptr_jogador = &campo.jogadores[i];
ptr_campo = &campo;
printf(">> Criando jogador %02d...\n\n", ptr_campo->jogadores[i].num_jogador);
}
}
void criar_bola(void) {
int k; //identificador para incrementar criação de bola
for (k = 0; k < N; k++) {
nova_bola.num_bola++; //incrementa o numero da bola
campo.bolas[k] = nova_bola; //adicionar a bola no campo
ptr_bola = &campo.bolas[k];
ptr_campo = &campo;
printf(">> Criar bola %02d...\n\n", ptr_campo->bolas[k].num_bola);
}
}
void comecar_jogo(void) {
int m, j;
int recebe_bola;
srand(time(NULL));
printf("\t\t+====================================+\n");
printf("\t\t| INICIAR JOGO |\n");
printf("\t\t+====================================+\n\n");
for (m = 0; m < N; m++) {
recebe_bola = rand() % MAX + 1;
printf("\tJogador %02d recebe bola %02d...\n", recebe_bola, m + 1);
for (j = 0; j < MAX; j++) {
if (recebe_bola == ptr_campo->jogadores[j].num_jogador) {
ptr_campo->jogadores[j].bola[m].num_bola = ptr_campo->bolas[m].num_bola;
printf("\tA bola %02d foi para jogador %02d...\n", ptr_campo->bolas[m].num_bola,
ptr_campo->jogadores[j].num_jogador);
printf("\tO jogador %02d tem a bola %02d...\n\n", ptr_campo->jogadores[j].num_jogador,
ptr_campo->jogadores[j].bola[m].num_bola);
} else {
printf("\tERRO: Jogador %02d não recebeu bola %02d...\n\n", ptr_campo->jogadores[j].num_jogador,
ptr_campo->bolas[m].num_bola);
}
}
}
}
void main(void) {
printf("\t\t+====================================+\n");
printf("\t\t| INICIAR PROGRAMA |\n");
printf("\t\t+====================================+\n\n");
//criar jogador
criar_jogador();
//criar_bola
criar_bola();
//começa o jogo
comecar_jogo();
printf("\t\t+====================================+\n");
printf("\t\t| TERMINAR PROGRAMA |\n");
printf("\t\t+====================================+\n\n");
}
testando o main, obtive esse resultado como mostra na seguinte figura
de facto, o erro ocorre na função começa jogo
for (m = 0; m < N; m++) {
recebe_bola = rand() % MAX + 1;
printf("\tJogador %02d recebe bola %02d...\n", recebe_bola, m + 1);
for (j = 0; j < MAX; j++) {
if (recebe_bola == ptr_campo->jogadores[j].num_jogador) {
ptr_campo->jogadores[j].bola[m].num_bola = ptr_campo->bolas[m].num_bola;
printf("\tA bola %02d foi para jogador %02d...\n", ptr_campo->bolas[m].num_bola,
ptr_campo->jogadores[j].num_jogador);
printf("\tO jogador %02d tem a bola %02d...\n\n", ptr_campo->jogadores[j].num_jogador,
ptr_campo->jogadores[j].bola[m].num_bola);
} else {
printf("\tERRO: Jogador %02d não recebeu bola %02d...\n\n", ptr_campo->jogadores[j].num_jogador,
ptr_campo->bolas[m].num_bola);
}
}
}
alterei para switch para fazer teste e deu certo, se no caso for criado todas as cases,
for (m = 0; m < N; m++) {
recebe_bola = rand() % MAX + 1;
printf("Jogador %02d recebe bola %02d...\n", recebe_bola, m + 1);
switch (recebe_bola) {
case 1:
//a bola recebida é a mesma que está no campo
ptr_campo->jogadores[recebe_bola].bola[m].num_bola = ptr_campo->bolas[m].num_bola;
printf("\tA bola %02d foi para jogador %02d...\n",
ptr_campo->bolas[m].num_bola,
ptr_campo->jogadores[recebe_bola].num_jogador + 1);
printf("O jogador %02d tem a bola %02d...\n\n",
ptr_campo->jogadores[recebe_bola].num_jogador + 1,
ptr_campo->jogadores[recebe_bola].bola[m].num_bola);
break;
case 2:
//a bola recebida é a mesma que está no campo
ptr_campo->jogadores[recebe_bola].bola[m].num_bola = ptr_campo->bolas[m].num_bola;
printf("\tA bola %02d foi para jogador %02d...\n",
ptr_campo->bolas[m].num_bola,
ptr_campo->jogadores[recebe_bola].num_jogador + 1);
printf("O jogador %02d tem a bola %02d...\n\n",
ptr_campo->jogadores[recebe_bola].num_jogador + 1,
ptr_campo->jogadores[recebe_bola].bola[m].num_bola);
break;
default:
printf("ERRO em jogador %02d recebe bola ...\n\n", ptr_campo->jogadores[m].num_jogador);
break;
}
}
nesse caso, funciona mas para os dois casos e agora o problema é aceder aos valores dentro da estrutura para que possa comparar e se for igual ao que foi criado, retorna verdadeira mas não está dando certo, agradeço alguma sugestão.
Pergunta
zion33
Eu tenho este código em baixo foi baseado para testar um partida de jogo, funciona sem erro semântico e por vezes contem algum erro sintáctico
na qual resulta em erros de obter resultados pretendidos.
testando o main, obtive esse resultado como mostra na seguinte figura
de facto, o erro ocorre na função começa jogo
alterei para switch para fazer teste e deu certo, se no caso for criado todas as cases,
nesse caso, funciona mas para os dois casos e agora o problema é aceder aos valores dentro da estrutura para que possa comparar e se for igual ao que foi criado, retorna verdadeira mas não está dando certo, agradeço alguma sugestão.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.