1

次の 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 から始まります。このコードではこれらが頻繁に混在しており、私はうんざりしています。12ではなく11になる私の試みは次のとおりです。

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)

誰かが私のコードを再確認できますか? 間違いが見つかりません。ありがとう!

4

0 に答える 0