View Full Version : [c++] Mastermind, funzione di verifica
jokers85
30-05-2013, 15:59
Sto realizzando un mastermind in c++
http://it.wikipedia.org/wiki/Mastermind
http://en.wikipedia.org/wiki/Mastermind_%28board_game%29
Non avendo ancora studiato la parte grafica del c++ (anche perchè al momento non mi interessa), ho pensato di farlo con i numeri.
Ho creato una funzione che mi genera un array di interi random < 8, ed una funzione che chiede un array al giocatore.
Il problema si presenta nel momento di determinare se i numeri sono stati indovinati, o meglio se non sono stati indovinati, mi spiego:
per trovare un numero indovinato mi basta fare:
array_pc[i] meno array_giocatore[i] se =0 il numero è uguale, se != 0 il nemero è diverso.
se != 0 dovrei anche controllare che tale numero non sia in un altra posizione e qui mi blocco.
Avevo pensato di fare una cosa del tipo:
se array_pc[0] - array_giocatore[0] != 0 || array_pc[1] - array_giocatore[0] !=0 || etc..., solo che mi sembra un pò una st*****ta.
Qualche suggerimento?
MissaW_RaZ_98
05-06-2013, 10:18
prova con la funzione strcmp della libreria string
Utilizzando C++11 è abbastanza semplice (ricordati che se usi GCC va aggiunta l'opzione -std=c++11 e devi avere una versione molto recente di GCC)
#include <iostream>
#include <array>
#include <random>
#include <algorithm>
#include <limits>
int main(int argc, char **argv) {
using namespace std;
static const size_t values_size = 3;
array<int, values_size> random_values;
array<int, values_size> user_values;
random_device rd;
default_random_engine prng(rd());
uniform_int_distribution<int> dis(0, 7);
cout << "I valori casuali sono: " << endl;
for(int& rnd : random_values) {
rnd = dis(prng);
cout << rnd << endl;
}
sort(random_values.begin(), random_values.end());
cout << "Inserisci " << values_size << " valori casuali" << endl;
for(int& value : user_values) {
while (!(cin >> value)) {
cout << "Il numero inserito non è valido, riprova" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
}
sort(user_values.begin(), user_values.end());
if(random_values == user_values) {
cout << "I numeri sono stati indovinati" << endl;
} else {
cout << "I numeri non sono stati indovinati" << endl;
}
return 0;
}
vendettaaaaa
06-06-2013, 09:08
Utilizzando C++11 è abbastanza semplice (ricordati che se usi GCC va aggiunta l'opzione -std=c++11 e devi avere una versione molto recente di GCC)
#include <iostream>
#include <array>
#include <random>
#include <algorithm>
#include <limits>
int main(int argc, char **argv) {
using namespace std;
static const size_t values_size = 3;
array<int, values_size> random_values;
array<int, values_size> user_values;
random_device rd;
default_random_engine prng(rd());
uniform_int_distribution<int> dis(0, 7);
cout << "I valori casuali sono: " << endl;
for(int& rnd : random_values) {
rnd = dis(prng);
cout << rnd << endl;
}
sort(random_values.begin(), random_values.end());
cout << "Inserisci " << values_size << " valori casuali" << endl;
for(int& value : user_values) {
while (!(cin >> value)) {
cout << "Il numero inserito non è valido, riprova" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
}
sort(user_values.begin(), user_values.end());
if(random_values == user_values) {
cout << "I numeri sono stati indovinati" << endl;
} else {
cout << "I numeri non sono stati indovinati" << endl;
}
return 0;
}
Dato che usi C++11, come mai static const size_t anzichè constexpr size_t?
Dato che usi C++11, come mai static const size_t anzichè constexpr size_t?
Non ci avevo proprio pensato, venendo da linguaggi come C# ho scritto in maniera intuitiva static const
Che differenze ci sono? Il compilatore per entrambi i casi sostituisce values_size con il suo valore all'interno del codice
vendettaaaaa
06-06-2013, 22:52
Non ci avevo proprio pensato, venendo da linguaggi come C# ho scritto in maniera intuitiva static const
Che differenze ci sono? Il compilatore per entrambi i casi sostituisce values_size con il suo valore all'interno del codice
Hmm a quanto ho capito con constexpr lo fa, è praticamente una macro type safe, mentre static const va cmq ad allocare la variabile nella memoria statica. Ma sono sicuro solo al 99% :D
Hmm a quanto ho capito con constexpr lo fa, è praticamente una macro type safe, mentre static const va cmq ad allocare la variabile nella memoria statica. Ma sono sicuro solo al 99% :D
Ok grazie per il consiglio ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.