Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Генерация лабиринта и сохранение модели для робота-строителя
- -- @author kenik
- local alg = require("wilson_a")
- local function generateFileHead(f, name)
- f:write("title:string=" .. name .. "\n")
- f:write("author:string=kenik's maze generator\n")
- f:write("mats:table={\n")
- f:write(" x:string=cobblestone\n")
- f:write("}\n")
- f:write("levels:list=[\n")
- end
- local function generateTableHead(f, name)
- f:write(" table={\n")
- f:write(" name:string=" .. name .. "\n")
- f:write(" blocks:list=[\n")
- end
- local function generateTableFooter(f)
- f:write(" ]\n")
- f:write(" }\n")
- end
- local function generateFileLevel(f, n, tbl)
- generateTableHead(f, "level " .. n)
- local first_row = " string= "
- local last_row = " string=x"
- local empty_row = " string= "
- local half = #tbl // 2 + 1
- for num = 1, #tbl do
- empty_row = empty_row .. " "
- first_row = first_row .. ( (n == 2 and num == half) and "v" or " ")
- last_row = last_row .. "xx"
- end
- empty_row = empty_row .. "\n"
- first_row = first_row .. " \n"
- last_row = last_row .. "\n"
- f:write(first_row)
- f:write(empty_row)
- f:write(last_row)
- for _, item in pairs(tbl) do
- local row = " string=x"
- local second_row = " string=x"
- for _, letter in pairs(item) do
- row = row .. " " .. (letter["right_wall"] and "x" or " ")
- second_row = second_row .. (letter["bottom_wall"] and "x" or " ") .. (letter["right_wall"] and "x" or " ")
- end
- row = row .. "\n"
- second_row = second_row .. "\n"
- f:write(row)
- f:write(second_row)
- end
- f:write(last_row)
- generateTableFooter(f)
- end
- local function generateFileFloor(f, tbl)
- generateTableHead(f, "floor")
- local last_row = " string=x"
- local empty_row = " string= "
- for num = 1, #tbl do
- empty_row = empty_row .. " "
- last_row = last_row .. "xx"
- end
- empty_row = empty_row .. "\n"
- last_row = last_row .. "\n"
- f:write(empty_row)
- f:write(empty_row)
- f:write(last_row)
- for _, item in pairs(tbl) do
- f:write(last_row)
- f:write(last_row)
- end
- f:write(last_row)
- generateTableFooter(f)
- end
- local function generateFileFooter(f)
- f:write("]\n")
- end
- local args = {...}
- local newfile, width, height, depth
- if #args < 1 then
- print("Input new file name:")
- newfile = io.read()
- else
- newfile = args[1]
- end
- if #args < 2 then
- print("Input maze width:")
- width = io.read()
- else
- width = args[2]
- end
- if #args < 3 then
- print("Input maze height:")
- height = io.read()
- else
- height = args[3]
- end
- if #args < 4 then
- print("Input maze depth:")
- depth = io.read()
- else
- depth = args[4]
- end
- local f = io.open(newfile .. ".model","w")
- local maze = alg.createMaze(1, 1, width, height)
- -- f:write(dump(maze))
- generateFileHead(f, newfile)
- generateFileFloor(f, maze)
- for n=1, depth do
- generateFileLevel(f, n, maze)
- end
- generateFileFooter(f)
- f:close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement