2015-10-04 46 views
1

我試圖做一個小函數來檢查一個點是否在Tic Tac Toe板上被採用。我創建了一個名爲tttArray的零數組,當每個點被填充時,它的位置變爲1.因此,我首先從下面的函數獲取玩家的輸入。檢查Tic Tac Toe板上的位置Matlab

function [pXInputRow, pXInputCol] = pickXspot(playerInput) 
%This function is to take inputs from Player X 
pXInputRow = 0; 
pXInputCol = 0; 
%Set text for Row/Col Prompt 
prompt = {'Row (1,2, or 3)', '(Col (1, 2, or 3)'}; 
name = 'Player X Turn'; 
%Show prompt to input values 
playerInput = inputdlg(prompt, name); 
pXInputRow = str2num(playerInput{2}); 
pXInputCol = str2num(playerInput{1}); 
tttArray(pXInputRow, pXInputCol) = 1; 
end 

然後使用下面的函數來查看該點是否被採用。

function [spotTaken] = checktaken(tttArray) 
%Function used to check if spot is taken 
%Setup Error Messages 
errorMessage = 'This spot is taken, please choose another spot'; 
errorMessageTitle = 'Spot Taken'; 
if tttArray(pXInputRow, pXInputCol) || tttArray(pOInputRow, pOInputCol) == 1 
    msgbox(errorMessage, errorMessageTitle) 
    spotTaken = 1; 
end 
end 

但是,我在運行並在提示對話框中放置行/列後不斷收到以下錯誤。有什麼建議麼?

Not enough input arguments. 
Error in checktaken (line 8) 
if tttArray(pXInputRow, pXInputCol) || tttArray(pOInputRow, pOInputCol) == 1 
+0

http://stackoverflow.com/questions/32980638/tic-tac-toe-with-a-win-and-taken- check-matlab解決了這個問題... –

回答

0

幾個問題。

您提供的tttArray作爲輸入參數到您的checkTaken功能的調用參數:

function [spotTaken] = checktaken(tttArray) 

,但你似乎並沒有提供的行和列參數pXInputRow,pXInputCol或pOInputRow ,pOInputCol作爲參數。

所以,當你調用

if tttArray(pXInputRow, pXInputCol) || tttArray(pOInputRow, pOInputCol) == 1 

這些參數是不確定的,您需要提供這些座標作爲參數傳遞給你的checkTaken功能。

你可以做的蠻力方法

function [spotTaken] = checktaken(tttArray, pXInputRow, pXInputCol, pOInputRow, pOInputCol) 

,或者你可以做一些更優雅喜歡把座標的數組。

另一個問題是,如果你想檢查數組元素是否等於1,你的if語句語法是不正確的。

有效

你有

如果|| b == 1

但這可能不是你想要的。硒Matlab的文檔上operator precedence

相反,你可能想

如果(A == 1)|| (B == 1)

所以你的if語句應該是

if (tttArray(pXInputRow, pXInputCol) ==1) || (tttArray(pOInputRow, pOInputCol) == 1) 
+0

出於某種原因,Matlab仍然說這個功能需要更多的輸入....我不知道我還需要現在放什麼?但是,我確實修復了語法錯誤,很好,謝謝。 –