00001
00002
00003 #include "menu.h"
00004
00018 int menuCambiaGiocatore(const char* nomeFileGiocatori,
00019 const char* nomeFilePartite, Partita* p, int daCambiare){
00020 int risultato = 0;
00021
00022 Lista* liberi = giocGiocatoriLiberi(nomeFileGiocatori, nomeFilePartite);
00023 if (liberi->n < 3){
00024
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
00036 Lista* menu = listeCreaLista(NULL);
00037
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
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
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
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
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
00441
00442
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 }