sabato 15 dicembre 2012

Il programma Sala da Gioco - conclusione

La funzione SalaGioco::AggiungiGiocatore()

La funzione membro SalaGioco::AggiungiGiocatore() aagiunge un giocatore alla fine della coda nella sala.
void SalaGioco::AggiungiGiocatore()
{ //crea un nuovo nodo giocatore
        cout << “Inserisci il nome del giocatore: ”;
        string nome; cin >> nome;
        Giocatore* pNuovoGiocatore = new Giocatore(nome);
   //Se la lista è vuota, questo nuovo giocatore diventa l'inizio della coda
         if(m_pTesta ===){ m_pTesta = pNuovoGiocatore; }
  //altrimenti si cerca la coda della lista e si aggiunge il giocatore
        else { Giocatore* pCiclo = m_pTesta;
                  while (pCiclo - > DaiPros() !=0)
                   { pCiclo = pCiclo - >DaiPros(); }
                pCiclo - > MettiPros(pNuovoGiocatore);
         }
}

La prima cosa che la funzione richiede è il nome del giocatore dall'utente in modo che possa essere usato per istanziare un nuovo oggetto Giocatore. Quindi setta il puntatore membro dell'oggetto a valore nullo. Nell'istruzione successiva la funzione controlla che la Sala da Gioco sia vuota, e non vi sia coda. Se così, il nuovo oggetto Giocatore diviene la testa della coda, m_pTesta è fissato sul blocco di memoria di questo giocatore su heap. Se la Sala da Gioco non è vuota, il giocatore è aggiunto al fondo della coda. La funzione realizza questa operazione spostandosi di giocatore in giocatore attraverso pCiclo e la funzione membro DaiPros(), sino a quando questa non restituisce un valore 0 (fine della coda). Quindi la funzione aggiunge un nuovo punto nodale all'oggetto Giocatore appena creato su heap, aggiungendo così un nuovo elemento alla lista.

La funzione SalaGioco::RimuoviGiocatore()

La funzione membro SalaGioco::RimuoviGiocatore() toglie il giocatore che si trova in testa alla fila.
void SalaGioco::RimuoviGiocatore()
{ if(m_pTesta ==0){ cout << “ La sala da Gioco e' vuota!”; }
       else { Giocatore* pTempo = m_pTesta;
                 m_pTesta = m_PTesta - > DaiPros();
                 delete pTempo; }
}

La funzione controlla m_PTesta, se il suo valore è 0, la Sala da Gioco è vuota pertanto viene mostrato un messaggio. Altrimenti il primo Giocatore della lista viene rimosso. Questa operazione viene ottenuta creando un puntatore temporaneo, pTempo , puntando ad esso il primo giocatore nella lista; quindi m_pTesta viene reindirizzato sul secondo giocatore della lista, oppure 0. Infine la funzione distrugge l'oggetto Giocatore fissato dal puntatore temporaneo, pTempo.

La funzione SalaGioco::Azzera()

La funzione membro SalaGioco::Azzera() rimuove tutti i giocatori dalla Sala.
void SalaGioco::Azzera()
{ while (m_pTesta !=0) RimuoviGiocatore(); }

Se la lista è vuota, il ciclo non viene eseguito e la funzione termina. Altrimenti, il ciclo viene eseguito e la funzione inizia a rimuovere il primo oggetto Giocatore della lista attraverso RimuoviGiocatore() sino a quando non vi sono più Giocatori.

La funzione operatore<<()

La funzione operator<<() sovraccarica l'operatore << in modo che possa visualizzare la SalaGioco attraverso l'istruzione cout.
ostream& operator<<(ostream& os, const SalaGioco& aSalaGioco)
{ Giocatore* pCiclo = aSalaGioco.m_pTesta;
    os << “\n Chi si trova nella Sala Gioco:\n”;
    if (pCiclo ==0){ os << “La sala e' vuota!\n”;}
        else { while(pCiclo !=0){ os << pCiclo - > DaiNome() << endl;
         pCiclo =pCiclo - > DaiPros();} }
     return os;
}

Se la Sala da Gioco è vuota, viene restituito un messaggio corretto. Altrimenti la funzione cicla attraverso tutti i giocatori presenti nella lista, inviando i loro nomi al flusso di uscita, attraverso il puntatore pCiclo che scorre la lista.

La funzione main()

La funzione main() mostra un menù utente con una serie di scelte che permette di effettuare le azioni richieste.
int main()
{
     SalaGioco miaSala;
     int scelta;
     do
        { cout << miaSala;
           cout << “\nSALA DA GIOCO\n”;
           cout << “0 – esci dal programma.\n”;
           cout << “1 – Aggiungi un giocatore alla sala.\n”;
           cout << “2 - Rimuovi un giocatore dalla sala.\n”;
           cout << “3 – Azzera la sala.\n”;
           cout << endl; << “Dai una scelta: ”; cin >> scelta;
   switch (scelta)
     {   case 0: cout << “Addio!\n”; break;
          case 1: miaSala.AggiungiGiocatore(); break;
          case 2: miaSala.RimuoviGiocatore();break;
          case 3: miaSala.Azzera(); break;
         default: cout << “Scelta non valida.\n”;
      }
  }while(scelta !=0);
    return 0;
}

La funzione per prima cosa istanzia un nuovo oggetto SalaGioco, quindi entra nel ciclo e presenta un menù di scelte, e attende la scelta dell'utente. Quindi richiama le funzioni corrispondenti di SalaGioco; se la scelta è non valida, il programma lo comunica. Il ciclo prosegue sino a quando l'utente non digita 0.

Nessun commento:

Posta un commento