You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:30:52