#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);
//nesta função cria os jogadores e adiciona ao ponteiro_campo,
//e está função funciona na perfeição
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();
}
}
//nesta função cria a bola e adiciona ao ponteiro_campo,
//e está função também funciona na perfeição
void criar_bola(void) {
int k, m; //identificador para incrementar criação de bola
/*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();
}
}
//A minha dúvida é nesta função jogador recebe bola,
//a função funciona quando o numero de bola for 1 e/ou 2 bolas
//e se no caso for 3 bolas, como mostra na imagem abaixo o codigo,
//em vez de dizer que o jogador tem bola nº3, diz que tem bola nº4 e
//funciona só que quando o jogador que tem bola nº3, diz que tem bola nº0
void jogador_recebe_bola(void) {
int recebe_bola = 0;
int j, m, p;
printf("\n--- JOGADOR RECEBE BOLA---\n");
//faz um loop
for (m = 0, p = 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);
}
}
}
}
}
//função main
int main(void) {
//criar jogador
criar_jogador();
return 0;
}