Друг и я пытаемся написать программу подметания в Луа, используя рамки Löve. Пока код должен проверить, проверен ли флажок (ячейка), а затем нарисовать его. Мы новичок в Lua, у программы теперь есть недостаток, что она работает только в правом нижнем углу.Как инициализировать таблицу с таблицами в Lua?
ОБНОВЛЕНИЕ: Глядя на него сейчас, я вижу, что значения инициализированного GameBoard имеют одинаковое значение (т. Е. GameBoard[1]
до GameBoard[150]
- все одинаковые ячейки).
Вот код:
conf.lua
имеет некоторые глобальные переменные, определенные:
function love.conf(t)
-- Global variables.
CELL_SIZE = 40
NUM_ROWS = 15
NUM_COLS = 10
STATS_HEIGHT = 100
AMOUNT_OF_CELLS = NUM_ROWS * NUM_COLS
GRID_WIDTH = 400
GRID_HEIGHT = 700
end
Вот соответствующий провал код в main.lua
(он идет неправильно в методе загрузки, где GameBoard
заполнен Cell
с.
-- The Cell table is used for every individual square on
-- the gameboard
Cell = {}
-- The Gameboard (150 Cell objects)
GameBoard = {}
-- The function new belongs to Cell and spawns a new object (a table)
-- with the same attributes as Cell.
function Cell:new(i, j)
-- each cell knows:
-- its x- and y-coordinates.
self.x_min = (i-1) * CELL_SIZE
self.x_max = (CELL_SIZE-1) + (i-1) * CELL_SIZE
self.y_min = STATS_HEIGHT + (j-1) * CELL_SIZE
self.y_max = STATS_HEIGHT + (CELL_SIZE-1) + (j-1) * CELL_SIZE
-- if it is a mine (determined with random number generator)
isMine = (math.random(1, 8) % 8 == 0) -- Roughly 0.15 (1/7) times true (is a mine)
self.isMine = isMine
-- do not check the mine initially
self.checked = false
-- return the cell object
return self;
end
-- love.load is a love-function that is called once when the game
-- starts.
function love.load()
-- The index of the cell on the GameBoard (ranging from 1 to 150)
local index = 1
-- Build a two dimensional table of Cell-objects
for i = 1, NUM_COLS, 1 do
for j = 1, NUM_ROWS, 1 do
GameBoard[ index ] = Cell:new(i, j)
index = index + 1
end
end
end
В результате все коробки имеют значения lo wer box с индексом 150 (последний с NUM_ROWS * NUM_COLS
= 150). Все элементы (Cells
) таблицы (Gameboard
) имеют те же значения x и y, что и в методе Cell:new
.
Было бы полезно, если бы кто-нибудь мог рассказать нам, как правильно инициализировать и получить доступ к таблице таблиц.
Комментарий о стиле: 'cell.checked' вместо' cell ["checked"] 'и т. Д. – lhf
@inf Спасибо за совет. Это был первый день на этом языке. Вы видите, почему код работает только в правом нижнем углу? Может ли это иметь что-то с переменным объемом? –