2013-04-03 23 views
-1

我試圖創建一個簡單的tic tac腳趾程序作爲一些作業的一部分,但難以檢查遊戲是否贏了。一旦我啓動程序並輸入一個數字,它立即說「玩家2贏了!」我看不出我做錯了什麼。麻煩通過數據從if和if其他

#include "stdafx.h" 
#include "tictactoe.h" 

using namespace std; 

void clearBoard(char gameBoard[]) 
{ 
    for (int i = 0; i < board_size; i++) 
    { 
     gameBoard[i] = free_char; 
    } 
} 

void printBoard(char gameBoard[]) 
{ 
    system("cls"); 

    //for (int i = 0; i < board_width; i++) 
    //{ 
     //cout << gameBoard[i] + 1 << " " << gameBoard[i] + 1 << " " << gameBoard[i] + 1 << endl; 
    //} 

    cout << gameBoard[0] << " " << gameBoard[1] << " " << gameBoard[2] << endl; 
    cout << gameBoard[3] << " " << gameBoard[4] << " " << gameBoard[5] << endl; 
    cout << gameBoard[6] << " " << gameBoard[7] << " " << gameBoard[8] << endl; 
} 

int askMove(int player) 
{ 
    cout << "Player " << player << ", Select a square [1-9]: "; 
    cin >> choice; 

    return 0; 
} 

bool verifyMakeMove(char gameBoard[], int move, int player) 
{ 
    if (player == 1) 
    { 
     mark = p1_char; 
    } 
    else 
    { 
     mark = p2_char; 
    } 

    if (move < 1 || move > 9) 
    { 
     cout << "You did not enter a number between 1 and 9. Try again." << endl; 
    } 

    if (move == 1 && gameBoard[0] == free_char) 
    { 
     gameBoard[0] = mark; 
    } 
    else if (move == 2 && gameBoard[1] == free_char) 
    { 
     gameBoard[1] = mark; 
    } 
    else if (move == 3 && gameBoard[2] == free_char) 
    { 
     gameBoard[2] = mark; 
    } 
    else if (move == 4 && gameBoard[3] == free_char) 
    { 
     gameBoard[3] = mark; 
    } 
    else if (move == 5 && gameBoard[4] == free_char) 
    { 
     gameBoard[4] = mark; 
    } 
    else if (move == 6 && gameBoard[5] == free_char) 
    { 
     gameBoard[5] = mark; 
    } 
    else if (move == 7 && gameBoard[6] == free_char) 
    { 
     gameBoard[6] = mark; 
    } 
    else if (move == 8 && gameBoard[7] == free_char) 
    { 
     gameBoard[7] = mark; 
    } 
    else if (move == 9 && gameBoard[8] == free_char) 
    { 
     gameBoard[8] = mark; 
    } 
    else 
    { 
     cout << "That move cannot be made. Try again." << endl; 
    } 

    return 0; 
} 

int checkEndGame(char gameBoard[]) 
{ 
    if (gameBoard[0] == gameBoard[1] && gameBoard[1] == gameBoard[2]) 
    { 
     return 1; 
    } 
    else if (gameBoard[3] == gameBoard[4] && gameBoard[4] == gameBoard[5]) 
    { 
     return 1; 
    } 
    else if (gameBoard[6] == gameBoard[7] && gameBoard[7] == gameBoard[8]) 
    { 
     return 1; 
    } 
    else if (gameBoard[0] == gameBoard[3] && gameBoard[3] == gameBoard[6]) 
    { 
     return 1; 
    } 
    else if (gameBoard[1] == gameBoard[4] && gameBoard[4] == gameBoard[7]) 
    { 
     return 1; 
    } 
    else if (gameBoard[2] == gameBoard[5] && gameBoard[5] == gameBoard[8]) 
    { 
     return 1; 
    } 
    else if (gameBoard[0] == gameBoard[4] && gameBoard[4] == gameBoard[8]) 
    { 
     return 1; 
    } 
    else if (gameBoard[2] == gameBoard[4] && gameBoard[4] == gameBoard[6]) 
    { 
     return 1; 
    } 
    else if (gameBoard[0] != free_char && gameBoard[1] != free_char && gameBoard[2] != free_char && gameBoard[3] != free_char && gameBoard[4] != free_char && gameBoard[5] != free_char && gameBoard[6] != free_char && gameBoard[7] != free_char && gameBoard[8] != free_char) 
    { 
     return -1; 
    } 
    else 
    { 
     return 0; 
    } 
} 

int playGame() 
{ 
    char gameBoard[10]; 

    int player = 1; 

    int winner; 

    clearBoard(gameBoard); 

    do 
    { 
    printBoard(gameBoard); 

    askMove(player); 

    verifyMakeMove(gameBoard, choice, player); 

    checkEndGame(gameBoard); 

    if (player == 1) 
    { 
     player = 2; 
    } 
    else 
    { 
     player = 1; 
    } 
    } while (checkEndGame(gameBoard) == 0); 

    if (checkEndGame(gameBoard) == 1) 
    { 
     cout << "Player " << player << " wins!" << endl; 
    } 
    else 
    { 
     cout << "It's a draw!" << endl; 
    } 

    return 0; 
} 

int main() 
{ 
    playGame(); 

    return 0; 
} 
+5

你用調試器走過了代碼嗎? –

+0

我不是100%確定你的意思。我使用VS 2012並通過ctrl + f5運行調試器。 – cvandal

+0

雖然看上去並不確定,但它可能認爲這個遊戲已經被'free_char'贏得了。即你不檢查是否有一行「標記」,而是一行東西。當然,這個板子開始充滿'free_char's。 – BoBTFish

回答

2

在比賽開始時,棋盤是空白的。所有九個方格都具有相同的值,所以它們都是相等的。特別是,某一排的所有三個方格都是平等的,所以根據你的邏輯,有人贏得了比賽。你需要添加額外的邏輯來避免這個結論。

1

顯而易見的問題是,在checkEndGame中,當您查找一行三行時,沒有檢查空方塊。測試應該更像

if (gameBoard[0] != 0 && gameBoard[0] == gameBoard[1] && gameBoard[1] == gameBoard[2]) 
    ^^^^^^^^^^^^^^^^^^^^ 

可能還有其他問題,您可以通過使用調試器逐步執行代碼來找到其他問題。