1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
if not modules then modules = { } end modules ['games-hex'] = {
version = 1.000,
comment = "Hex",
author = "Wolfgang Schuster",
copyright = "Wolfgang Schuster",
email = "schuster.wolfgang@googlemail.com",
license = "Public Domain"
}
do
thirddata = thirddata or { }
thirddata.games = thirddata.games or { }
thirddata.games.hex = thirddata.games.hex or { }
thirddata.games.hex.setup = thirddata.games.hex.setup or { }
local nx = function() return thirddata.games.hex.setup.nx end
local ny = function() return thirddata.games.hex.setup.ny end
local dx = function() return thirddata.games.hex.setup.dx end
local dy = function() return thirddata.games.hex.setup.dy end
local offset = function() return thirddata.games.hex.setup.offset end
local size = function() return thirddata.games.hex.setup.size end
local distance = function() return thirddata.games.hex.setup.distance end
local bp = function(value) return number.tobasepoints(value) end
local sp = function(value) return value * 65536/(7227/7200) end
function thirddata.games.hex.board_new()
thirddata.games.hex.field = { }
for col=1,nx() do
thirddata.games.hex.field[col] = { }
for row=1,ny() do
thirddata.games.hex.field[col][row] = { color = 0 }
end
end
end
function thirddata.games.hex.board_lines()
for row=1,ny() do
for col=1,ny() do
tex.sprint("draw (")
for rot=0,5 do
tex.sprint("(" .. bp(size()) .. ",0) rotated (" .. rot*60+90 .. ") --")
end
tex.sprint("cycle) shifted (" .. bp(math.cos(math.pi/6)*size()*(2*(col-1)+(row-1))) .. "," .. bp(-size()*1.5*(row-1)) .. ") ; ")
end
end
end
function thirddata.games.hex.board_labels()
for col=1,nx() do
tex.sprint('label.top(textext("\\doattributes{@@@@gmhex}{labelstyle}{labelcolor}{\\sgfchar{' .. col .. '}}"),%')
tex.sprint('(' .. bp(-(size()+distance())*math.tan(math.pi/6)+2*(col-1)*math.cos(math.pi/6)*size()) .. ',' .. bp(size()+distance()) .. ')) ;')
end
for row=1,ny() do
tex.sprint('label.lft(textext("\\doattributes{@@@@gmhex}{labelstyle}{labelcolor}{' .. row .. '}"),%')
tex.sprint('(' .. bp(-math.cos(math.pi/6)*size()-distance()+(row-1)*math.cos(math.pi/6)*size()) .. ',' .. bp(-1.5*(row-1)*size()) .. ')) ;')
end
end
function thirddata.games.hex.board_stones()
local color = function(x,y) return thirddata.games.hex.field[x][y]['color'] end
for col=1,nx() do
for row=1,ny() do
if color(col,row)==1 then
thirddata.games.hex.stone(math.cos(math.pi/6)*size()*(2*(col-1)+(row-1)),-size()*1.5*(row-1),"red")
elseif color(col,row)==2 then
thirddata.games.hex.stone(math.cos(math.pi/6)*size()*(2*(col-1)+(row-1)),-size()*1.5*(row-1),"blue")
end
end
end
end
function thirddata.games.hex.stone(x,y,color)
tex.sprint("fill (")
for rot=0,5 do
tex.sprint("(" .. bp(size()) .. ",0) rotated (" .. rot*60+90 .. ") --")
end
tex.sprint("cycle) shifted (" .. bp(x) .. "," .. bp(y) .. ")")
tex.sprint("withcolor \\MPcolor{" .. color .. "} ;")
end
function thirddata.games.hex.board_draw(name)
tex.sprint("\\startuniqueMPgraphic{" .. name .. "}{}")
thirddata.games.hex.board_stones()
thirddata.games.hex.board_lines()
thirddata.games.hex.board_labels()
tex.sprint("\\stopuniqueMPgraphic")
end
end
|