当前位置: 首页 > 知识库问答 >
问题:

Tic-Tac-Toe Win检查功能

谷梁承宣
2023-03-14

我正在写一个井字游戏,“编码规则”的一部分是应该有一个“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是time循环的一部分:

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个答案

申光临
2023-03-14

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

function [won] = checkwin(tttXArray)

我还将所有if/else语句简化如下:

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

感谢您的提示!

 类似资料:
  • 对角线从右到左 在这里,支票中奖者代码结束。

  • 我想这一定是一个简单的修复,但我仍然熟悉编码,所以偶尔我会陷入一些愚蠢的事情(会赶上的,最终哈哈) (我已经实现了所有其他可能获胜的行和列。没有将它们粘贴在这里以使问题更短,但它们都遵循上面的逻辑) 当玩家放置标记时,我调用该函数,一旦满足一个获胜条件,我会打印消息: 但游戏不会中断(我猜会是,因为我在每个条件后都“Rest”)。我的IF里面会发生什么?就像我说的,猜测一定很简单,但现在卡住了。

  • 首先,我是java的初学者,我正在尝试模拟TicTacToe游戏。我想使用游戏树为所有状态创建一个可能的树。树中的每个节点都将代表状态并使用此树来决定下一步要做的事情。我计划按如下方式进行, > 接口类包括表示单个移动所需的信息。 抽象/接口类包括以下方法: a、 返回一个新的状态对象,该对象表示应用该移动后游戏的状态。 B.如果当前状态代表其中一名玩家的胜利,则此游戏的获胜者ID。 c、 返回当

  • 我正在Python中创建一个井字游戏,并正在努力创建一个模块来检测是否有人赢了。我将2件事传入模块、棋盘和一组获胜组合: 我用来检查是否有人获胜的模块。进行4次移动后调用该模块。如果有人赢了,它将返回1;如果有人没有赢,则它将返回-1。

  • 我该怎么做? 下面是我的代码: