I have defined a struct array struct CAMPO campo[2]
in which it will be pointed to by a pointer struct CAMPO *ptr_campo
and this pointer will be pointed at the entered players in the field, here is the code defined ...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10
#define MAX_PONTOS 10
typedef struct JOGADOR JOGADOR;
typedef struct CAMPO CAMPO;
struct JOGADOR {
int num_jogador;
int pontos;
};
struct CAMPO {
struct JOGADOR jogadores[MAX];
};
/*novo jogador*/
struct JOGADOR novo_jogador;
/*apontador para novo jogador*/
struct JOGADOR *ptr_jogador;
/*Array campo jogo e campo prolonagamento*/
struct CAMPO campo[2];
/*apontador para campo jogo e campo prolonagamento */
struct CAMPO *ptr_campo;
/*Prototipos das funções*/
void criar_jogador_no_campo0(void);
void definir_vencedor_ou_empate_jogo(void);
void adicionar_jogadores_empatados_campo1(int, int);
void mostrar_jogadores_no_prolongamento(void);
...
}
In this function create the player and insert in the field, that is the campo[0]
void criar_jogador_no_campo0(void) {
int i, j;
//aponta para campo de jogo
ptr_campo = &campo[0];
for (i = 0, j = 0; i < MAX; i++) {
campo[0] = *(ptr_campo);
novo_jogador.num_jogador++;
novo_jogador.pontos = 1 + rand() % MAX_PONTOS;
ptr_jogador = &novo_jogador;
campo[0].jogadores[i] = *ptr_jogador;
*(ptr_campo) = campo[0];
printf(">> Criar jogador %d com pontos %d no campo[0]...\n",
ptr_campo->jogadores[i].num_jogador,
ptr_campo->jogadores[i].pontos);
j++;
}
if (j == MAX) {
definir_vencedor_ou_empate_jogo();
}
}
In this function set the winning player with the highest number of points or in the case of a tie they will go to the prologging field, ie campo[1]
void definir_vencedor_ou_empate_jogo(void) {
int j, k, m, t;
int contador = 0;
int max = 0;
puts("\n Determinar o jogador vencedor ou em situação de empate\n");
//para todos os jogadores
for (j = 0; j < MAX; j++) {
//se o jogador listado tiver mais pontos marcados do que max
if (ptr_campo->jogadores[j].pontos > max) {
//max = pontos do jogador
max = ptr_campo->jogadores[j].pontos;
//contador será igual a um
contador = 1;
//se tiver os mesmo pontos que max
} else if (ptr_campo->jogadores[j].pontos == max) {
//incrementa o contador
contador++;
}
}//se contador for igual a um
if (contador == 1) {
//para todos os jogadores
for (k = 0; k < MAX; k++) {
//se o jogador listado tiver mais do que max pontos
if (ptr_campo->jogadores[k].pontos == max) {
//o jogador iterado é o vencedor
printf(">> Jogador %d é o VENCEDOR com %d pontos(s)\n",
ptr_campo->jogadores[k].num_jogador,
ptr_campo->jogadores[k].pontos);
}
}//caso contrário (contador diferente de um)
} else {
//iterar todos os jogadores
for (m = 0; m < MAX; m++) {
//se os pontos do jogador listado for igual a max
if (ptr_campo->jogadores[m].pontos == max) {
//o jogador iterado faz parte do prolongamento
printf(">> Jogador %d com %d pontos(s) e vai para campo[1]\n",
ptr_campo->jogadores[m].num_jogador,
ptr_campo->jogadores[m].pontos);
}
}
puts("\n\t\t--- Lista de Jogadores para campo[1] ---");
//iterar todos os jogadores
for (t = 0; t < MAX; t++) {
//se os pontos do jogador listado for igual a max
if (ptr_campo->jogadores[t].pontos == max) {
//o jogador iterado faz parte
//da lista de jogadores para prolongamento
adicionar_jogadores_empatados_campo1
(ptr_campo->jogadores[t].num_jogador, contador);
}
}
}
}
My doubt starts in this function in adding only the players tied in campo[0]
to campo[1]
, in order to get the winner, type after draw will go to the prolongation, but I do not know if it will be necessary, add them to the new array field or I'm not sure what to ask ....
void adicionar_jogadores_empatados_campo1(int num_jogador, int quant_jogador) {
int j = 0;
//aponta para campo de prolongamento
//*(ptr_campo + 1) = &campo[1]; //-> dá erro
for (int i = 0; i < MAX; i++) {
if (num_jogador == ptr_campo->jogadores[i].num_jogador) {
campo[1] = *(ptr_campo + i);
campo[1].jogadores[i] = ptr_campo->jogadores[i];
*(ptr_campo + i) = campo[1];
printf("\t\t\t Jogador %d com %d pontos(s) adicionado no campo[1]\n",
(ptr_campo + i)->jogadores[i].num_jogador,
(ptr_campo + i)->jogadores[i].pontos);
j++;
}
}
if (j == quant_jogador) {
//mostra os jogadores no prolongamento
mostrar_jogadores_no_prolongamento();
}
}
In this function will show the players added in campo[1]
void mostrar_jogadores_no_prolongamento(void) {
printf("\n\n--- Ponteiro para Campo 1 ---");
for (int i = 0; i < MAX; i++) {
//mostra os valores do novo ponteiro
printf("\nAponta para ->Jogador %d com pontos %d no campo[1]",
(ptr_campo + i)->jogadores[i].num_jogador,
(ptr_campo + i)->jogadores[i].pontos);
}
}
function main
int main(void) {
criar_jogador_no_campo0();
return 0;
}
Each time I test the program, it shows only this data below, never give a tie despite testing several times
Thisquestionissimilartotheonethatwasresolvedyesterday view link
only yesterday post was used an array of integers and in that doubt is used a struct array
to store players in different situations
See running on ideone .