Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Burraco, gestione tornei - main.c

main.c

Caricato da:
Scarica il programma completo

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <windows.h>
  5. #include<time.h>
  6.  
  7. //definisco il tipo String
  8. typedef char String[20];
  9. //definisco il tipo coppia
  10.  
  11. typedef struct {
  12.     String nome_coppia;
  13.     int punteggio;
  14.     int punti_totali;
  15.     int scontri[4];
  16. } coppia;
  17. //definisco la funzione random che preso in input un limite genera un numero random di massimo limite
  18.  
  19. int randNum(int limite) {
  20.     return rand()%limite;
  21. }
  22.  
  23. //Setta i colori
  24. void setcolor(unsigned short color)
  25.   {
  26.   HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
  27.   SetConsoleTextAttribute(hCon,color);
  28.   }
  29.  
  30.  
  31. void printTitle(){
  32.   setcolor(42);
  33.   printf("BBBBBBBBBB   UU    UU  RRRRRRRRR    RRRRRRRRR        AAA     CCCCCCCCC OOOOOOOOO");
  34.   printf("BBBBBBBBBBB  UU    UU  RRRRRRRRRR   RRRRRRRRRR      AA AA    CCCCCCCCC OOOOOOOOO");
  35.   printf("BB      BBB  UU    UU  RR      RR   RR      RR     AA   AA   CC        OO     OO");
  36.   printf("BB      BBB  UU    UU  RR      RR   RR      RR    AA     AA  CC        OO     OO");
  37.   printf("BB      BB   UU    UU  RR      R    RR      R    AA       AA CC        OO     OO");
  38.   printf("BB      B    UU    UU  RR      R    RR      R    AA       AA CC        OO     OO");
  39.   printf("BBBBBBBBB    UU    UU  RRRRRRRRR    RRRRRRRRR    AAAAAAAAAAA CC        OO     OO");
  40.   printf("BB      B    UU    UU  RR      R    RR      R    AA       AA CC        OO     OO");
  41.   printf("BB      BB   UU    UU  RR      RR   RR      RR   AA       AA CC        OO     OO");
  42.   printf("BB      BBB  UU    UU  RR       R   RR       R   AA       AA CC        OO     OO");
  43.   printf("BB      BBB  UU    UU  RR       RR  RR       RR  AA       AA CC        OO     OO");
  44.   printf("BBBBBBBBBBB  UU    UU  RR        R  RR        R  AA       AA CCCCCCCCC OOOOOOOOO");
  45.   printf("BBBBBBBBBB   UUUUUUUU  RR        RR RR        RR AA       AA CCCCCCCCC OOOOOOOOO");
  46.   printf("--------------------------------------------------------------------------------");
  47.   printf("********************************************************************************");
  48.   printf("--------------------------------------------------------------------------------");
  49.   setcolor(44);
  50.   printf("                          GESTIONE PUNTEGGI TORNEO.                             \n\n");
  51.   setcolor(47);
  52. }
  53.  
  54. void salva(coppia* partecipanti, coppia* tabellone, int num_partecipanti, String nome_partita, int num_partita) {
  55.     FILE* scrittura;
  56.     if(!(scrittura=fopen(nome_partita,"w"))){
  57.         exit(1);
  58.     }
  59.     int i=0;
  60.     fprintf(scrittura, "%-3d", num_partecipanti);
  61.     fprintf(scrittura, "%d", num_partita);
  62.     for(i=0; i<num_partecipanti; i++){
  63.         fprintf(scrittura, "%-20s", partecipanti[i].nome_coppia);
  64.         fprintf(scrittura, "%-4d", partecipanti[i].punteggio);
  65.         fprintf(scrittura, "%-6d", partecipanti[i].punti_totali);
  66.         fprintf(scrittura, "%-3d%-3d%-3d%-3d", partecipanti[i].scontri[0], partecipanti[i].scontri[1], partecipanti[i].scontri[2], partecipanti[i].scontri[3]);
  67.     }
  68.     for(i=0; i<num_partecipanti; i++){
  69.         fprintf(scrittura, "%-20s", tabellone[i].nome_coppia);
  70.         fprintf(scrittura, "%-4d", tabellone[i].punteggio);
  71.         fprintf(scrittura, "%-6d", tabellone[i].punti_totali);
  72.         fprintf(scrittura, "%-3d%-3d%-3d%-3d", tabellone[i].scontri[0], tabellone[i].scontri[1], tabellone[i].scontri[2], tabellone[i].scontri[3]);
  73.     }
  74.     fclose(scrittura);
  75. }
  76.  
  77. void trim(String nome){
  78.     int i=0;
  79.     while(nome[i]!=' '){
  80.         nome[i]=nome[i];
  81.         break;
  82.     }
  83. }
  84.  
  85.  
  86.  
  87. //definisco la funzione equals che prese in input due String controlla se sono uguali
  88.  
  89. int equals(String stringa1, String stringa2) {
  90.     int i = 0;
  91.     while (stringa1[i] != 0) {
  92.         i++;
  93.     }
  94.     int j = 0;
  95.     while (stringa2[j] != 0) {
  96.         j++;
  97.     }
  98.     if (i == j) {
  99.         i = 0;
  100.         while (stringa1[i] == stringa2[i] && i < j) {
  101.             i++;
  102.         }
  103.         if (i == j) {
  104.             return 1;
  105.         } else {
  106.             return 0;
  107.         }
  108.     }
  109.     return 0;
  110. }
  111. //sorteggia le varie coppie per la prima partita.
  112.  
  113. void sorteggia_coppie(coppia* partecipanti, int numero_coppie, coppia* tabellone) {
  114.     int controllo[numero_coppie];
  115.     int i = 0;
  116.     for (i = 0; i < numero_coppie; i++) {
  117.         controllo[i] = 0;
  118.     }
  119.     int j = 0;
  120.     for (i = 0; i < numero_coppie; i++) {
  121.         int caso = randNum(numero_coppie);
  122.         while (controllo[caso] == 1) {
  123.             caso = randNum(numero_coppie);
  124.         }
  125.         tabellone[i] = partecipanti[caso];
  126.         controllo[caso] = 1;
  127.     }
  128. }
  129. //assegna i punteggi e i punti alle squadre
  130.  
  131. void assegna_punteggi(coppia* squadra1, coppia* squadra2, int punti_squadra1, int punti_squadra2) {
  132.     int punti_squadra_max;
  133.     int punti_squadra_min;
  134.     coppia* squadra_max;
  135.     coppia* squadra_min;
  136.     coppia max;
  137.     coppia min;
  138.     if (punti_squadra1 > punti_squadra2) {
  139.         punti_squadra_max = punti_squadra1;
  140.         squadra_max = squadra1;
  141.         punti_squadra_min = punti_squadra2;
  142.         squadra_min = squadra2;
  143.     } else {
  144.         punti_squadra_max = punti_squadra2;
  145.         squadra_max = squadra2;
  146.         punti_squadra_min = punti_squadra1;
  147.         squadra_min = squadra1;
  148.     }
  149.     max = *squadra_max;
  150.     min = *squadra_min;
  151.     if (punti_squadra_max - punti_squadra_min <= 50) {
  152.         max.punteggio = max.punteggio + 10;
  153.         min.punteggio = min.punteggio + 10;
  154.     } else if (punti_squadra_max - punti_squadra_min <= 150) {
  155.         max.punteggio = max.punteggio + 11;
  156.         min.punteggio = min.punteggio + 9;
  157.     } else if (punti_squadra_max - punti_squadra_min <= 250) {
  158.         max.punteggio = max.punteggio + 12;
  159.         min.punteggio = min.punteggio + 8;
  160.     } else if (punti_squadra_max - punti_squadra_min <= 350) {
  161.         max.punteggio = max.punteggio + 13;
  162.         min.punteggio = min.punteggio + 7;
  163.     } else if (punti_squadra_max - punti_squadra_min <= 500) {
  164.         max.punteggio = max.punteggio + 14;
  165.         min.punteggio = min.punteggio + 6;
  166.     } else if (punti_squadra_max - punti_squadra_min <= 650) {
  167.         max.punteggio = max.punteggio + 15;
  168.         min.punteggio = min.punteggio + 5;
  169.     } else if (punti_squadra_max - punti_squadra_min <= 850) {
  170.         max.punteggio = max.punteggio + 16;
  171.         min.punteggio = min.punteggio + 4;
  172.     } else if (punti_squadra_max - punti_squadra_min <= 1050) {
  173.         max.punteggio = max.punteggio + 17;
  174.         min.punteggio = min.punteggio + 3;
  175.     } else if (punti_squadra_max - punti_squadra_min <= 1250) {
  176.         max.punteggio = max.punteggio + 18;
  177.         min.punteggio = min.punteggio + 2;
  178.     } else if (punti_squadra_max - punti_squadra_min <= 1500) {
  179.         max.punteggio = max.punteggio + 19;
  180.         min.punteggio = min.punteggio + 1;
  181.     } else {
  182.         max.punteggio = max.punteggio + 20;
  183.         min.punteggio = min.punteggio + 0;
  184.     }
  185.     *squadra_max = max;
  186.     *squadra_min = min;
  187. }
  188. //ritorna l'id della coppia con nome nome_coppia
  189.  
  190. int id_coppia(coppia* partecipanti, String nome_coppia, int numero_coppie) {
  191.     int i = 0;
  192.     for (i = 0; i < numero_coppie; i++) {
  193.         if (equals(partecipanti[i].nome_coppia, nome_coppia)) {
  194.             return i;
  195.         }
  196.     }
  197.     return -1;
  198. }
  199. //richiede l'inserimento dei punteggi all'utente
  200.  
  201. void inserisci_punteggi(coppia* tabellone, int numero_coppie, coppia* partecipanti, int id) {
  202.     setcolor(46);
  203.     printf("\nELENCO DELLE SFIDE\n\n");
  204.     setcolor(47);
  205.     int i = 0;
  206.     if (id < 3) {
  207.         for (i = 0; i < numero_coppie; i = i + 2) {
  208.             int n = i + 1;
  209.             //controlla, solo le prime tre partite, che due coppie non abbiano già giocato
  210.             while (controlla_sfida(tabellone[i], id_coppia(partecipanti, tabellone[i + 1].nome_coppia, numero_coppie)) == 0) {
  211.                 coppia aux = tabellone[i + 1];
  212.                 tabellone[i + 1] = tabellone[n + 1];
  213.                 tabellone[n + 1] = aux;
  214.                 n++;
  215.             }
  216.         }
  217.     }
  218.     for (i = 0; i < numero_coppie; i = i + 2) {
  219.         printf("%s vs %s\n\n", tabellone[i].nome_coppia, tabellone[i + 1].nome_coppia);
  220.     }
  221.     setcolor(46);
  222.     printf("INSERIMENTO PUNTEGGI SFIDE\n\n");
  223.     setcolor(47);
  224.     for (i = 0; i < numero_coppie; i = i + 2) {
  225.         int punti_squadra1;
  226.         int punti_squadra2;
  227.         printf("Inserimento punteggi della sfida %s vs %s", tabellone[i].nome_coppia, tabellone[i + 1].nome_coppia);
  228.         printf("\n\nInserire punteggio della squadra %s: ", tabellone[i].nome_coppia);
  229.         tabellone[i].scontri[id] = id_coppia(partecipanti, tabellone[i + 1].nome_coppia, numero_coppie);
  230.         tabellone[i + 1].scontri[id] = id_coppia(partecipanti, tabellone[i].nome_coppia, numero_coppie);
  231.         scanf("%d", &punti_squadra1);
  232.         tabellone[i].punti_totali = tabellone[i].punti_totali + punti_squadra1;
  233.         printf("\n\nInserire punteggio della squadra %s: ", tabellone[i + 1].nome_coppia);
  234.         scanf("%d", &punti_squadra2);
  235.         tabellone[i + 1].punti_totali = tabellone[i + 1].punti_totali + punti_squadra1;
  236.         assegna_punteggi(&tabellone[i], &tabellone[i + 1], punti_squadra1, punti_squadra2);
  237.         printf("\n---\n");
  238.     }
  239. }
  240. //ritorna 0 se la coppia ha già sfidato l'id e 1 se non lo ha fatto
  241.  
  242. int controlla_sfida(coppia partecipanti, int id) {
  243.     int i = 0;
  244.     for (i = 0; i < 4; i++) {
  245.         if (partecipanti.scontri[i] == id) {
  246.             return 0;
  247.         }
  248.     }
  249.     return 1;
  250. }
  251. //stampa la classifica e riorganizza il tabellone
  252.  
  253. void stampa_classifica(coppia* tabellone, int numero_coppie) {
  254.     int i = 0;
  255.     int j = 0;
  256.     for (i = 0; i < numero_coppie; i++) {
  257.         for (j = 0; j < numero_coppie; j++) {
  258.             if (tabellone[i].punteggio > tabellone[j].punteggio) {
  259.                 coppia aux = tabellone[j];
  260.                 tabellone[j] = tabellone[i];
  261.                 tabellone[i] = aux;
  262.             }
  263.         }
  264.     }
  265.     for (i = 0; i < numero_coppie; i++) {
  266.         for (j = 0; j < numero_coppie; j++) {
  267.             if (tabellone[i].punteggio == tabellone[j].punteggio) {
  268.                 if (tabellone[i].punti_totali > tabellone[j].punti_totali) {
  269.                     coppia aux = tabellone[j];
  270.                     tabellone[j] = tabellone[i];
  271.                     tabellone[i] = aux;
  272.                 }
  273.             }
  274.         }
  275.     }
  276.     system("cls");
  277.     printTitle();
  278.     setcolor(46);
  279.     printf("CLASSIFICA\n\n");
  280.     setcolor(47);
  281.     for (i = 0; i < numero_coppie; i++) {
  282.         printf("%s - %d\n", tabellone[i].nome_coppia, tabellone[i].punteggio);
  283.     }
  284. }
  285.  
  286. void carica(String nome_partita){
  287.     FILE* lettura;
  288.     if(!(lettura=fopen(nome_partita,"r"))){
  289.     exit(1);                                    
  290.     }
  291.     String nome;
  292.     int numero_coppie;
  293.     fscanf(lettura,"%3d", &numero_coppie);
  294.     int num_partita;
  295.     fscanf(lettura, "%d", &num_partita);
  296.     coppia tabellone[numero_coppie];
  297.     coppia partecipanti[numero_coppie];
  298.     int i=0;
  299.     for(i=0; i<numero_coppie; i++){
  300.     fscanf(lettura,"%20s", &partecipanti[i].nome_coppia);
  301.     trim(nome);
  302.     int punteggio;
  303.     fscanf(lettura,"%4d",&punteggio);
  304.     int punti_totali;
  305.     fscanf(lettura,"%6d",&punti_totali);
  306.     int scontri[4];
  307.     fscanf(lettura,"%3d%3d%3d%3d",&scontri[0],&scontri[1],&scontri[2],&scontri[3]);
  308.     partecipanti[i].punteggio=punteggio;
  309.     partecipanti[i].punti_totali=punti_totali;
  310.     int j=0;
  311.     for(j=0; j<4; j++){
  312.         partecipanti[i].scontri[j]=scontri[j];    
  313.     }
  314.     }
  315.     for(i=0; i<numero_coppie; i++){
  316.     fscanf(lettura,"%20s", &tabellone[i].nome_coppia);
  317.     trim(nome);
  318.     int punteggio;
  319.     fscanf(lettura,"%4d",&punteggio);
  320.     int punti_totali;
  321.     fscanf(lettura,"%6d",&punti_totali);
  322.     int scontri[4];
  323.     fscanf(lettura,"%3d%3d%3d%3d",&scontri[0],&scontri[1],&scontri[2],&scontri[3]);
  324.     tabellone[i].punteggio=punteggio;
  325.     tabellone[i].punti_totali=punti_totali;
  326.     int j=0;
  327.     for(j=0; j<4; j++){
  328.         tabellone[i].scontri[j]=scontri[j];    
  329.     }
  330.     }
  331.     for (i = num_partita; i < 3; i++) {
  332.         inserisci_punteggi(tabellone, numero_coppie, partecipanti, (i + 1));
  333.         stampa_classifica(tabellone, numero_coppie);
  334.         salva(partecipanti,tabellone, numero_coppie, nome_partita, (i+1));        
  335.     }
  336. }
  337.  
  338. int main(int argc, char *argv[]) {
  339.     system("color 2f");
  340.     system("title Burraco, gestione punteggi torneo!");
  341.     srand(time(NULL));
  342.     int numero_coppie;
  343.     int i = 0;
  344.     char caricare;
  345.     printTitle();
  346.     printf("Vuoi caricare un torneo salvato? s/n: ");
  347.     scanf("%s", &caricare);
  348.     system("cls");
  349.     printTitle();
  350.     if(caricare=='n'){
  351.     String nome_partita;
  352.     printf("Inserire il nome della partita (per il salvataggio): ");
  353.     scanf("%s", nome_partita);
  354.     system("cls");
  355.     printTitle();
  356.     printf("Inserire numero di coppie partecipanti (multiplo di 4): ");
  357.     scanf("%d", &numero_coppie);
  358.     while (numero_coppie % 4 != 0) {
  359.         system("cls");
  360.         printTitle();
  361.         printf("ERROR: il numero inserito deve essere muliplo di 4\n");
  362.         printf("\nInserire numero di coppie partecipanti (multiplo di 4): ");
  363.         scanf("%d", &numero_coppie);
  364.     }
  365.     coppia partecipanti[numero_coppie];
  366.     i=0;
  367.     while(i<numero_coppie) {
  368.         printf("\nInserire nome della %d coppia: ", (i + 1));
  369.         scanf("%s", partecipanti[i].nome_coppia);
  370.         partecipanti[i].punteggio = 0;
  371.         partecipanti[i].punti_totali = 0;
  372.         partecipanti[i].scontri[0]=numero_coppie;
  373.         partecipanti[i].scontri[1]=numero_coppie;
  374.         partecipanti[i].scontri[2]=numero_coppie;
  375.         partecipanti[i].scontri[3]=numero_coppie;
  376.         i++;
  377.     }
  378.     system("cls");
  379.     printTitle();
  380.     coppia tabellone[numero_coppie];
  381.     sorteggia_coppie(partecipanti, numero_coppie, tabellone);
  382.     inserisci_punteggi(tabellone, numero_coppie, partecipanti, 0);
  383.     stampa_classifica(tabellone, numero_coppie);
  384.     salva(partecipanti,tabellone, numero_coppie, nome_partita, 0);
  385.     for (i = 0; i < 3; i++) {
  386.         inserisci_punteggi(tabellone, numero_coppie, partecipanti, (i + 1));
  387.         stampa_classifica(tabellone, numero_coppie);
  388.         salva(partecipanti,tabellone, numero_coppie, nome_partita, (i+1));
  389.     }
  390.     }else{
  391.     String nome_partita;
  392.     printf("Nome della partita che si vuole caricare: ");
  393.     scanf("%s",&nome_partita);
  394.     system("cls");
  395.     printTitle();
  396.     carica(nome_partita);
  397.     }
  398.     system("PAUSE");
  399.     return 0;
  400. }