Nottolino quantistico: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Nottolini termici: aggiunto link
Blakwolf (discussione | contributi)
m Evitato spezzettamento
Riga 110:
/* Copyright BlakWolf 2004 */
/* Released under Gnu GPL V. 2 or later, at your option */
 
#include <set> /* contenitore per regole */
#include <cstdlib> /* rand() e srand() */
#include <ctime> /* time() */
#include <iostream>
 
/*
* Pedina
Riga 123:
unsigned int posizione;
};
 
 
/*
* Regola
Riga 142 ⟶ 141:
return (Lancio == r.Lancio);
}
 
};
 
/* Insieme di regole
* Contiene un insieme di regole del gioco
Riga 153 ⟶ 152:
typedef std::set<Regola> Container;
typedef Container::iterator Iterator;
 
private:
Container regole;
 
public:
Ruleset(Iterator from, Iterator to);
Riga 162 ⟶ 161:
~Ruleset(){};
};
 
/* Inserisce le regole nel contenitore
*/
Riga 169 ⟶ 168:
regole.insert(*it);
}
 
/* Se trova una regola la applica, e ritorna lo spostamento
* altrimenti ritorna 0 (spostamento nullo)
Riga 178 ⟶ 177:
return 0;
return (it->Spostamento);
}
 
int main() {
 
unsigned int Dimesione = 30; /* lunghezza del percorso */
int partite_da_giocare = 100000; /* partite */
 
int Croce;
unsigned int Lancio;
 
Ruleset::Container Contenitore;
 
// set n. 1 di regole per i quadrati pari
// se escono 7 o 11, avanza di 1, se escono 2 3 12 indietreggia di 1
 
Contenitore.insert(Regola(7, 1));
Contenitore.insert(Regola(11, 1));
Riga 198 ⟶ 197:
Contenitore.insert(Regola(3, -1));
Contenitore.insert(Regola(12, -1));
 
 
Ruleset Bianchi_a(Contenitore.begin(), Contenitore.end());
 
// set n. 1 di regole per i quadrati dispari
// vedi sopra
 
Contenitore.clear();
Contenitore.insert(Regola(11, 1));
Riga 210 ⟶ 208:
Contenitore.insert(Regola(4, -1));
Contenitore.insert(Regola(12, -1));
 
Ruleset Neri_a(Contenitore.begin(), Contenitore.end());
 
// set n. 2 di regole per i quadrati pari
Contenitore.clear();
Riga 219 ⟶ 217:
Contenitore.insert(Regola(4, -1));
Contenitore.insert(Regola(12, -1));
 
Ruleset Bianchi_b(Contenitore.begin(), Contenitore.end());
 
// set n. 2 di regole per i quadrati dispari
Contenitore.clear();
Riga 229 ⟶ 227:
Contenitore.insert(Regola(3, -1));
Contenitore.insert(Regola(12, -1));
 
Ruleset Neri_b(Contenitore.begin(), Contenitore.end());
 
int Contatore = 0; // partite giocate
int Vittorie = 0; // partite vinte
 
Pedina p;
p.posizione = Dimesione / 2 ; /* Inizia la partita con la pedina al
centro */
std::srand(std::time(0)); /* Randomizzazione del seme */
 
 
while (Contatore < partite_da_giocare){
Croce = (std::rand()>>8) & 1; // pari o dispari
Lancio = (std::rand()>>8) % 6 + 1; // dado 1
Lancio += (std::rand()>>8) % 6 + 1; // dado 2
 
if (Croce) { /* Esce Croce */
if (p.posizione & 1) { /* Casella Dispari */
Riga 257 ⟶ 254:
p.posizione += Neri_b.Applica(Lancio);
}
 
if (p.posizione == Dimesione) { /* vittoria */
p.posizione = Dimesione / 2; /* Rimetti il pedone al centro */
Riga 263 ⟶ 260:
++Contatore
}
 
if (p.posizione == 0) { /* sconfitta */
p.posizione = Dimesione / 2;
Riga 269 ⟶ 266:
}
}
 
 
std::cout << "Vittorie " << Vittorie << " Giocate " << Contatore << "
("; std::cout << 100. * Vittorie / Contatore << "%)" << std::endl;
}
 
/* fine codice */
</code>