我正在使用Flixel开发一个match-3风格的益智游戏,因此我正在检查每一行和每列,以确定在任何给定时间是否匹配。但是,我有6个不同的部分(截至目前)是活动的,每个部分由整数标识。鉴于此,我可以通过这样做来检查每一件作品:
public function matchingCheck():void
{
if (piecesArray[0][1] == 1 && piecesArray[1][1] == 1 && piecesArray[2][1] == 1) {
FlxG.log("Yay!");
}
}
然而,这是相当笨拙的,基本上会导致我的喜好重复过多。
至少,我希望能够检查这些数组中的值是否彼此相等,而不必指定它是哪个值。在最好的情况下,我希望能够检查整个行的三个(或更多)相邻的部分,但我会满足于手动执行该部分。
感谢您的帮助!
编辑:没关系,我的编辑没有用。它只是检查是否piecesArray[2][1] == 1
,这让我成为一只悲伤的熊猫。
编辑2:我在下面选择了正确的答案 - 这不完全是我使用过的,但它确实让我开始了。谢谢Apocalyptic0n3!
答案 0 :(得分: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&amp;&amp;”每张支票。
答案 1 :(得分: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;
}