Love - Lemmings Movement
This tutorial will create the movement for an individual Lemming, it will fall to the ground and then move in one direction until it hits something it can't climb and then switch direction.
I have extended this by creating different subclasses of lemming, ones to block, explode, tunnel, bridge and so on.
I used this image for the map:
I also made this map for my extended version:
I used this image for a lemming:
Contents
Variables Required
local width = 800
local height = 800
local lemtime = 2
local elapsed = lemtime
local maxlem = 10
local lemcount = 0
local startx = 100
local starty = 100
Lemmings Class & List of Lemmings
Lems = {}
function Lem(x,y)
local self = {
direction = 1,
climbheight = 4,
width = 10,
height = 20,
xpos = x,
ypos=y
}
function self.update(dt)
bl = self.checkground(self.xpos,self.ypos + self.height)
br = self.checkground(self.xpos + self.width,self.ypos + self.height)
if not bl and not br then
self.ypos=self.ypos+1
else
local testheight = 0
local found = false
while not found and testheight <= self.climbheight do
if self.direction == 1 then
frontx = self.xpos + self.width
fronty = self.ypos + (self.height) - testheight
else
frontx = self.xpos - 1
fronty = self.ypos + (self.height) - testheight
end
if not self.checkground(frontx, fronty) then
self.xpos = self.xpos+self.direction
self.ypos = self.ypos - testheight
found=true
end
testheight = testheight + 1
end
if not found then
self.direction = self.direction * -1
end
end
end
function self.checkground(x,y)
if mapdata:getPixel(x,y) ~= bgcolor then
return true
else
return false
end
end
return self
end
Method to Create Lemming
function createlem()
if lemcount<maxlem then
Lems[lemcount] = Lem(startx,starty)
lemcount = lemcount + 1
end
end
love.load method
function love.load()
love.window.setMode(width, height)
mapdata = love.image.newImageData("level.png")
map = love.graphics.newImage(mapdata)
bgcolor = mapdata:getPixel(startx,starty)
lem = love.graphics.newImage("lemming.png")
end
love.update method
function love.update(dt)
elapsed = elapsed - dt
if elapsed <= 0 then
createlem()
elapsed=lemtime
end
for _,test in pairs(Lems )do
test.update(dt)
end
end
love.draw method
function love.draw()
love.graphics.draw(map, 0, 0)
for _,test in pairs(Lems )do
love.graphics.draw(lem,test.xpos, test.ypos)
end
end