Lua开发2D文字游戏时如何按行列坐标获取棋盘元素
Lua一维数组存储的6*6棋盘行列定位方案
你用一维数组按行优先顺序存储棋盘数据时,只需要通过固定公式把行号、列号换算成数组下标即可取值,核心逻辑如下:
- Lua数组默认下标从1开始计数,你的棋盘固定每行6个元素,对应换算公式为:
数组下标 = (目标行号 - 1) * 单行列数 + 目标列号 - 以你举的「第2行第4列取"o"」的例子代入计算:(2-1)*6 +4 = 10,对应数组第10位的元素正好是"o",和你定义的棋盘数据完全匹配。
你可以直接写代码取值,也可以封装成通用函数方便复用:
-- 棋盘固定列数 local COL_PER_ROW = 6 function getCell(state, row, col) -- 可选:参数合法性校验,避免传入超出棋盘范围的行列号 if row < 1 or row > 6 or col < 1 or col > COL_PER_ROW then error("行列号非法,6*6棋盘有效行列范围均为1-6") end local idx = (row - 1) * COL_PER_ROW + col return state[idx] end -- 测试你的示例棋盘 local testState = { "--", "--", "--", "--", "--", "--", "--", "--", "--", "o", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--", "--" } -- 打印第2行第4列的值,输出为o print(getCell(testState, 2, 4))
如果需要修改对应位置的元素,用同样的下标计算逻辑即可,比如要把第3行第2列设置为"x",直接执行testState[(3-1)*6 + 2] = "x"就能完成修改。
注意不要套用其他语言从0开始计数的下标公式,否则会出现取值错位的问题。
内容的提问来源于stack exchange,提问作者LimitedResources
相关产品推荐
相关产品推荐

