次の 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)
誰かが私のコードを再確認できますか? 間違いが見つかりません。ありがとう!