1

我正在写一个井字游戏,“编码规则”的一部分是应该有一个“checkwin”功能来查看玩家是否赢了。我定义了两个变量,称为“tttXArray”和“tttOArray”,以查看一个玩家是否连续获得三个水平、垂直或对角线输入。这是以 tttXArray 为例的函数:

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

Checkwin 是 while 循环的一部分:

while ~checkwin

    playerXTurn = 1;
    playerOTurn = 1;
    %Let Player X go first
    while playerXTurn
        pickXSpot %Prompt  Player
        disp('Test1')
        checktaken %Check taken location
        %If place is taken, prompt player to input again
        if checktaken == 1
            pickXspot
        else
            tttArray(pXInputRow, pXInputCol) = 1; %Set the position as taken
            tttXOArray(pXInputRow, pXInputCol) = 1; %Set the position for X(1)
            plot(pXInputRow, pXInputCol, 'x')
            hold on
            playerXTurn = 0;
        end
    end

    %Check if theres a win
    checkwin

    %Otherwise continue to Player O's turn
    while playerOTurn == 1
        pickOSpot %Prompt Player
        checktaken
        %If place is taken, prompt player to input again
        if checktaken == 1
            pickOspot
        else
            tttArray(pOInputRow, pOInputCol) = 1;%Set the position as taken
            tttXOArray(pOInputRow, pOInputCol) = 0;%Set the position for O(0)
            plot(pOInputRow, pOInputCol,'o')
            hold on
        end
    end  

    %Check win again
    checkwin
end

我得到的错误是:

Undefined function 'tttXArray' for input arguments of type 'double'.

似乎是什么问题?

4

1 回答 1

0

所以我意识到我没有正确调用该函数,也没有给它任何参数。这是我现在正在做的

function [won] = checkwin(tttXArray)

我还简化了所有 if/else 语句,如下所示:

won = any(all(tttXArray) | all(tttXArray, 2)' | all(diag(tttXArray)) | all(fliplr(diag(tttXArray))));

感谢您的提示!

于 2015-10-03T23:00:42.567 回答