// ========================================================================== // board.cpp: Implementation for hangman board // A. Fischer, June 4, 2000 file: board.cpp // Modified by M. Fischer, October 8, 2009 //=========================================================================== #include "board.hpp" // ========================================================================== Board::Board(const char* a, const char* puz) : errcnt(0), found(0), alpha(a, true), errors(a, false), puzzle(puz){ //cerr << "\nConstructing Board. "; } //--------------------------------------------------------- display the board ostream& Board::print( ostream& out ) const { out << "\n\nPuzzle is: " << puzzle << "\n\n"; out << " Letters left-->" << alpha << "\n"; out << " Bad guesses--->" << errors; for (int k = errcnt; k < HANG_MAX; k++) out << " _"; return out << endl; } //----------------------------------------------------------- process a guess Board::status Board::guess(char c) { int where = alpha.find(c); if (where == -1) return NOT_IN_ALPHA; if ( !alpha.mask_slot(where) ) return USED_ALREADY; alpha.mask_slot(where) = false; int matches = puzzle.try_letter(c); if (matches <= 0) { errors.mask_slot(where) = true; errcnt++; return BAD_GUESS; } found += matches; return GOOD_GUESS; } //=========================================================================== //--------------------------------------------- user interaction for one move void Player::move() { char ch; cout << "Guess a letter: "; cin >> ch; cout << "You guessed '" << ch << "'"; switch (guess( ch )) { case NOT_IN_ALPHA: cout << " -- but it's not in the alphabet." << endl; break; case USED_ALREADY: cout << " -- but you guessed it once before." << endl; break; case BAD_GUESS: cout << " -- too bad." << endl; break; case GOOD_GUESS: cout << ". You scored!" << endl; break; } print(cout); } //-------------------------------------------------------------- play a board int Player::play() { print(cout); while (!gameOver()) move(); if (gameWon()) { cout << "Congratulations -- you win!" << endl; return 1; } cout << "Sorry, you lose!" << "\nThe answer is: " << puzzleWord() << endl; return 0; }