You are viewing our Forum Archives. To view or take place in current topics click here.
+rep if you can fix this for me...
Posted:

+rep if you can fix this for me...Posted:

Jordannn23
  • Challenger
Status: Offline
Joined: Jun 22, 201113Year Member
Posts: 199
Reputation Power: 7
Status: Offline
Joined: Jun 22, 201113Year Member
Posts: 199
Reputation Power: 7

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

const char X = 'X';
const char O = 'O';
const char EMPTY = ' ';
const char TIE = 'T';
const char NO_ONE = 'N';

void instructions();
char askYesNo(string question);
int askNumber(string question, int high, int low = 0);
char humanPiece();
char opponent(char piece);
void displayBoard(const vector<char>& board);
char winner(const vector<char>& board);
bool isLegal(const vector<char>& board, int move);
int humanMove(const vector<char>& board, char human);
int computerMove(vector<char> board, char computer);
void announceWinner(char winner, char computer, char human);

int main()
{
   int move;
   const int NUM_SQUARES = 9;
   vector<char> board(NUM_SQUARES, EMPTY);

   instructions();
   char human = humanPiece();
   char computer = opponent(human);
   char turn = X;
   displayBoard(board);

   while (winner(board) == NO_ONE)
   {
      if (turn == human)
      {
         move = humanMove(board, human);
         board[move] = human;
      }
      else
      {
         move = computerMove(board, computer);
         board[move] = computer;
      }
      displayBoard(board);
      turn = opponent(turn);
   }

   announceWinner(winner(board), computer, human);

   cin.get();

   return 0;
}

void instruction()
{
   cout << "Welcome to the ultimate man-machine showdown: Tic-Tac-Toe.\n";
   cout << "--where human brain is pit against silicon processor\n\n";

   cout << "Make your move known by entering a number, 0 - 8. The number\n";
   cout << "correspond to the desired board position, as illustrated:\n\n";

   cout << "      0 | 1 | 2\n";
   cout << "      ---------\n";
   cout << "      3 | 4 | 5\n";
   cout << "      ---------\n";
   cout << "      6 | 7 | 8\n\n";

   cout << "Prepare yourself, human. The battle is about to begin.\n\n";
}

char askYesNo(string question)
{
   char response;
   do
   {
      cout << question << " (y/n): ";
      cin >> response;
   }while (response != 'y' && response != 'n');

   return response;
}

int askNumber(string question, int high, int low)
{
   int number;
   do
   {
      cout << question << " (" << low << " - " << high << "): ";
      cin >> number;
   }while (number > high || number < low);

   return number;
}

char humanPiece()
{
   char go_first = askYesNo("Do you require the first move?");
   if (go_first == 'y')
   {
      cout << "\nThen take the first move. You will need it.\n";
      return X;
   }
   else
   {
      cout << "\nYour bravery will be your undoing... I will go first.\n";
      return 0;
   }
}

char opponent(char piece)
{
   if (piece == X)
   {
      return 0;
   }
   else
   {
      return X;
   }
}

void displayBoard(const vector<char>& board)
{
   cout << "\n\t" << board[0] << " | " << board[1] << " | " << board[2];
   cout << "\n\t" << "--------";
   cout << "\n\t" << board[3] << " | " << board[4] << " | " << board[5];
   cout << "\n\t" << "--------";
   cout << "\n\t" << board[6] << " | " << board[7] << " | " << board[8];
   cout << "\n\n";
}

char winner(const vector<char>& board)
{
   const int WINNING_ROWS[8][3] = { {0, 1, 2},
                            {3, 4, 5},
                            {6, 7, 8},
                            {0, 3, 6},
                            {1, 4, 7},
                            {2, 5, 8},
                            {0, 4, 8},
                            {2, 4, 6} };
   const int TOTAL_ROWS = 8;

   for(int row = 0; row < TOTAL_ROWS; ++row)
   {
      if ( (board[WINNING_ROWS[row][0]] != EMPTY) &&
           (board[WINNING_ROWS[row][0]] == board[WINNING_ROWS[row][1]]) &&
           (board[WINNING_ROWS[row][1]] == board[WINNING_ROWS[row][2]]) )
      {
         return board[WINNING_ROWS[row][0]];
      }
   }

   if(count(board.begin(), board.end(), EMPTY) == 0)
      return TIE;
   return NO_ONE;
}

inline bool isLegal(int move, const vector<char>& board)
{
   return (board[move] == EMPTY);
}

int humanMove(const vector<char>& board, char human)
{
   int move = askNumber("Where will you move?", (board.size() - 1));
   while (!isLegal(move, board))
   {
      cout << "\nThat square is already occupied, foolish human.\n";
      move = askNumber("Where will you move?", (board.size() - 1));
   }
   cout << "Fine...\n";

   return move;
}

int computerMove(vector<char> board, char computer)
{
   unsigned int move = 0;
   bool found = false;

   while (!found && move < board.size())
   {
      if (isLegal(move, board))
      {
         board[move] = computer;
         found = winner(board) == computer;
         board[move] = EMPTY;
      }

      if (!found)
      {
         ++move;
      }
   }
   if (!found)
   {
      move = 0;
      char human = opponent(computer);
      
      while (!found && move < board.size())
      {
         if (isLegal(move, board))
         {
            board[move] = human;
            found = winner(board) == human;
            board[move] = EMPTY;
         }

         if (!found)
         {
            ++move;
         }
      }
   }

   if (!found)
   {
      move = 0;
      unsigned int i = 0;

      const int BEST_MOVES[] = {4, 0, 2, 6, 8, 1, 3, 5, 7};

      while (!found && i <  board.size())
      {
         move = BEST_MOVES[i];
         if (isLegal(move, board))
         {
            found = true;
         }

         ++i;
      }
   }

   cout << "I shall take square number " << move << endl;
   return move;
}

void announceWinner(char winner, char computer, char human)
{
   if (winner == computer)
   {
      cout << winner << "'s won!\n";
      cout << "As I predicted, human, I am triumphant once more -- proof\n";
      cout << "that computers are superior to humans in all regards.\n";
   }

   else if (winner == human)
   {
      cout << winner << "'s won!\n";
      cout << "No, no! It cannot be! Somehow you tricked me, human.\n";
      cout << "But never again! I, the computer, so swear it!\n";
   }

   else
   {
      cout << "It's a tie.\n";
      cout << "You were most lucky, human, and somehow managed to tie me.\n";
      cout << "Celebrate... for this is the best you will ever achieve.\n";
   }
}


and here is what it says in the output box:

1>------ Build started: Project: Tic Tac Toe, Configuration: Debug Win32 ------
1>  Tic Tac Toe.cpp
1>Tic Tac Toe.obj : error LNK2019: unresolved external symbol "void __cdecl instructions(void)" (?instructions@@YAXXZ) referenced in function _main
1>C:\Users\Jordan\Documents\Visual Studio 2010\Projects\Tic Tac Toe\Debug\Tic Tac Toe.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


Thanks in advance!!!
#2. Posted:
Jordannn23
  • Challenger
Status: Offline
Joined: Jun 22, 201113Year Member
Posts: 199
Reputation Power: 7
Status: Offline
Joined: Jun 22, 201113Year Member
Posts: 199
Reputation Power: 7
anyone????????????????????????
#3. Posted:
Cleveland-Brown
  • TTG Senior
Status: Offline
Joined: Feb 13, 201113Year Member
Posts: 1,065
Reputation Power: 40
Status: Offline
Joined: Feb 13, 201113Year Member
Posts: 1,065
Reputation Power: 40
You could of missed a semicolon or you have used incorrect syntax.
#4. Posted:
ODST_107
  • Resident Elite
Status: Offline
Joined: Oct 07, 201014Year Member
Posts: 247
Reputation Power: 9
Status: Offline
Joined: Oct 07, 201014Year Member
Posts: 247
Reputation Power: 9
I may be wrong but I think you're declaring your functions improperly. The error you are getting is because it's trying to reference 'instructions()' as an outside symbol. If you get rid of all your function declarations before the main() class and let them declare themselves after the main() function your program will probably compile right
#5. Posted:
Experiment5X
  • TTG Senior
Status: Offline
Joined: Aug 14, 200915Year Member
Posts: 1,291
Reputation Power: 65
Status: Offline
Joined: Aug 14, 200915Year Member
Posts: 1,291
Reputation Power: 65
You never made the function "instructions", you only prototyped it.
#6. Posted:
RDCA
  • TTG Contender
Status: Offline
Joined: Jul 12, 201014Year Member
Posts: 3,612
Reputation Power: 173
Status: Offline
Joined: Jul 12, 201014Year Member
Posts: 3,612
Reputation Power: 173
Experiment5X wrote You never made the function "instructions", you only prototyped it.


Actually he did, but he forgot an S lol. He put Void instruction() {

}

OP I think you can fix it from what I said above.
#7. Posted:
Imp
  • Retired Staff
Status: Offline
Joined: Jan 01, 201113Year Member
Posts: 1,957
Reputation Power: 401
Status: Offline
Joined: Jan 01, 201113Year Member
Posts: 1,957
Reputation Power: 401
RDCA wrote
Experiment5X wrote You never made the function "instructions", you only prototyped it.


Actually he did, but he forgot an S lol. He put Void instruction() {

}

OP I think you can fix it from what I said above.


I thought i recognised this code, he posted it ages ago and i gave him the same solution :facepalm:

Forums/t=3107780/i-need-help-with...rt=10.html
Jump to:
You are viewing our Forum Archives. To view or take place in current topics click here.