0

我正在使用 Flixel 开发一款三消式益智游戏,因此我正在检查每一行和每一列以查看在任何给定时间是否有匹配。但是,我有 6 个不同的部分(截至目前)处于活动状态,每个部分都由一个整数标识。鉴于此,我可以通过执行以下操作来检查每一件作品:

public function matchingCheck():void
    {
        if (piecesArray[0][1] == 1 && piecesArray[1][1] == 1 && piecesArray[2][1] == 1) {
            FlxG.log("Yay!");
        }
    }

然而,这相当笨拙,并且基本上会导致我喜欢的太多重复。

至少,我希望能够检查这些数组中的值是否彼此相等,而不必指定它是哪个值。在最好的情况下,我希望能够检查一整行是否有三个(或更多)相邻的部分,但我会满足于手动完成这部分。

谢谢你的帮助!


编辑:没关系,我的编辑不起作用。它只是检查 if piecesArray[2][1] == 1,这让我变成了一只悲伤的熊猫。


编辑 2:我在下面选择了正确的答案 - 这不完全是我使用的,但它确实让我开始了。谢谢启示录0n3!

4

2 回答 2

1

您可以通过使用另一个函数来稍微减少该代码

private function checkValid( arrayOfItemsToCheck:Array, value:* ):Boolean {
    for ( var i:Number = 0; i < arrayOfItemsToCheck.length; i++ ) {
        if ( arrayOfItemsToCheck[i] != value ) {
            return false;
        }
    }
    return true;
}

然后,您只需在 if 语句中执行此操作:

if ( checkValid( [ piecesArray[0][1], piecesArray[1][1], piecesArray[2][1] ], 1 ) ) {
            FlxG.log("Yay!");
}

不过,这确实假设所有项目都必须等于 1。它仍然有很多代码,但它为每次检查删去了一组“= 1 &&”。

于 2012-11-01T20:01:48.080 回答
0

像这样的东西怎么样,它会告诉你匹配是否存在以及匹配是什么:

public function checkForMatch():void{
    var rows:int = piecesArray.length;
    for(var i:int=0; i<rows; i++){
        var match:int = checkRow(piecesArray[i]);
        if(match > -1) {
            FlxG.log("Yay you matched " + match);
        }
    }
}

private function ckeckRow(row:Array):int{
    if(row[0] == row[1] == row[2]){
        return row[0];
    }
    return -1;
}
于 2012-11-01T20:06:21.427 回答