/* Jim Plank - CS102 */
/* Implementation of the MasterMind class */

#include <iostream>
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;
}


