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