2016-06-28 80 views
-2

截圖說明了這一切,我使用的字符已正確放入數組中。但是,其他一些隨機字符也會插入到數組中。我很困惑!Tic Tac Toe陣列錯誤字符

main.cpp中:

#include "Players.h" 
#include "GameLayout.h" 
#include "Game.h" 
#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    char gameBoard [3][3]; 
    cout << "**** Welcome to Leviathan's first TicTacToe Game! ****\n\n"; 
    Players playersObject; 
    playersObject.getPlayersNames(); 
    playersObject.printPlayersNames(); 
    GameLayout gameObject; 
    gameObject.printLayout(); 
    Game gamestartObject; 
    gamestartObject.gameStart(gameBoard); 
} 

game.cpp:

#include "Players.h" 
#include "GameLayout.h" 
#include "Game.h" 
#include <iostream> 
#include <string> 

using namespace std; 

void Game::gameStart(char board[3][3]) 
{ 
    char player1char,player2char; 
    size_t i,j; 
    cout << "Enter player 1 character :"; 
    cin >> player1char; 
    cout << "Enter player 2 character :"; 
    cin >> player2char; 
    int row,column; 
    bool isDone = false; 
    while(isDone == false) 
    { 
     cout << "Player 1->choose row"; 
     cin >> row; 
     cout << "Player 1->choose column"; 
     cin >> column; 
     board[row-1][column-1] = player1char; 
     cout << "Player 2->choose row"; 
     cin >> row; 
     cout << "Player 2->choose column"; 
     cin >> column; 
     board[row-1][column-1] = player2char; 
     GameLayout layout; 
     cout << " |1||2||3|" <<endl; 
     for(i=0; i<3; i++) 
      { 
       cout << i+1 << "|"; 
       for(j=0; j<3; j++) 
       { 
        cout <<" "<<board[i][j] << " " ; 
       } 
       cout << endl; 
      } 
    } 
} 

Players.cpp:

#include "Players.h" 
#include "GameLayout.h" 
#include "Game.h" 
#include <iostream> 
#include <string> 

using namespace std; 


void Players::getPlayersNames() 
{ 
    string p1,p2; 
    cout << "Enter player 1 name : "; 
    cin >> p1; 
    cout << "\nEnter player 2 name : "; 
    cin >> p2; 
    _player1Name = p1; 
    _player2Name = p2; 
} 

void Players::printPlayersNames() 
{ 
    cout << "Alright " << _player1Name << " and " << _player2Name <<", the game has begun!\n\n"; 
} 

GameLayout.cpp:

#include "Players.h" 
#include "GameLayout.h" 
#include "Game.h" 
#include <iostream> 
#include <string> 

using namespace std; 
void GameLayout::printLayout() 
{ 
    size_t i,j; 
    char board[3][3]; 
    for(i=0; i<3; i++) 
    { 
     for(j=0; j<3; j++) 
     { 
      board[i][j] = '.'; 
     } 
    } 
    cout << " |1||2||3|" <<endl; 
    for(i=0; i<3; i++) 
    { 
     cout << i+1 << "|"; 
     for(j=0; j<3; j++) 
     { 
      cout <<" "<<board[i][j] << " " ; 
     } 
     cout << endl; 
    } 
} 

Game.h:

#ifndef GAME_H 
#define GAME_H 


class Game 
{ 
    public: 
     void gameStart(char board[3][3]); 
    private: 
}; 

#endif // GAME_H 

GameLayout:

#ifndef GAMELAYOUT_H 
#define GAMELAYOUT_H 


class GameLayout 
{ 
    public: 
     void printLayout(); 
    private: 
}; 

#endif // GAMELAYOUT_H 

Players.h:

#ifndef PLAYERS_H 
#define PLAYERS_H 
#include <string> 


class Players 
{ 
    public: 
     void getPlayersNames(); 
     void printPlayersNames(); 
    private: 
     std::string _player1Name; 
     std::string _player2Name; 
}; 

#endif // PLAYERS_H 
+5

請調試它,然後自己刪除所有的代碼,並把僅有[MCVE]因此獲得** **明確爲讀者_where_和_what_是錯誤 –

+0

@ FirstStep對不起,我會在下次試試! – Leviathan

回答

2

本地函數中的非靜態變量,像例如gameBoard,未初始化。您需要明確初始化它,否則其內容將爲不確定並且讀取它的值將導致未定義的行爲

你可以簡單地做它像

char gameBoard [3][3] = { ' ' };