我正在尝试制作游戏而且我有一个二维阵列
所以它是这样的:
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
它不起作用那么好,因为我检查了那个之后的索引,如果它不同,它不会添加最后一个.. 我不知道这是不是最好的方式...
如果我&#34;删除&#34;匹配的索引我的计划是将索引行上方或下方移动到4索引行......但首先是
答案 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