Pagina Principale | Lista dei namespace | Strutture dati | Lista dei file | Campi dei dati | Elementi globali

menu.cpp

Vai alla documentazione di questo file.
00001 /* Tennis Tournament Management System 2005 by Silvio Moioli
00002    and Davide Gottini (moio@tiscali.it, davide.gottini@virgilio.it). */
00003 #include "menu.h"
00004 
00018 int menuCambiaGiocatore(const char* nomeFileGiocatori, 
00019                             const char* nomeFilePartite, Partita* p, int daCambiare){
00020     int risultato = 0;
00021     //Lista dei giocatori liberi (tutti)
00022     Lista* liberi = giocGiocatoriLiberi(nomeFileGiocatori, nomeFilePartite);
00023     if (liberi->n < 3){
00024         //Non è possibile effettuare altra scelta se non i giocatori correnti.
00025         if (daCambiare == 1){
00026             risultato = p->idG1;
00027         }
00028         else {
00029             risultato = p->idG2;
00030         }
00031     }
00032     else {
00033         cout<<"Scegli il concorrente"<<endl;
00034         uiStampaLinea();
00035         //Lista delle voci di menu
00036         Lista* menu = listeCreaLista(NULL);
00037         //Lista degli id dei giocatori, tranne quelli già scelti
00038         Lista* possibili = listeCreaLista(NULL);
00039         for (int i = 0;i < liberi->n;i++){
00040             Giocatore* g = (Giocatore *)listeLeggiElemento(liberi, i);
00041             if (g->id != p->idG1 && g->id != p->idG2){
00042                 listeAggiungiElemento(menu, g->nome);
00043                 listeAggiungiElemento(possibili, &(g->id));
00044             }
00045         }
00046         uiStampaMenu(menu);
00047 
00048         if (liberi->n == 3){
00049             risultato = *( (int*)listeLeggiElemento(possibili, 0));
00050         }
00051         else {
00052             int scelta = uiChiediScelta(menu->n);
00053             risultato = *( (int*)listeLeggiElemento(possibili, scelta - 1) );
00054         }
00055         listeDistruggiLista(menu);
00056         listeDistruggiLista(possibili);
00057     }
00058     //Ripulisce e ritorna
00059     for (int i = 0; i < liberi->n; i++){
00060         Giocatore* g = (Giocatore*) listeLeggiElemento(liberi, i);
00061         delete[] g->nome;
00062         delete g;
00063     }
00064     listeDistruggiLista(liberi);
00065     return risultato;
00066 }
00067 
00077 int menuCambiaRisultato(Partita* p, int daCambiare){
00078     cout<<"Inserire il risultato della partita"<<endl;
00079     uiStampaLinea();
00080     int risultato = uiChiediScelta(6);
00081     if (daCambiare == 1 && risultato == p->risG2 ||
00082             daCambiare == 2 && risultato == p->risG1){
00083         cout << "Nei tornei a eliminazione diretta non sono ammessi i pareggi." 
00084             << endl;
00085         uiChiediConferma();
00086         if (daCambiare == 1){
00087             return p->risG1;
00088         }
00089         else{
00090             return p->risG2;
00091         }
00092     }
00093     //La scelta dell'utente è corretta
00094     return risultato;
00095 }
00096 
00109 bool menuNuovaPartitaMostra(const char* nomeFileGiocatori,
00110                             const char* nomeFilePartite, Partita* p){
00111     bool uscita = false;
00112     bool risultato = false;
00113     while (!uscita){
00114         int turno = parTurnoCorrente(nomeFilePartite);
00115         int partite = parContaPartiteTurno(nomeFilePartite, turno);
00116         cout<<"Nuova partita nel turno numero: " << turno
00117             << " Giocate finora " << partite << " partite"<<endl;
00118         uiStampaLinea();
00119         char* tmp = giocNomeGiocatore(nomeFileGiocatori, p->idG1);
00120         cout << "Giocatore 1: " << tmp << " -- Risultato " << p->risG1 << endl;
00121         delete[] tmp;
00122         tmp = giocNomeGiocatore(nomeFileGiocatori, p->idG2);
00123         cout << "Giocatore 2: " << tmp << " -- Risultato " << p->risG2 << endl;
00124         delete[] tmp;
00125 
00126         Lista *menu = listeCreaLista("Cambia Giocatore 1");
00127         listeAggiungiElemento(menu, "Cambia Giocatore 2");
00128         listeAggiungiElemento(menu, "Imposta Risultato Giocatore 1");
00129         listeAggiungiElemento(menu, "Imposta Risultato Giocatore 2");
00130         listeAggiungiElemento(menu, "Conferma e Salva Parita");
00131         listeAggiungiElemento(menu, "Annulla Partita e torna al Menu Turno");
00132         uiStampaMenu(menu);
00133         listeDistruggiLista(menu);
00134 
00135         switch (uiChiediScelta(6)){
00136             case 1:
00137                 p->idG1 = menuCambiaGiocatore(nomeFileGiocatori, nomeFilePartite,
00138                     p, 1);
00139                 break;
00140             case 2:
00141                 p->idG2 = menuCambiaGiocatore(nomeFileGiocatori, nomeFilePartite,
00142                     p, 2);
00143                 break;
00144             case 3:
00145                 p->risG1 = menuCambiaRisultato(p, 1);
00146                 break;
00147             case 4:
00148                 p->risG2 = menuCambiaRisultato(p, 2);
00149                 break;
00150             case 5:
00151                 uscita = true;
00152                 risultato = true;
00153                 break;
00154             case 6:
00155                 uscita = true;
00156                 risultato = false;
00157                 break;
00158             }
00159     }
00160     return risultato;
00161 }
00162 
00174 void menuNuovaPartita(const char* nomeFileGiocatori,
00175                             const char* nomeFilePartite){
00176     if ((!fileEsiste(nomeFileGiocatori)) || (fileContaRecord(nomeFileGiocatori) < 2)){
00177         cout << "Non ci sono abbastanza giocatori iscritti al torneo!" << endl;
00178         uiChiediConferma();
00179     }
00180     else {
00181         Lista *liberi = giocGiocatoriLiberi(nomeFileGiocatori, nomeFilePartite);
00182         if (liberi->n < 2){
00183             for (int i = 0; i < liberi->n; i++){
00184                 const Giocatore* g = (Giocatore* ) listeLeggiElemento(liberi, i);
00185                 delete[] g->nome;
00186                 delete g;
00187             }
00188             listeDistruggiLista(liberi);
00189             cout << "Non ci sono abbastanza giocatori liberi!" << endl;
00190             uiChiediConferma();
00191         }
00192         else {
00193             //Ci sono abbastanza giocatori e sono liberi. Creiamo la partita di default.
00194             Giocatore *gioc1 = (Giocatore *) listeLeggiElemento(liberi, 0);
00195             Giocatore *gioc2 = (Giocatore *) listeLeggiElemento(liberi, 1);
00196             Partita *nuova = new Partita;
00197             nuova->turno = parTurnoCorrente(nomeFilePartite);
00198             nuova->idG1 = gioc1->id;
00199             nuova->idG2 = gioc2->id;
00200             nuova->risG1 = 1;
00201             nuova->risG2 = 2;
00202             for (int i = 0; i < liberi->n; i++){
00203                 Giocatore* g = (Giocatore* ) listeLeggiElemento(liberi, i);
00204                 delete[] g->nome;
00205                 delete g;
00206             }
00207             listeDistruggiLista(liberi);
00208             if (menuNuovaPartitaMostra(nomeFileGiocatori, nomeFilePartite, nuova)){
00209                 //Salviamo le scelte su file
00210                 parNuovaPartita(nomeFileGiocatori, nomeFilePartite, nuova->idG1,
00211                     nuova->idG2, nuova->risG1, nuova->risG2);
00212             }
00213             delete nuova;
00214         }
00215     }
00216 }
00217 
00227  void menuPartiteTurno(const char* nomeFileGiocatori,
00228                            const char* nomeFilePartite, int turno){
00229         int partite = parContaPartiteTurno(nomeFilePartite, turno);
00230     if (partite > 0){
00231         cout << "Nel turno numero " << turno << " sono state giocate ";
00232         cout << partite << " partite"<<endl;
00233         uiStampaLinea();
00234         
00235         Lista* giocate = parListaPartiteGiocate(nomeFilePartite, turno);
00236         for (int i = 0;i < giocate->n;i++){
00237             Partita* partita = (Partita*)listeLeggiElemento(giocate, i);
00238             char* temp = giocNomeGiocatore(nomeFileGiocatori, partita->idG1);
00239             cout << temp;
00240             delete[] temp;
00241             cout << " " << partita->risG1 << endl;
00242             temp = giocNomeGiocatore(nomeFileGiocatori, partita->idG2);
00243             cout << temp;
00244             delete[] temp;
00245             cout << " " << partita->risG2 << endl << endl;
00246             delete partita;
00247         }
00248         listeDistruggiLista(giocate);
00249     }
00250     else {
00251         cout << "Non sono state giocate partite nel turno " << turno << endl;
00252     }
00253     uiChiediConferma();
00254 }
00255 
00265 void menuChiudiTurno(const char* nomeFileGiocatori,
00266                            const char* nomeFilePartite, int turno){
00267     if (parContaPartiteTurno(nomeFilePartite, turno) != 0){
00268         parNuovoTurno(nomeFilePartite);
00269         cout << "Turno Chiuso." << endl;
00270     }
00271     else {
00272         cout << "Per chiudere il Turno bisogna aver giocato almeno una partita!"
00273             << endl;
00274     }
00275     uiChiediConferma();
00276 }
00277 
00287 void menuTurniPassati(const char* nomeFileGiocatori,
00288                            const char* nomeFilePartite){
00289     int turno = parTurnoCorrente(nomeFilePartite);
00290     if (turno > 2){
00291         cout<<"Visualizzazione turni giocati finora"<<endl;
00292         uiStampaLinea();
00293         for (int i = 1;i < turno;i++){
00294             cout << "Turno " << i << ": giocate " << parContaPartiteTurno(nomeFilePartite, i) << " partite" << endl;
00295         }
00296         cout << "Immetti il numero del turno da visualizzare:" << endl;
00297         menuPartiteTurno(nomeFileGiocatori, nomeFilePartite,
00298             uiChiediScelta(turno - 1));
00299     }
00300     else {
00301         if (turno == 2){
00302             menuPartiteTurno(nomeFileGiocatori, nomeFilePartite, 1);
00303         }
00304         else {
00305             cout << "Siamo al primo turno, non ci sono turni precedenti." << endl;
00306             uiChiediConferma();
00307         }
00308     }
00309 }
00310 
00319 void menuAggiungiGiocatore(const char* nomeFileGiocatori,
00320                            const char* nomeFilePartite){
00321     cout<<"Inserisci il nome del Giocatore"<<endl;
00322     uiStampaLinea();
00323     char *nomeGiocatore = uiChiediStringa();
00324     giocNuovoGiocatore(nomeFileGiocatori, nomeGiocatore);
00325     delete[] nomeGiocatore;
00326     cout << "Giocatore inserito" << endl;
00327 }
00328 
00337 void menuGiocatoriTorneo(const char* nomeFileGiocatori,
00338                            const char* nomeFilePartite){
00339     if (fileEsiste(nomeFileGiocatori) && fileContaRecord(nomeFileGiocatori) > 0){
00340         int numGiocatori = fileContaRecord(nomeFileGiocatori);
00341         cout << "A questo torneo partecipano " << numGiocatori << " giocatori."<<endl;
00342         uiStampaLinea();
00343         cout << endl;
00344         for (int i = 0;i < numGiocatori;i++){
00345             char* nome = giocNomeGiocatore(nomeFileGiocatori, i);
00346             cout << nome << endl;
00347             delete[] nome;
00348         }
00349     }
00350     else {
00351         cout << "A questo Torneo non partecipa alcun giocatore." << endl;
00352     }
00353     uiChiediConferma();
00354 }
00355 
00365 void menuVediCarrieraGiocatore(const char* nomeFileGiocatori,
00366                            const char* nomeFilePartite, int giocatore){
00367     char* nome = giocNomeGiocatore(nomeFileGiocatori, giocatore);
00368     cout << "Carriera del giocatore: " << nome;
00369     delete[] nome;
00370     uiStampaLinea();
00371     cout << "Ha giocato contro:" << endl;
00372     bool haPerso = false;
00373     int partite = parContaPartite(nomeFilePartite);
00374     for (int i = 0;i < partite && !haPerso;i++){
00375         switch (giocHaGiocato(nomeFileGiocatori, nomeFilePartite, giocatore, i)){
00376             case NONGIOCA:
00377                 break;
00378             case HAPERSO:
00379                 cout << "E' stato battuto (ed eliminato) da: ";
00380                 haPerso = true;
00381             case HAVINTO:
00382                 Partita* part = parDettagliPartita(nomeFilePartite, i);
00383                 char* nome = NULL;
00384                 if (part->idG1 == giocatore){
00385                     nome = giocNomeGiocatore(nomeFileGiocatori, part->idG2);
00386                 }
00387                 else {
00388                     nome = giocNomeGiocatore(nomeFileGiocatori, part->idG1);
00389                 }
00390                 cout << nome << endl;
00391                 delete[] nome;
00392                 delete part;
00393                 break;
00394         }
00395     }
00396     uiChiediConferma();
00397 }
00398 
00408 void menuCarrieraGiocatore(const char* nomeFileGiocatori,
00409                            const char* nomeFilePartite){
00410     if (fileEsiste(nomeFileGiocatori) && fileContaRecord(nomeFileGiocatori) > 0){
00411         if (fileEsiste(nomeFilePartite)){
00412             cout<<"Elenco dei giocatori nel Torneo"<<endl;
00413             uiStampaLinea();
00414             int numGiocatori = fileContaRecord(nomeFileGiocatori);
00415             for (int i = 0;i < numGiocatori;i++){
00416                 char* nome = giocNomeGiocatore(nomeFileGiocatori, i);
00417                 cout << i + 1 << "-" << nome << endl;
00418                 delete[] nome;
00419             }
00420             if (numGiocatori == 1){
00421                 menuVediCarrieraGiocatore(nomeFileGiocatori, nomeFilePartite, 1);
00422             }
00423             else {
00424                 menuVediCarrieraGiocatore(nomeFileGiocatori, nomeFilePartite,
00425                     uiChiediScelta(numGiocatori) - 1);
00426             }
00427         }
00428         else {
00429             cout << "In questo Torneo non sono ancora state giocate partite."
00430                 << endl;
00431             uiChiediConferma();
00432         }
00433     }
00434     else {
00435         cout << "A questo Torneo non partecipa alcun giocatore." << endl;
00436         uiChiediConferma();
00437     }
00438 }
00439 
00440 /* Per i commenti sulle funzioni pubbliche e i loro i parametri (che sono 
00441   stati eliminati per  evitare inutili duplicazioni e spreco di spazio)
00442   si rimanda all'header  della libreria. */
00443   
00444 void menuPartite(const char* nomeFileGiocatori,
00445                            const char* nomeFilePartite){
00446     bool uscita = false;
00447     while (!uscita){
00448         int turno = parTurnoCorrente(nomeFilePartite);
00449         cout << "MENU' PARTITE: Turno: " << turno;
00450         cout << "; Giocate finora " <<
00451             parContaPartiteTurno(nomeFilePartite, turno) << " partite"<<endl;
00452         uiStampaLinea();
00453 
00454         Lista *menu = listeCreaLista("Nuova partita");
00455         listeAggiungiElemento(menu,
00456             "Visualizza le partite giocate in questo turno (e i risultati)");
00457         listeAggiungiElemento(menu, "Chiudi il turno");
00458         listeAggiungiElemento(menu,
00459             "Visualizza i dettagli di un turno passato");
00460         listeAggiungiElemento(menu, "Torna al Menu Principale");
00461         uiStampaMenu(menu);
00462         listeDistruggiLista(menu);
00463 
00464         switch (uiChiediScelta(5)){
00465             case 1:
00466                 menuNuovaPartita(nomeFileGiocatori, nomeFilePartite);
00467                 break;
00468             case 2:
00469                 menuPartiteTurno(nomeFileGiocatori, nomeFilePartite, turno);
00470                 break;
00471             case 3:
00472                 menuChiudiTurno(nomeFileGiocatori, nomeFilePartite, turno);
00473                 break;
00474             case 4:
00475                 menuTurniPassati(nomeFileGiocatori, nomeFilePartite);
00476                 break;
00477             case 5:
00478                 uscita = true;
00479                 break;
00480         }
00481     }
00482 }
00483 
00484 void menuGiocatori(const char* nomeFileGiocatori,
00485                            const char* nomeFilePartite){
00486     bool uscita = false;
00487     while (!uscita){
00488         int turno = parTurnoCorrente(nomeFilePartite);
00489         int partite = parContaPartite(nomeFilePartite);
00490         cout << "MENU' GIOCATORI: " << " Turno: " << turno <<
00491             "; Giocate finora " << partite << " partite"<<endl;
00492         uiStampaLinea();
00493         
00494         Lista *menu =
00495            listeCreaLista("Visualizza l'elenco dei giocatori in torneo");
00496         listeAggiungiElemento(menu,
00497             "Visualizza le partite e i risultati di un singolo giocatore");
00498         listeAggiungiElemento(menu, "Nuovo Giocatore");
00499         listeAggiungiElemento(menu, "Torna al Menu Principale");
00500         uiStampaMenu(menu);
00501         listeDistruggiLista(menu);
00502         switch (uiChiediScelta(4)){
00503             case 1:
00504                 menuGiocatoriTorneo(nomeFileGiocatori, nomeFilePartite);
00505                 break;
00506             case 2:
00507                 menuCarrieraGiocatore(nomeFileGiocatori, nomeFilePartite);
00508                 break;
00509             case 3:
00510                 menuAggiungiGiocatore(nomeFileGiocatori, nomeFilePartite);
00511                 break;
00512             case 4:
00513                 uscita = true;
00514                 break;
00515         }
00516     }
00517 }
00518 
00519 void menuRiepilogoTorneo(const char* nomeFileGiocatori,
00520                            const char* nomeFilePartite){
00521     int turno = parTurnoCorrente(nomeFilePartite);
00522     int partite = parContaPartite(nomeFilePartite);
00523     if (partite > 0){
00524         cout<<"Partite del torneo giocate finora:"<<endl;
00525         uiStampaLinea();
00526         for (int i = 1;i <= turno;i++){
00527             menuPartiteTurno(nomeFileGiocatori, nomeFilePartite, i);
00528         }
00529     }
00530     else {
00531         cout << "Non sono state giocate partite." << endl;
00532     }
00533     cout << "Riepilogo Torneo concluso." << endl;
00534     uiChiediConferma();
00535 }

Generato il Fri Jan 28 11:43:15 2005 per TennisTournament da doxygen 1.3.6