2011-06-30 14 views
0

こんにちは私はコンソールでチックタックつま先ゲームを作っています。 私のコードで何が問題になっていますか? Iコンソールとしてリンカの設定をしました。C++エラーLNK2019とエラーLNK1120

コード:の

// Tic tac Toe 
// Plays a tic tac toe game against a npc 

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

using namespace std; 

// global constants 
const char X = 'X'; 
const char O = '0'; 
const char EMPTY = ' '; 
const char TIE = 'T'; 
const char NO_ONE = 'N'; 

//function prototypes 
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(const 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); 

    return 0; 
} 

void instructions() 
{ 
    cout << "Welcome to the ultimate man-machine showdown: Tic Tac Toe.\n"; 
    cout << "--I'm gonna cut you in half like a knife and butter like a lightsaber and steel!!!\n\n"; 
    cout << "make your move now by entering a number, 0-8. The number\n"; 
    cout << "corresponds 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 << "\n Then take the first move. You will need it.\n"; 
     return X; 
    } 
    else 
    { 
     cout << "Then I will make the first move.\n"; 

     return 0; 
    } 

} 

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

void displayBoard(const vector<char>& board) 
{ 
    cout << "\n\t" << board[0] << "|" << board[1] << "|" << board[3]; 
    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) 
{ 
    // all possible winning rows 
    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; 
    // if any winning row has three values wich are the same(and not EMPTY) 
    // then we have a winner 
    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]]; 
     } 


    } 

    //since nobody has won check for a tie (no empty squares left) 
    if (count(board.begin(), board.end(), EMPTY) == 0) 
    { 
     return TIE; 
    } 

    //since nobody has won and it isn't a tie, the game ain't over 
    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 << "\n That square is already occupied, foolish human.\n" << endl; 
     int 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; 

    //if the pc can win on next move I will take that move 
    while (!found && move < board.size()) 
    { 
     if (isLegal (move, board)) 
     { 
      board[move] = computer; 
      found = winner(board) == computer; 
      board[move] = EMPTY; 
     } 

     if (!found) 
     { 
      ++move; 
     } 
    } 
    // otherwise if the human can win with the next move that's the move I will make 
    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] = human; 
      } 

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

    // otherwise i'll be moving to the next best square 

    if (!found) 
    { 
     move = 0; 
     unsigned int i = 0; 
     const int BEST_MOVES[] = {4,0,2,6,8,1.3,5,7}; 
     // pick best open square 
     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 << "has won!\n"; 
     cout << "As I predicted human, I am triumphant once more!\n"; 
    } 

    else if (winner == human) 
    { 
     cout << winner << "has won" << endl; 
     cout << "no, no it cannot be! Somehow you tricked me Human!\n"; 
    } 

    else 
    { 
     cout << "It's just a tie, I'll beat you next time! \n"; 
     cout << "You cannot beat me though!"; 
    } 

} 
+0

エラーメッセージは何ですか? – Mahesh

答えて

1

前方宣言 -

int computerMove(const vector<char>& board, char computer); 

は、実際の実装とは異なります。 (const部分が見つかりません)

int computerMove(vector<char> board, char computer) 
+1

ありがとう、そんなに。 – Blackelfwolf

関連する問題