ref: c25c807edfd4d1947581f89d95774a5e553dc371
dir: /game.cpp/
/* Mastermind impl. todo: fix XXXs in code, */ #include <iostream> using namespace std; // io functions void printrules(); uint getlen(); uint getguess(); void compere(uint goal, uint guess); // aux functions uint length(uint n); uint gengoal(uint n); int digit(int number, int index); void printrules() { cout << "Hi," << endl; } uint getlen() { int len; /* hopefully not long */ cout << "how long? " << endl; cin >> len; while(len < 1) { cerr << "Sorry, please enter a 1+ number" << endl; len = getlen(); } return len; } uint getguess() { /* "sang bozorg neshane nazadan ast" */ char guess[512]; int i = 0, temp = 0; cout << "guess? " << endl; cin >> guess; while(guess[i] != '\0') { /* see if it's either a number or space, SCREAM loudly otherwise! */ if((guess[i] >= '0') && (guess[i] <= '9')) { /* because we can't put ascii into int directly */ temp = (guess[i] - '0') + temp; temp *= 10; } else if(guess[i] != ' ') { cerr << "That's not a number" << endl; return getguess(); } } return temp; } uint length(uint n) { uint t = 0; while(n > 0) { n /= 10; t++; } return t; } /* generates an uint, with n digits, used to make a goal */ uint gengoal(uint n) { uint num = 0; /* it's technically legal, but we get a int that's shorter than n */ do num = rand() % 10; while (num == 0) while(n > 0) { num *= 10; num += rand()%10; n--; } return num; } /* we could also use arrays for this, alas, that would a can of worms digit(number, index) = number[index] */ int digit(int number, int index) { if((index > length(number)) || (index < 0)) return -1; int i = 0, j; while(i < index) { j = number % 10; number /= 10; i++; } return j; } void compere(uint goal, uint guess) { int i = 0; while(i < length(goal)) { if(digit(goal, i) == digit(guess, i)) cout << '#'; else cout << 'X'; i++; } } int main() { uint len, goal; printrules(); len = getlen(); goal = gengoal(len); cout << len << endl; cout << goal << endl; }