Tic Tac Toe Win Checking Function

I'm writing a tic tac toe game and part of the 'coding rules' is that there should be a 'checkwin' function to see whether a player has won or not. I have defined two variables called 'tttXArray' and 'tttOArray' to see whether one player has gotten three in a row for horizontal, vertical, or diagonal inputs. This is the function with the tttXArray placed as an example:
function [won] = checkwin
%Check to see whether the game has been won or not
% Horizontal
if (tttXArray(1,1) == tttXArray(1,2) && tttXArray(1,1) == tttXArray(1,3))
won = 1;
elseif (tttXArray(2,1) == tttXArray(2,2) && tttXArray(2,1) == tttXArray(2,3))
won = 1;
elseif (tttXArray(3,1) == tttXArray(3,2) && tttXArray(3,1) == tttXArray(3,3))
won = 1;
% Vertical
elseif (tttXArray(1,1) == tttXArray(2,1) && tttXArray(1,1) == tttXArray(3,1))
won = 1;
elseif (tttXArray(1,2) == tttXArray(2,2) && tttXArray(1,2) == tttXArray(3,2))
won = 1;
elseif (tttXArray(1,3) == tttXArray(2,3) && tttXArray(1,3) == tttXArray(3,3))
won = 1;
% Diagonal
elseif (tttXArray(1,1) == tttXArray(2,2) && tttXArray(1,1) == tttXArray(3,3))
won = 1;
elseif (tttXArray(1,3) == tttXArray(2,2) && tttXArray(1,3) == tttXArray(3,1))
won = 1;
end
end
The error I get is:
Undefined function 'tttXArray' for input arguments of type 'double'.
What seems to be the problem?

 采纳的回答

John D'Errico
John D'Errico 2015-10-2
Your function has no arguments. How do you expect it to know what those variables are?

6 个评论

what are the values of tttXArray for each marker? instead of a a long list of if-else statements for the horizontal/vertical wouldn't it be easier to and cleaner to check for the sum of a row and sum of columns? that would leave just 2 if statements for the diagonals which can be simplified as well.
Joseph is right. You can use something like
function won = checkwin(A)
won = any(all(A) | all(A, 2)' | all(diag(A)) | all(fliplr(diag(A))));
So the values of tttXArray come from another function where the player chooses their spot.
function [pXInputRow, pXInputCol] = pickXspot(playerInput)
%This function is to take inputs from Player X
global pXInputRow;
global pXInputCol;
%Set text for Roq/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});
end
So I should take tttXArray as an input argument. However, I get
Undefined function or variable 'pXInputRow'.
Thanks for simplified if/else statement suggestion, definitely much cleaner.
Forgot last line:
tttArray(pXInputRow, pXInputCol) = 1;
No. You should define
function won = checkwin(tttXArray)
and call using
checkwin(tttXArray)
So I realized my rather beginner mistake, I was not calling the function properly nor was I giving it any proper arguments. The checkwin function works good now, time to debug the rest of the code. Thanks Thorsten for the simplified checking algorithm!

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Strategy & Logic 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by