Yes, thats should happen. Oddly enough my code is still broken after that addon. Looks like i have still lot to learn. I added the full code.
Code: Select all
function love.load()
gridXCount = 40
gridYCount = 30
ispowerup = false
function movePowerups()
local possiblePowerPositions = {}
for powerX = 1, gridXCount do
for powerY = 1, gridYCount do
local possible = true
for segmentIndex, segment in ipairs(snakeSegments) do
if powerX == segment.x and powerY == segment.y then
possible = false
end
end
if possible then
table.insert(possiblePowerPositions, {x = powerX, y = powerY})
end
end
end
powerPosition = possiblePowerPositions[love.math.random(1, #possiblePowerPositions)]
end
function moveFood()
local possibleFoodPositions = {}
for foodX = 1, gridXCount do
for foodY = 1, gridYCount do
local possible = true
for segmentIndex, segment in ipairs(snakeSegments) do
if foodX == segment.x and foodY == segment.y then
possible = false
end
end
if possible then
table.insert(possibleFoodPositions, {x = foodX, y = foodY})
end
end
end
foodPosition = possibleFoodPositions[love.math.random(1, #possibleFoodPositions)]
end
function reset()
snakeSegments = {
{x = 3, y = 1},
{x = 2, y = 1},
{x = 1, y = 1},
}
directionQueue = {'right'}
snakeAlive = true
timer = 0
powertimer = 0
moveFood()
movePowerups()
end
reset()
end
function love.update(dt)
timer = timer + dt
if ispowerup == true then
timer = timer + dt - powertimer
powertimer = powertimer - dt
end
if ispowerup == false then
timer = timer + dt
end
if snakeAlive then
timerLimit = 0.15
if timer >= timerLimit then
timer = timer - timerLimit
if #directionQueue > 1 then
table.remove(directionQueue, 1)
end
nextXPosition = snakeSegments[1].x
nextYPosition = snakeSegments[1].y
if directionQueue[1] == 'right' then
nextXPosition = nextXPosition + 1
if nextXPosition > gridXCount then
nextXPosition = 1
end
elseif directionQueue[1] == 'left' then
nextXPosition = nextXPosition - 1
if nextXPosition < 1 then
nextXPosition = gridXCount
end
elseif directionQueue[1] == 'down' then
nextYPosition = nextYPosition + 1
if nextYPosition > gridYCount then
nextYPosition = 1
end
elseif directionQueue[1] == 'up' then
nextYPosition = nextYPosition - 1
if nextYPosition < 1 then
nextYPosition = gridYCount
end
end
local canMove = true
for segmentIndex, segment in ipairs(snakeSegments) do
if segmentIndex ~= #snakeSegments
and nextXPosition == segment.x
and nextYPosition == segment.y then
canMove = false
end
end
if canMove then
table.insert(snakeSegments, 1, {x = nextXPosition, y = nextYPosition})
if snakeSegments[1].x == foodPosition.x
and snakeSegments[1].y == foodPosition.y then
moveFood()
else
table.remove(snakeSegments)
end
if snakeSegments[1].x == powerPosition.x and snakeSegments[1].y == powerPosition.y then
movePowerups()
ispowerup = true
end
if ispowerup then
if snakeSegments[1].x == powerPosition.x and snakeSegments[1].y == powerPosition.y then
ispowerup = false
movePowerups()
end
end
else
snakeAlive = false
end
end
elseif timer >= 2 then
reset()
end
end
if ispowerup == true then
powertimer = 0.07 / dt
powertimer = powertimer - timer / dt
end
--[[ if ispowerup == false then
powertimer = timer
end]]
function love.draw()
local cellSize = 15
love.graphics.setColor(.28, .28, .28)
love.graphics.rectangle(
'fill',
0,
0,
gridXCount * cellSize,
gridYCount * cellSize
)
local function drawCell(x, y)
love.graphics.rectangle(
'fill',
(x - 1) * cellSize,
(y - 1) * cellSize,
cellSize - 1,
cellSize - 1
)
end
for segmentIndex, segment in ipairs(snakeSegments) do
if snakeAlive then
love.graphics.setColor(.6, 1, .32)
else
love.graphics.setColor(.5, .5, .5)
end
drawCell(segment.x, segment.y)
end
love.graphics.setColor(1, .3, .3)
drawCell(foodPosition.x, foodPosition.y)
love.graphics.setColor(1, .3, 255)
drawCell(powerPosition.x, powerPosition.y)
end
function love.keypressed(key)
if key == 'right'
and directionQueue[#directionQueue] ~= 'right'
and directionQueue[#directionQueue] ~= 'left' then
table.insert(directionQueue, 'right')
elseif key == 'left'
and directionQueue[#directionQueue] ~= 'left'
and directionQueue[#directionQueue] ~= 'right' then
table.insert(directionQueue, 'left')
elseif key == 'up'
and directionQueue[#directionQueue] ~= 'up'
and directionQueue[#directionQueue] ~= 'down' then
table.insert(directionQueue, 'up')
elseif key == 'down'
and directionQueue[#directionQueue] ~= 'down'
and directionQueue[#directionQueue] ~= 'up' then
table.insert(directionQueue, 'down')
end
end][/code