Difference between revisions of "Love - Lemmings Movement"

From TRCCompSci - AQA Computer Science
Jump to: navigation, search
Line 2: Line 2:
  
 
I used this image for the map:
 
I used this image for the map:
 +
 
[[File:Level.png|400px]]
 
[[File:Level.png|400px]]
  
 
I also made this map for my extended version:
 
I also made this map for my extended version:
 +
 
[[File:Levelnew.png|400px]]
 
[[File:Levelnew.png|400px]]
  

Revision as of 10:59, 11 July 2019

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:

Level.png

I also made this map for my extended version:

Levelnew.png

I used this image for a lemming: Lemming.png

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