0

私はFlixelを使用したマッチ3スタイルのパズルゲームに取り組んでいるので、各行と列をチェックして、いつでも一致するものがあるかどうかを確認しています。ただし、アクティブな6つの異なるピース(現在)があり、各ピースは整数で識別されます。それを考えると、私は次のようなことをすることによって、すべてのピースについてチェックすることができます:

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

ただし、これはかなり扱いにくく、基本的に私の好みにはあまりにも多くの繰り返しを引き起こします。

少なくとも、これらの配列の値が互いに等しいかどうかを、どの値であるかを指定しなくても確認できるようにしたいと思います。せいぜい、3つ(またはそれ以上)の隣接する部分について行全体をチェックできるようにしたいと思いますが、その部分を手動で行うことに決めます。

ご協力いただきありがとうございます!


編集:気にしないでください、私の編集は機能しませんでした。かどうかをチェックしていただけでpiecesArray[2][1] == 1、悲しいパンダになりました。


編集2:私は以下の正しい答えを選択しました-それは私が使用したものとは正確には異なりますが、それは間違いなく私を始めさせました。Apocalyptic0n3に感謝します!

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&&」のセットを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 に答える