将短脚本从JavaScript转换为Lua

时间:2015-03-24 12:03:17

标签: javascript lua lua-4.0

我知道以下JS脚本可以正常工作,并为 restrictCount 值生成正确的值12。

var radius = 4
var gnWide = radius * 2 - 1;
var gnHigh = radius * 2 - 1;
var restrictTable = [];
var restrictCount = 0;
var gride = [];
var grido = [];

for (var y = 0; y < gnHigh; y++) {
    restrictTable[y] = [];
    for (var x = 0; x < gnWide; x++) {
        restrictTable[y][x] = 0;
    }
}

for (var y = 0; y < gnHigh; y++) {
    gride[y] = [];
    grido[y] = [];
    for (var x = 0; x < radius; x++) {
        gride[y][x] = 0;
        grido[y][x] = 0;
    }
}

function makeHexagon() {
    var cne = Math.ceil(radius/2) - radius%2;
    for (var y = 0; y < gnHigh; y++) {
        for (var x = 0; x < cne; x++) {
            gride[y][x] = 1;
            gride[y][radius-x-1] = 1;
        }
        if (y < radius-1)
            cne--;
        else if (y > radius-1-radius%2)
            cne++;
    }
    cne = Math.ceil(radius/2) - radius%2 - 1;
    for (var y = 0; y < gnHigh; y++) {
        for (var x = 0; x < cne; x++) {
            grido[y][x] = 1;
            grido[y][radius-x-2] = 1;
        }
        if (y < radius-1-radius%2)
            cne--;
        else if (y > radius-2)
            cne++;
    }
}

function combineTables() {
    for (var y = 0; y < gnHigh; y++) {
        for (var x = 0; x < gnHigh; x++) {
            if (x%2 == 0) {
                var value = gride[y][x/2]
                restrictTable[y][x] = value
                restrictCount += value
            } else {
                var value = grido[y][Math.floor(x/2)]
                restrictTable[y][x] = value
                restrictCount += value
            }
        }
    }
}

makeHexagon()
combineTables()
alert(restrictCount)

我需要将其翻译成Lua 4代码。但是,表格索引让我感到困惑。在JS表格中以0开头。在Lua中,他们从1开始。他们在这段代码中频繁混淆,它让我失望。这是我的尝试,结果是11而不是12:

radius = 4
gnWide = radius * 2 - 1
gnHigh = radius * 2 - 1
restrictTable = {}
restrictCount = 0
gride = {}
grido = {}

for y = 1, gnHigh do
    restrictTable[y] = {}
    for x = 1, gnWide do
        restrictTable[y][x] = 0
    end
end

for y = 1, gnWide do
    gride[y] = {}
    grido[y] = {}
    for x = 1, radius do
        gride[y][x] = 0
        grido[y][x] = 0
    end
end

function makeHexagon()
    cne = ceil(radius/2) - mod(radius,2)
    for y = 1, gnHigh do
        for x = 1, cne do
            gride[y][x] = 1
            gride[y][radius-x] = 1
        end
        if (y < radius) then
            cne = cne - 1
        elseif (y > radius-mod(radius,2)) then
            cne = cne + 1
        end
    end
    cne = ceil(radius/2) - mod(radius,2) - 1
    for y = 1, gnHigh do
        for x = 1, cne do
            grido[y][x] = 1
            grido[y][radius-x-1] = 1
        end
        if (y < radius-mod(radius,2)) then
            cne = cne - 1
        elseif (y > radius-1) then
            cne = cne + 1
        end
    end
end

function combineTables()
    for y = 1, gnHigh do
        for x = 1, gnWide do
            if (mod(x,2) == 1) then
                local value = gride[y][ceil(x/2)]
                restrictTable[y][x] = value
                restrictCount = restrictCount + value
            else
                local value = grido[y][x/2]
                restrictTable[y][x] = value
                restrictCount = restrictCount + value
            end
        end
    end
end

makeHexagon()
combineTables()
print(restrictCount)

有人可以仔细查看我的代码吗?我无法找到错误。谢谢!

0 个答案:

没有答案