I'm struggling and I do not know how to explain, excuse me for the title of the doubt, here's the code defined ...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_JOGADOR 7//numero maximo de jogadores
#define MAX_BOLA_JOGADOR 2//numero maximo de bolas para cada jogador
#define MAX_BOLA 5//numero maximo de bolas para jogo
typedef struct BOLA BOLA;
typedef struct JOGADOR JOGADOR;
typedef struct CAMPO CAMPO;
struct BOLA {//cada bola
int num_bola; //contem um numero de bola
};
struct JOGADOR {//cada jogador
int num_jogador; //contem um numero de jogador
struct BOLA bola[MAX_BOLA_JOGADOR]; //entre uma a duas bolas
int qt_bola_jogador; //quantidade bola
};
struct CAMPO {
struct JOGADOR jogadores[MAX_JOGADOR]; //contem no maximo 7 jogadores
struct BOLA bolas[MAX_BOLA]; //possui no maximo 5 bolas para cada jogo
};
struct JOGADOR novo_jogador; /*novo jogador*/
struct BOLA nova_bola; /*nova bola*/
struct BOLA *ptr_bola; /*apontador para nova bola*/
struct JOGADOR *ptr_jogador; /*apontador para novo jogador*/
struct CAMPO *ptr_campo; /*apontador para campo*/
void jogador_recebe_bola(void);
void criar_bola(void);
void criar_jogador(void);
In this function creates the players and adds to the pointer_field, and this function works perfectly
void criar_jogador(void) {
int i, j; //identificador para incrementar criação de jogador
//alocaçao de memoria para simular jogo
ptr_campo = (CAMPO *) malloc(sizeof (ptr_campo));
printf("\n--- JOGADOR ---\n");
/* criar jogador*/
for (i = 0, j = 0; i < MAX_JOGADOR; i++) {
novo_jogador.num_jogador++; //incrementa o numero de jogador
novo_jogador.qt_bola_jogador = 0;
ptr_jogador = &novo_jogador;
ptr_campo->jogadores[i] = *ptr_jogador; //adicionar o jogador no campo
printf(">> Criando jogador %d...\n\n", ptr_campo->jogadores[i].num_jogador);
j++;
}
if (j == MAX_JOGADOR) {
//criar bola
criar_bola();
}
}
In this function, you create the ball and add it to the pointer_field, and this function also works correctly
void criar_bola(void) {
int k, m; //identificador para incrementar criação de bola
printf("\n--- BOLA ---\n");
/*cria bola*/
for (k = 0, m = 0; k < MAX_BOLA; k++) {
nova_bola.num_bola++; //incrementa o numero da bola
ptr_bola = &nova_bola;
ptr_campo->bolas[k] = *ptr_bola; //atribuir a baliza para cada jogador
printf(">> Criar bola %d...\n\n", ptr_campo->bolas[k].num_bola);
m++;
}
if (m == MAX_BOLA) {
//criar bola
jogador_recebe_bola();
}
}
My question is, in this function player receives ball, the function works when the number of balls is 1 and / or 2 balls, and if in case it is 3 balls, as shown in the image below, the code, instead of say that the player has ball # 3, says he has ball # 4 and when it is selected does nothing ...
void jogador_recebe_bola(void) {
int recebe_bola = 0;
int j, m;
srand(time(NULL));
printf("\n--- JOGADOR RECEBE BOLA---\n");
//faz um loop
for (m = 0; m < MAX_BOLA; m++) {
//captura a bola
if (m + 1 == ptr_campo->bolas[m].num_bola) {
//escolhe um jogador aleatorio
recebe_bola = 1 + rand() % MAX_JOGADOR;
////faz um loop
for (j = 0; j < MAX_JOGADOR; j++) {
//captura o jogador a receber bola
if ((j + 1 == ptr_campo->jogadores[j].num_jogador)
//jogador escolhido igual ao que está no campo
&& (recebe_bola == ptr_campo->jogadores[j].num_jogador)) {
//escolhe o jogador x
printf(">> Jogador %d foi escolhido para receber bola %d...\n",
ptr_campo->jogadores[j].num_jogador, m + 1);
//recebe a bola do campo
ptr_campo->jogadores[j].bola[m] = ptr_campo->bolas[m];
//incrementa a quantidade de bola
ptr_campo->jogadores[j].qt_bola_jogador++;
//a bola nº y foi para jogador x
printf("\t>> Bola %d foi para jogador %d...\n",
ptr_campo->bolas[m].num_bola,
ptr_campo->jogadores[j].num_jogador);
//o jogador x tem bola nºy
printf(">> Jogador %d tem a bola %d...\n\n",
ptr_campo->jogadores[j].num_jogador,
ptr_campo->jogadores[j].bola[m].num_bola);
}
}
}
}
}
Review the code working on ideone