2014-04-03 126 views
0

我試圖做一個遊戲,我有一個二維數組檢查二維數組相同的價值觀

因此,它是這樣的:

Grid[x][y] 

讓假裝這些值都在上面:

Column 1 Column 2 Column 3 Column 4 Column 5 
1  2  5  2  5 
2  2  3  1  1 
1  4  3  4  5 
1  3  3  3  5 <-- match this row 
3  5  3  4  5 
2  4  3  4  5 
2  4  4  4  5 

在中間(索引4),我想檢查是否至少有3次相同的數字,如果有4次相同或甚至是5的話。

你如何檢查這個?這將是一個很好的方式找到相同的,並刪除那些都是一樣的......我堅持要弄清楚邏輯做出這樣的事情

這是我的嘗試:

grid = {} 
for x = 1, 5 do 
    grid[x] = {finish = false} 
    for y = 1, 7 do 
    grid[x][y] = {key= math.random(1,4)} 
    end 
end 

function check(t) 
    local tmpArray = {} 
    local object 
    for i = 1,5 do 
    object = t[i][1].key 
    if object == t[i+1][1].key then 
     table.insert(tmpArray, object) 
    else 
     break 
    end 
    end 
end 

print_r(grid) 
check(grid) 
print_r(grid) 

其中print_r打印電網:

function print_r (t) 
    local print_r_cache={} 
    local function sub_print_r(t,indent) 
     if (print_r_cache[tostring(t)]) then 
      print(indent.."*"..tostring(t)) 
     else 
      print_r_cache[tostring(t)]=true 
      if (type(t)=="table") then 
       for pos,val in pairs(t) do 
        if (type(val)=="table") then 
         print(indent.."["..pos.."] => "..tostring(t).." {") 
         sub_print_r(val,indent..string.rep(" ",string.len(pos)+8)) 
         print(indent..string.rep(" ",string.len(pos)+6).."}") 
        else 
         print(indent.."["..pos.."] => "..tostring(val)) 
        end 
       end 
      else 
       print(indent..tostring(t)) 
      end 
     end 
    end 
    sub_print_r(t," ") 
end 

它不工作是偉大的,因爲我是一個後用食指檢查,如果是心不是同它不添加最後一個.. 我不知道這是否是最好的走的路...

如果我「刪除」匹配索引我的計劃是將上述或其下方到4索引行索引行......但首先第一件事情

+0

你的意思是你想刪除至少有兩個字段行相同的價值?此外,你應該嘗試*東西*併發布你的嘗試,否則你冒險讓這個問題關閉。 – Schollii

+0

@Schollii我太尷尬了,在這裏粘貼我的解決方案。我試着用if語句來分配它。 – MichaelAngelo

+0

你只對上/下和左/右匹配感興趣嗎?還是對角線匹配? –

回答

1

您應該比較的第二個指標不是第一次:在表

g = {{1,2,3}, {4,5,6}} 

g[1]是第一行,即{1,2,3},不{1,4}第一列(第一行和第二行的第一個元素)。你在之前的文章中做過同樣的事情,你應該重讀關於表格的Lua文檔。你應該這樣做:

for i = 1,#t do 
    object = t[i][1].key 
    if object == t[i][2].key then 

這隻會比較行中的前兩項。如果要檢查行是否有任何相同的連續項目,則必須循環遍歷從1到#t[i]-1的第二個索引。

您可能會發現下面的打印功能更加有用,因爲它打印表作爲一個網格,更容易看到前/後:

function printGrid(g) 
    for i, t in ipairs(g) do 
     print('{' .. table.concat(t, ',') .. '}') 
    end 
end