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?

 Respuesta aceptada

John D'Errico
John D'Errico el 2 de Oct. de 2015

1 voto

Your function has no arguments. How do you expect it to know what those variables are?

6 comentarios

Joseph Cheng
Joseph Cheng el 2 de Oct. de 2015
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.
Thorsten
Thorsten el 2 de Oct. de 2015
Editada: Thorsten el 2 de Oct. de 2015
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.
Anas Abou Allaban
Anas Abou Allaban el 2 de Oct. de 2015
Editada: Anas Abou Allaban el 2 de Oct. de 2015
Forgot last line:
tttArray(pXInputRow, pXInputCol) = 1;
No. You should define
function won = checkwin(tttXArray)
and call using
checkwin(tttXArray)
Anas Abou Allaban
Anas Abou Allaban el 3 de Oct. de 2015
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!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Strategy & Logic en Centro de ayuda y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by