2013-10-22 22 views
1

我試圖把我的頭圍繞邏輯​​,我想不出做到這一點的最佳方式。2維陣列上的珠光寶石類型邏輯

我有一個2d數組[10] [6] 10是列數,6是行數。我想檢查數組中的3個或更多匹配項。有沒有人知道一個很好的例子或有解決方案的想法?我在網上查看了一些資源,但是我看到的所有資源都很缺乏評論,很難閱讀。

如果行中有3個或更多的並排或3個在列中彼此重疊,則這些項目將創建匹配項。

+0

只是*他們會怎麼匹配?按行,按列,還是按m?n框? – Makoto

+0

他們將能夠匹配的行或列。如果在排中有3個或更多的並排,那麼它會在列中算作一場比賽或3場比賽,這將是一場比賽。 – Dave

回答

1

這是相同的思路@戴夫,也許更容易理解(t是你的二維數組):

for y=1,6 do -- for each row 
    for x=1,10-2 do -- for each possible horizontal triplet 
    if t[x+1][y] == t[x][y] and t[x+2][y] == t[x][y] then 
     -- match 
    end 
    end 
end 

for x=1,10 do -- for each column 
    for y=1,6-2 do -- for each possible vertical triplet 
    if t[x][y+1] == t[x][y] and t[x][y+2] == t[x][y] then 
     -- match 
    end 
    end 
end 

它可能不是最快的算法,但它是最簡單的一個以及其他任何潛在的性能收益都不值得複雜IMO的增加。

編輯:我沒有意識到戴夫是OP :)所以是的,該方法的作品。

+0

這更清潔,我將在我的代碼中使用它。 x和y更有意義。 – Dave

1

我不確定這是否是最好的方式,但這是我的工作。這是Lua代碼

function checkWinningsFunction() 
    --Check x axis for matches 
    for i=1,6 do 
     for n=1,8 do 

      if(reelImages[n][i].value == reelImages[n+1][i].value and reelImages[n+1][i].value == reelImages[n+2][i].value) then 
       --Match 
      end 

     end 
    end 

    --Check y axis for matches 
    for i=1,4 do 
     for n=1,10 do 

      if(reelImages[n][i].value == reelImages[n][i+1].value and reelImages[n][i+1].value == reelImages[n][i+2].value) then 
       --Match 
      end 

     end 
    end 
end