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

aceder a lista de jogadores selecionados para prolongamento


zion33

Pergunta

E aí pessoal beleza,

eu estou desenvolvendo um programa em C que simula uma partida de futebol para  7 jogadores e já consegui terminar o jogo e no caso de haver um vencedor, o programa faz tudo bem mas o problema está em caso de empate entre 4 jogadores jogadores por exemplo:

desenvolvi uma função que serve para listar os 7 jogadores por números de golo e

/*Função para listar quantidade de remates entre jogadores*/
void listar_jogador_num_golos_jogo(void) {

    int s;

    puts("\n\t\t--- Estatisticas de Golos dos Jogadores no Jogo ---");
    //para todos os jogadores
    for (s = 0; s < qt_jogador_jogo; s++) {
        printf("\t\t\t Jogador %d: %d golo(s)\n", ptr_campo_jogo->jogadores[s].num_jogador,
                ptr_campo_jogo->jogadores[s].estatistica.qt_golos_marcados);
    }
    sleep(1);
    //determina o vencedor ou prolongamento em caso de empate
    definir_vencedor_ou_empate_jogo();
}

 

faz exactamente o que pretendido pelo enunciado, tal como mostra a figura

2.thumb.jpg.6305aea4b8260bb735a18eb876ec

e desenvolvi uma outra função que determina o jogador vencedor ou em caso de empate, o jogador seleccionado irá fazer parte do prolongamento

/*Função que determina o vencedor ou prologamento em caso de empate*/
void definir_vencedor_ou_empate_jogo(void) {

    int j, k, m, t;
    contador_jogadores_jogo = 0;
    max_golo_jogo = 0;

    puts("\n Determinar o jogador vencedor ou em caso empate, irá ao prolongamento...\n");
    sleep(1);
    //para todos os jogadores
    for (j = 0; j < qt_jogador_jogo; j++) {
        //se o jogador listado tiver mais golos marcados do que max
        if (ptr_campo_jogo->jogadores[j].estatistica.qt_golos_marcados > max_golo_jogo) {
            //max = golos do jogador
            max_golo_jogo = ptr_campo_jogo->jogadores[j].estatistica.qt_golos_marcados;
            //contador será igual a um
            contador_jogadores_jogo = 1;
            //se tiver os mesmo golos que max
        } else if (ptr_campo_jogo->jogadores[j].estatistica.qt_golos_marcados == max_golo_jogo) {
            //incrementa o contador
            contador_jogadores_jogo++;
        }
    }//se contador for igual a um
    if (contador_jogadores_jogo == 1) {
        //para todos os jogadores
        for (k = 0; k < qt_jogador_jogo; k++) {
            //se o jogador listado tiver mais do que max golos
            if (ptr_campo_jogo->jogadores[k].estatistica.qt_golos_marcados == max_golo_jogo) {
                //o jogador iterado é o vencedor
                printf(">> Jogador %d é o VENCEDOR marcando %d golo(s)...\n\n",
                        ptr_campo_jogo->jogadores[k].num_jogador,
                        ptr_campo_jogo->jogadores[k].estatistica.qt_golos_marcados);
                sleep(1);
            }
        }//caso contrário (contador diferente de um)
    } else {
        //iterar todos os jogadores
        for (m = 0; m < qt_jogador_jogo; m++) {
            //se os golos do jogador listado for igual a max
            if (ptr_campo_jogo->jogadores[m].estatistica.qt_golos_marcados == max_golo_jogo) {
                //o jogador iterado faz parte do prolongamento
                printf(">> Jogador %d marcou %d golo(s) e vai para PROLONGAMENTO...\n", ptr_campo_jogo->jogadores[m].num_jogador,
                        ptr_campo_jogo->jogadores[m].estatistica.qt_golos_marcados);
                sleep(1);
            }
        }
        puts("\n\t\t--- Lista de Jogadores para Prolongamento em situação de empate ---");
        //iterar todos os jogadores
        for (t = 0; t < qt_jogador_jogo; t++) {
            //se os golos do jogador listado for igual a max
            if (ptr_campo_jogo->jogadores[t].estatistica.qt_golos_marcados == max_golo_jogo) {
                //o jogador iterado faz parte da lista de jogadores para prolongamento
                listar_jogadores_para_prolongamento(ptr_campo_jogo->jogadores[t].num_jogador, contador_jogadores_jogo);
            }
        }
    }
}

e  até aqui tudo bem, e o programa mostra o resultado pretendido, tal como mostra na figura em baixo

3.thumb.jpg.6e81027c8bcb6aa4027d831165a7

e o problema começa aqui em usar apenas esses jogadores seleccionados? para iniciar o prolongamento...

/*Função*/
void iniciar_prolongamento(void) {

    int j;
    srand(time(NULL));

    int recebe_bola = 1 + rand() % qt_jogador_jogo;

    for (j = 0; j < qt_jogador_jogo; j++) {
        if ((recebe_bola == ptr_campo_jogo->jogadores[j].estatistica.qt_golos_marcados)
                &&(ptr_campo_jogo->jogadores[j].estatistica.qt_golos_marcados == max_golo_jogo)) {
            printf("\nMostra o jogador %d...\n", recebe_bola);

        }
        sleep(1);
    }
}

quando compilo, mostra todos os jogadores, e já pensei em guardar essa lista de jogadores para prolongamento em um apontador externo e também pensei em usar um vetor campo com 3 dimensoes guardar jogadores, para jogo, prolongamento e penalti

struct CAMPO campos[3]; /*campo de jogo, prolongamento e penalti*/
struct CAMPO *ptr_campo_jogo; /*apontador para  campo*/

alguma sugestão?

 

Editado por zion33
tive que reescrever o codigo
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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...