# Difference between revisions of "Love - Lemmings Movement"

Jump to: navigation, search

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 used this image for the map:

I also made this map for my extended version:

I used this image for a lemming:

I have extended this by creating different subclasses of lemming, ones to block, explode, tunnel, bridge and so on.

## 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