2012-11-01 45 views
0

我正在使用Flixel開發一款匹配3風格的益智遊戲,因此我正在檢查每一行和每列以查看在任何給定時間是否有匹配。但是,我有6個不同的部分(如現在)是活動的,每個部分由一個整數標識。鑑於這種情況,我可以檢查,對每一個單件,通過做這樣的事情:使用if語句在actionscript中檢查相同的值?

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!

回答

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 & &」。

+0

豈不'checkValid'功能是作爲我在帖子編輯代碼基本上是相同的,我把他們都等於1?不要試圖聽起來粗魯,只是想知道他們是否實現了同樣的目標。 :) – JonLim

+0

它實現了同樣的事情,當然。然而,它更具可擴展性。你可以使用該函數來檢查這樣的事情,並會刪除大量可重複的代碼。我也知道有些人不喜歡這種特殊形式的檢查(這是一個偏好問題,但有些人不喜歡每條線有多於一個,包括我自己在內)。只是你知道,我在編輯之後少了90秒就發表了我的評論。直到我發佈後,我纔看到它。 –

+0

啊,別擔心!是的,這是有道理的。謝謝,將不得不對此進行試驗和思考。 – JonLim

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; 
}