# Difference between revisions of "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:

## Variables Required

local width = 800
local height = 800

local lemtime = 2 -- time between lemmings
local elapsed = lemtime
local maxlem = 10 -- number of lemmings to create
local lemcount = 0 -- used to count the number of lemmings created

local startx = 100 -- drop position for new lemmings
local starty = 100


## Lemmings Class & List of Lemmings

Lems = {} -- a table/list for the lemmings

function Lem(x,y) -- a class for a lemming
local self = {
direction = 1, -- 1 is right -1 is left
climbheight = 4, -- the height from one pixel to another the lemming can climb
width = 10,
height = 20,
xpos = x, -- current position
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
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

self.direction = self.direction * -1
end
end
end

function self.checkground(x,y) -- method used to check a pixel of the level
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


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