Jump to content
Fórum Script Brasil
  • 0

aceder a lista de jogadores selecionados para prolongamento


zion33
 Share

Question

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?

 

Edited by zion33
tive que reescrever o codigo
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...