/* Jim Plank - CS102 */ /* Implementation of the MasterMind class */ #include using namespace std; #include "mm.h" int MasterMind::get_nguesses() { return nguesses; } int MasterMind::get_legal_guess() { int guess; while(1) { cout << p2 << ": Make a guess, please: "; cin >> guess; if (is_legal_answer(guess)) return guess; cout << p2 << ": " << guess << " is not a legal answer. "; } } int MasterMind::is_legal_answer(int n) { int dr, dl, dm; if (n < 0 || n > 999) return 0; dr = n % 10; dl = n / 100; dm = (n / 10) % 10; if (dl == dr || dl == dm || dm == dr) return 0; return 1; } void MasterMind::play_game(string player1, string player2) { int guess; int right; int dr, dm, dl; int ar, am, al; int correct_number; int correct_position; p1 = player1; p2 = player2; do { cout << p1 << ": Enter an answer: "; cin >> answer; if (!is_legal_answer(answer)) { cout << "Not a legal answer\n"; } } while (!is_legal_answer(answer)); ar = answer % 10; al = answer / 100; am = (answer / 10) % 10; nguesses = 1; while (1) { guess = get_legal_guess(); if (guess == answer) { cout << "Right! You took " << nguesses << " move"; if (nguesses != 1) cout << "s" ; cout << "." << endl; return; } else { dr = guess % 10; dl = guess / 100; dm = (guess / 10) % 10; correct_position = 0; if (dr == ar) correct_position++; if (dl == al) correct_position++; if (dm == am) correct_position++; correct_number = 0; if (dr == ar || dr == am || dr == al) correct_number++; if (dm == ar || dm == am || dm == al) correct_number++; if (dl == ar || dl == am || dl == al) correct_number++; cout << "Correct position: " << correct_position << endl; cout << "Correct number: " << correct_number << endl; } nguesses++; } return; }