local utils = require "lib/utils" --- @class Grid local Grid = {} Grid.__index = Grid --- Создать пустую сетку width x height, заполненную initial (по умолчанию nil) function Grid.new(width, height, initial) local g = utils.generateList(width, function() return utils.generateList(height, function() return initial end) end) return setmetatable(g, Grid) end --- @param x integer --- @param y integer function Grid:get(x, y) local col = self[x] return col and col[y] or nil end --- @param x integer --- @param y integer function Grid:set(x, y, value) self[x][y] = value end --- @param x integer --- @param y integer function Grid:clear(x, y) self[x][y] = nil end -- нормализуем прямоугольник (поддержка отрицательных размеров) local function normalizeRect(x, y, w, h) if w < 0 then x = x + w + 1; w = -w end if h < 0 then y = y + h + 1; h = -h end return x, y, w, h end --- Заполнить прямоугольник значением value function Grid:fillRect(x, y, w, h, value) x, y, w, h = normalizeRect(x, y, w, h) local x2, y2 = x + w - 1, y + h - 1 for yy = y, y2 do for xx = x, x2 do self[xx][yy] = value end end end return Grid