我很想使用Lua和LOVE2D。我认为熟悉这些工具的一个完美方法就是创造一个蛇式游戏。目前我已经完成了大部分工作。在吃掉食物后加入蛇时遇到问题。我的蛇类目前由一个单元格表组成,每个单元格都有一个gridX和gridY变量。我还有2个名为lastGridX和lastGridY的全局变量,用于跟踪snake类中最后一个单元格的最后位置。我以相反的顺序更新单元格的位置,并将它们设置为等于单元格的位置,表格中的索引少于1。我通过添加一个名为SCALE的常量值来更新第一个单元格,SCALE是网格上每个方块的大小。当第一个细胞的位置与食物的位置相同时,我的问题就出现了。出于某种原因,我的lastGridX和lastGridY也改变为食物的x和y位置,即使我自己也没有改变它们。这使得每个单元都具有相同的位置,这显然不是我想要发生的。任何帮助将不胜感激,谢谢。以下是一些代码。
function love.update(dt)
-- updates the snake's position in set intervals
moveTimer = moveTimer - dt
if moveTimer <= 0 then
lastGridX = snake[#snake].gridX
lastGridY = snake[#snake].gridY
-- updates the body of the snake
for i = #snake, 2, -1 do
snake[i].gridX = snake[i - 1].gridX
snake[i].gridY = snake[i - 1].gridY
end
-- updates the head of the snake
if direction == "right" then
snake[1].gridX = snake[1].gridX + SCALE
elseif direction == "left" then
snake[1].gridX = snake[1].gridX - SCALE
elseif direction == "up" then
snake[1].gridY = snake[1].gridY - SCALE
elseif direction == "down" then
snake[1].gridY = snake[1].gridY + SCALE
end
moveTimer = MOVE_TIMER_MAX
print(lastGridX, lastGridY)
print(snake[#snake].gridX, snake[#snake].gridY)
if snake[1].gridX == newFood.gridX and snake[1].gridY == newFood.gridY then
-- moves the food to a random location on the grid if it is eaten
newFood.gridX = math.random(0, 63) * SCALE
newFood.gridY = math.random(0, 35) * SCALE
-- adds a new body part to the end of the snake
newC = cell
newC.gridX = lastGridX
newC.gridY = lastGridY
print(lastGridX, lastGridY)
print(snake[#snake].gridX, snake[#snake].gridY)
os.execute("pause")
table.insert(snake, newC)
end
end
端