2012-03-04 34 views
1

你好,我正在自己的tic-tac-toe項目上工作。我不參加編程課,所以它不做功課。tictactoe和複製一個數組

我已經寫了相當多的代碼的其餘部分,現在正在AI上工作。

對於AI我打算拿它的一個副本(2維數組),並檢查它是否可以在移動中獲勝,如果玩家可以,那麼如果它可以在2步移動,那麼球員等等,還有一些其他的東西我會包括在內。所以爲了做到這一點,我想我需要傳遞數組的副本,但我不知道如何複製數組。所以這基本上是我的問題,你如何複製一個數組?

+0

是否有您所選擇的陣列超前'的std ::矢量一個原因>'? – hmjd 2012-03-04 22:16:04

+0

嗯,我是新來編程,我還沒有進入矢量,但我聽說過他們。你會推薦他們通過數組? – 2012-03-04 22:18:47

+1

@hmjd:由於董事會具有固定的,靜態已知的大小,動態數據結構似乎不合適。 – 2012-03-04 22:20:41

回答

4

你可以用數組爲一類,在這種情況下,它會被默認生成的拷貝構造函數和賦值操作符自動複製:

enum EField { empty, cross, oh }; 

typedef std::array<EField, 9> TTTBoard; // C++11, or use std::tr1::array 

或手動做到這一點:

struct TTTBoard 
{ 
    EField data[9]; // or even EField data[3][3] 
}; 

現在你可以隨意複製:

TTTBoard b; 
TTTBoard c = b; 
+0

我得到了struct的最後一部分,但我不太清楚枚舉是什麼或typedef。 – 2012-03-04 22:25:20

+0

+1至於關於'std :: vector'的問題,我只關心複製的簡易性。 – hmjd 2012-03-04 22:25:57

+0

@PatrickKennedy:一旦你花更多的時間閱讀你最喜歡的C++書籍,你肯定會得到這些問題的答案! – 2012-03-04 22:26:11

3

一個絕招,你可以沒有conce使用陣列複製自己創建一個類型爲您的3x3板:

struct TicTac{ 
    int board[3][3]; 
} 

而只是將其作爲參數傳遞給您的函數。

+0

嗯好吧,它會更容易複製? – 2012-03-04 22:23:08

+0

@PatrickKennedy這種方式複製是在Kerrek提示時自動完成的。 – 2012-03-04 22:24:00

+0

啊我看到了,謝謝澄清。所以我只是通過對象,它會被自動複製。但是,這是否意味着我不想要副本時我必須通過它的地址? – 2012-03-04 22:27:25

1

你有什麼樣的陣列? 我假設你有普通的舊學校整數數組。

當您有: int Array [3] [3];

然後將其內容複製到另一個數組中,您將不得不循環每個元素。 這是可以做到這樣的:

int MyArray[3][3]; 
int CopyHere[3][3]; 
for(int i = 0; i < sizeof(MyArray); ++i) 
{ 
    for(int j = 0; j < sizeof(MyArray[i]); ++j) 
    { 
     CopyHere[i][j] = MyArray[i][j]; 
    } 
} 

我有地方老井字遊戲劇本,讓我再找找吧。

編輯:找到它:

http://pastebin.com/Xp5iT2b0

下面是相關的主題:

http://forum.sa-mp.com/showthread.php?t=259549

+0

我有一個char數組 – 2012-03-04 22:31:31

+0

在這種情況下代碼是一樣的:) – 2012-03-04 22:41:01