CSCI 132 Data Structures--Spring 2014

    Home | | Syllabus | | Assignments | | Lecture Notes

    Laboratory 6 Solutions

    Solution to eight.cc code:

    /*******************************************************************
     * Name: Brenda Student
     * Date: 3/19/14
     * Course: CSCI 132 Section 01
     * Assignment: Lab 6
     * Instructor: Royden
     * Program: eight.cc
     * Purpose: A program that plays the game of eight, using look-ahead
     * strategy to choose the moves for the computer.
     ***************************************************************************/
    
    #include <iostream>
    #include "board.h"
    
    using namespace std;
    
    int look_ahead(Board &, int, int &);
    
    int main(void) {
      Board gameBoard;                  //Board for playing game
      int user_move, computer_move;     //Moves made by computer or user
      int depth = 8;                    //depth of look ahead by computer
      gameBoard.instructions();
      while(!gameBoard.done()) {        //Play until the game is finished
        cout << "Please enter a number:  ";
        cin >> user_move;
        while (!gameBoard.is_legal(user_move)) {    //Until a legal move is entered.
          cout << "That move is not legal, choose another number: ";
          cin >> user_move;
        } //end while
        cout << "You have chosen the number " << user_move << "." << endl;
        gameBoard.play(user_move);      //Make user's move
        cout << "The total score is " << gameBoard.getTotal() << "."
    	 << endl << endl;
        if (!gameBoard.done()) {
          look_ahead(gameBoard, depth, computer_move);    //Choose computer's move
          cout << "The computer chooses the number " << computer_move << "."
    	   << endl;
          gameBoard.play(computer_move);
          cout << "The total score is " << gameBoard.getTotal() << "."
    	   << endl << endl;
        } //end if
      } //end while
      cout << "The game is over. ";
      if (gameBoard.the_winner() == 1) {   //Ties are not possible in this game
        cout << "You win!" << endl;
      } else {
        cout << "The computer wins!" << endl;
      } //end if-else
      return 0;
    } //end main
    
    int look_ahead(Board &game, int depth, int &recommended) {
    /*Look ahead to end of game or number of levels given by depth 
      to choose next move.
      Pre: game has been established and depth >=0
      Post: value of best option is returned, best move is stored in recommended */
      if (game.done() || depth == 0 ) {
        return game.evaluate();
      } else {
        int value, bestValue = game.worst_case();   //value for look-ahead
                                                    // and current best value
        for (int try_it = 1; try_it <= 3; try_it++ ) {
          if (game.is_legal(try_it)) {
    	    int reply;                  //recommended move for next look-ahead
    	    Board temp_board = game;    //copy of playing board to try out moves
    	    temp_board.play(try_it);
                //Look ahead from tested move
    	    value = look_ahead(temp_board, depth - 1, reply);  
    	    if (game.better(value, bestValue)) {   //Save value if better
    	      bestValue = value;
    	      recommended = try_it;
    	    } // end if
          } //end if is_legal
        } //end for
        return bestValue;
      }	 //end if- else    
    } //end look_ahead
    
    
    

    Home | | Syllabus | | Assignments | | Lecture Notes