oregon ha scritto:
Se posti immagini al posto del testo del codice non ci provo neanche.
scusa hai ragione, provvedo subito.
NodoA.h //nodo dell'albero binario
#ifndef NODOA_H
#define NODOA_H
#include <iostream>
using namespace std;
class Nodo
{
private:
string info;
Nodo* lLink, *rLink;
public:
Nodo();
Nodo(string);
~Nodo();
string GetInfo();
Nodo* GetlLink();
Nodo* GetrLink();
void SetInfo(string);
void SetlLink(Nodo*);
void SetrLink(Nodo*);
};
#endif
NodoA.cpp
#include "NodoA.h"
#include <iostream>
using namespace std;
Nodo::Nodo(){
lLink = rLink = NULL;
}
Nodo::Nodo(string x):Nodo(){
info = x;
}
Nodo::~Nodo(){
}
string Nodo::GetInfo(){
return info;
}
Nodo* Nodo::GetlLink(){
return lLink;
}
Nodo* Nodo::GetrLink(){
return rLink;
}
void Nodo::SetInfo(string i){
info = i;
}
void Nodo::SetlLink(Nodo* p){
lLink = p;
}
void Nodo::SetrLink(Nodo* s){
rLink = s;
}
Gioco.h
#ifndef GIOCO_H
#define GIOCO_H
#include "NodoA.h"
#include <iostream>
using namespace std;
class Gioco
{
private:
Nodo* radice;
string nomePlayer;
string vett[100]; //VETTORE DI RISPOSTE
bool vittoria; //SE vittoria == true VUOL DIRE CHE IL COMPUTER HA VINTO
void Gioca(Nodo*);
bool Controlla(Nodo*);
int i;
void preOrder(Nodo*);
public:
Gioco();
Gioco(Nodo*);
~Gioco();
void Gioca();
void Wiki();
void Inserisci(Nodo*, string, string);
void Fine();
void Carica(Nodo*);
void SetNomePlayer(string);
string GetNomePlayer();
void preOrder();
};
#endif
Gioco.cpp
#include "Gioco.h"
#include "NodoA.h"
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
Gioco::Gioco() { //COSTRUTTORE DI DEFAULT
radice = 0;
i=-1;
}
Gioco::Gioco(Nodo* p) //COSTRUTTORE CHE CREA UN ALBERO CON NODO RADICE E DUE NODI FOGLIA
{
radice = new Nodo("vola?");
p = radice;
Nodo* r = new Nodo("cane");
radice -> SetrLink(r);
Nodo* l = new Nodo("airone");
radice -> SetlLink(l);
Carica(p);
}
Gioco::~Gioco() //DISTRUTTORE
{
}
void Gioco::Carica(Nodo* p){ //CARICAMENTO DA FILE DI TESTO
string riga;
ifstream file;
file.open("parte2.txt",ios::in); //apre il file per leggere le informazioni
while(!file.eof()){
getline(file,riga);
if(riga!=""){ //controlla che la riga non sia vuota
if(riga=="no"){ //controlla se la riga è un "no"
if(Controlla(p)) //controlla se il nodo puntato da p è un nodo foglia
p->SetrLink(new Nodo());
else
p=p->GetrLink();
}
else if(riga=="si"){ //controlla se la riga è un "si"
if(Controlla(p))
p->SetlLink(new Nodo());
else
p=p->GetlLink();
}
else{
p->SetInfo(riga); //altrimenti inserisce nel nodo la domanda
getline(file,riga); //legge un'altra riga
p->SetlLink(new Nodo(riga)); //crea un nuovo nodo e inserisce nel campo info l'animale
p=radice;
}
}
}
file.close();
}
void Gioco::SetNomePlayer(string n) { //MUTATOR DI NOME PLAYER
nomePlayer = n;
}
string Gioco::GetNomePlayer() { //ACCESSOR DI NOME PLAYER
return nomePlayer;
}
void Gioco::Inserisci(Nodo* p, string domanda, string newAnimale) { //INSERISCE UN NUOVO ANIMALE O UNA NUOVA DOMANDA
int x=i;
p -> SetrLink(new Nodo(p -> GetInfo()));
p -> SetlLink(new Nodo(newAnimale));
p -> SetInfo(domanda);
ofstream file;
file.open("parte2.txt", ios::app);
for(i=0;i<x+1;i++)
file<<"\n"<<vett
<<endl;
file<<domanda<<endl;
file<<newAnimale<<endl;
file.close();
}
bool Gioco::Controlla(Nodo* p) { //FUNZIONE CHE CONTROLLA SE E' UN NODO FOGLIA
return (p -> GetlLink() == 0);
}
void Gioco::Gioca(Nodo* p) { //VERA FUNZIONE GIOCA (PRIVATA)
string dom, ris, newAnimale;
if (!Controlla(p)) { //CONTROLLO SE E' UN NODO FOGLIA
i++;
cout<<"\n\nL'animale a cui stai pensando "<<p -> GetInfo()<<"\t";
do {
cin>>ris;
}while(ris != "si" && ris != "no");
if (ris == "si"){
p = p -> GetlLink();
vett="si"; //carica in un vettore di risposte l'input per la costruzione dell'albero da file
}
else{
p = p -> GetrLink();
vett="no";
}
system("cls");
Gioca(p);
}
else {
cout<<"\n\n"<<p -> GetInfo()<<" \212 l'animale a cui stai pensando?\t";
do {
cin>>ris;
}while(ris != "si" && ris != "no");
if (ris == "si") {
cout<<"\nIL COMPUTER HA VINTO, PUOI FARE DI MEGLIO \n\n";
vittoria = true;
}
else{
i++;
vett="no";
cout<<"\nQual \212 l'animale a cui stavi pensando?\t";
cin>>newAnimale;
cout<<"\nInserire domanda che caratterizza questo animale:\t";
fflush(stdin); //PULISCE BUFFER DI INPUT
getline (cin, dom); //LEGGE LA DOMANDA "CARATTERISTICA"
Inserisci(p, dom, newAnimale);
vittoria = false;
}
i=0;
Fine(); //aggiorna la classifica
}
}
void Gioco::Gioca() { //FUNZIONE PUBBLICA DI GIOCA PER LA RICORSIONE
Gioca(radice);
}
void Gioco::Fine() { //STAMPA LE DUE CLASSIFICHE
ofstream file; //file players Vincenti e file players Perdenti
if (vittoria) {
file.open("ClassificaPerdenti.txt", ios::app); //SE HA VINTO IL COMPUTER MODIFICO IL FILE DEI GIOCATORI CHE HANNO PERSO
file<<"\n"<<nomePlayer;
file.close();
}
else {
file.open("ClassificaVincenti.txt", ios::app);
file<<"\n"<<nomePlayer;
file.close();
}
}