2013-11-29 260 views
0

我對Matlab非常陌生,正在創建一個簡單的Tic Tac Toe遊戲,用戶可以在該遊戲中與計算機對戰。我在圖形用戶界面中有3x3按鈕,對於每個按鈕的回調,我已經設置好了,所以如果方塊是空的,就會出現一個'X',並在相應的點上設置一個'1'值爲一個3x3零點矩陣。在Matlab中創建井字遊戲

我想在每次回調之後放置一個'player2'函數,以便計算機可以在矩陣中找到任意一個零點,隨機選擇一個並給我座標,然後將其轉換爲相應的按鈕在那裏放置一個'O'。

矩陣是handles.move = zeros(3,3)。

我知道我可能需要使用'if'語句,'[i,j] = find(move == 0);'但我不知道使用什麼隨機命令從零中選取將會使我回到座標的零。有什麼建議麼?

回答

2

調用find(move==0)將返回move中等於零的元素的線性索引。例如:

move = 

    1  0  1 
    0  0  0 
    0  1  0 

>>indices = find(move==0) 

indices = 

2 
3 
4 
5 
8 
9 

你可以把這個結果和使用隨機打亂指數...

>>scrambled = indices(randperm(length(indices))) 

scrambled = 

9 
2 
8 
4 
3 
5 

然後選擇第一個元素,scrambled(1),作爲計算機的下一個選擇。可能有幾種方法可以解決這個問題。關於這一點的好處在於,它可以在遊戲結束時被調用以檢索計算機的下一步行動。

編輯:

computerMove = indices(randperm(length(indices),1)); 

這將返回自動丹尼斯指出的第一個元素。

+0

略有增強:你可以使用'randperm(length(indices),1)'直接獲得1個元素。 –