首页 文章

Tic-Tac-Toe Win检查功能

提问于
浏览
1

我正在写一个tic tac toe游戏,“编码规则”的一部分是应该有一个'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'.

什么似乎是问题?

1 回答

  • 0

    所以我意识到我没有正确地调用这个函数,也没有给它任何参数 . 这就是我现在正在做的事情

    function [won] = checkwin(tttXArray)
    

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

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

    谢谢你的提示!

相关问题