Not a member of Pastebin yet?
                        Sign Up,
                        it unlocks many cool features!                    
                - local function randomColor()
 - return {random(90,255),random(90,255),random(90,255)}
 - end
 - local function getNearbyCoords(x,y)
 - return {
 - {x,y+1},
 - {x+1,y+1},
 - {x+1,y},
 - {x+1,y-1},
 - {x,y-1},
 - {x-1,y-1},
 - {x-1,y},
 - {x-1,y+1},
 - }
 - end
 - local function randomEntry(t)
 - return t[random(#t)]
 - end
 - local function bindCords(x,y)
 - local x,y = x,y
 - if(x>laenge) then x = laenge end
 - if(x<1) then x = 1 end
 - if(y>hoehe) then y = hoehe end
 - if(y<1) then y = 1 end
 - end
 - local function isPheromone(x,y)
 - for k,v in pairs(pheromone) do
 - if(v.x == x and v.y == y) then
 - return true
 - end
 - end
 - return false
 - end
 - local function isFood(x,y)
 - for k,v in pairs(sources) do
 - if(v.x == x and v.y == y) then
 - return true
 - end
 - end
 - return false
 - end
 - local function isNest(x,y)
 - return (nestX == x and nestY == y)
 - end
 - local function takeFood(x,y)
 - for k,v in pairs(sources) do
 - if(v.x == x and v.y == y) then
 - v.amount = v.amount-1
 - foodTaken = foodTaken+1
 - if(v.amount <= 0) then
 - sources[k] = nil
 - end
 - end
 - end
 - end
 - local function distanceBetween(x1,y1,x2,y2)
 - return math.sqrt((x2-x1)^2+(y2-y1)^2)
 - end
 - function love.load(arg)
 - love.math.setRandomSeed(os.time())
 - random = love.math.random
 - require"settings"
 - love.window.setMode(laenge,hoehe,{})
 - --Erstelle die Ameisen und setzte sie an den Anfang
 - ants = {}
 - for i = 1, ameisenAnzahl do
 - ants[#ants+1] = {x=nestX,y=nestY,carries=false,releasePheromon=false,mode="wandering"}
 - end
 - --Erstelle die Futter Quellen
 - sources = {}
 - for i = 1, futterQuellen do
 - sources[#sources+1] = {amount=futterProQuelle,x=random(laenge),y=random(hoehe)}
 - end
 - foodInNest = 0
 - foodTaken = 0
 - --Lege Tabelle für Pheromone an
 - pheromone = {}
 - movementTimer = 0
 - sourceColor = randomColor()
 - nestColor = randomColor()
 - antColor = randomColor()
 - pheromoneColor = randomColor()
 - end
 - function love.update(dt)
 - --Update die Timer
 - movementTimer = movementTimer+dt
 - for k,v in pairs(pheromone) do
 - v.timer = v.timer - dt
 - end
 - if(movementTimer >= movementUpdate) then
 - movementTimer = 0
 - for k,v in pairs(ants) do
 - if(v.carries) then
 - v.mode = "returning"
 - end
 - local nearby = getNearbyCoords(v.x,v.y)
 - local nearbyPheromones = {}
 - local nearbyFood = {}
 - for _,j in pairs(nearby) do
 - if(isPheromone(j[1],j[2])) then
 - table.insert(nearbyPheromones,{j[1],j[2],distanceBetween(j[1],j[2],nestX,nestY)})
 - end
 - if(isFood(j[1],j[2])) then
 - table.insert(nearbyFood,{j[1],j[2]})
 - end
 - end
 - if(v.mode=="wandering") then
 - if(#nearbyFood>0) then
 - v.x,v.y = nearbyFood[1][1],nearbyFood[1][2]
 - v.mode = "returning"
 - v.carries = true
 - v.releasePheromon = true
 - takeFood(v.x,v.y)
 - elseif(#nearbyPheromones>0) then
 - if(#nearbyPheromones==1) then
 - v.x,v.y = nearbyPheromones[1][1],nearbyPheromones[1][2]
 - else
 - local farest = {0,0,0}
 - for _,j,v in pairs(nearbyPheromones) do
 - if(j[3]>farest[3]) then
 - farest = j
 - end
 - end
 - v.x,v.y = farest[1],farest[2]
 - end
 - v.mode="following"
 - else
 - randomCord = randomEntry(nearby)
 - v.x,v.y = randomCord[1],randomCord[2]
 - end
 - elseif(v.mode=="returning") then
 - local nearest = {0,0,hoehe*laenge} --Ich könnte hier auch einfach eine große Zahl benutzen, damit die distance am anfang "zu groß" ist.
 - for _,j in pairs(nearby) do
 - local dist = distanceBetween(j[1],j[2],nestX,nestY)
 - if(dist<nearest[3]) then
 - nearest = {j[1],j[2],dist}
 - end
 - end
 - if(isPheromone(v.x,v.y)) then
 - else
 - pheromone[#pheromone+1] = {x=v.x,y=v.y,timer=sekundenBisPheromonZuende}
 - end
 - v.x,v.y = nearest[1],nearest[2]
 - elseif(v.mode=="following") then
 - if(#nearbyPheromones>0) then
 - local farest = {0,0,-1}
 - for _,l in pairs(nearbyPheromones) do
 - if(l[3]>farest[3]) then
 - farest = l
 - end
 - end
 - if(#nearbyFood>0) then
 - v.x,v.y = nearbyFood[1][1],nearbyFood[1][2]
 - takeFood(v.x,v.y)
 - v.mode = "returning"
 - else
 - v.x,v.y = farest[1],farest[2]
 - end
 - else
 - v.mode = "wandering"
 - randomCord = randomEntry(nearby)
 - v.x,v.y = randomCord[1],randomCord[2]
 - end
 - end
 - if(v.x == nestX and v.y == nestY) then
 - if(v.carries) then
 - v.mode = "wandering"
 - v.carries = false
 - foodInNest = foodInNest+1
 - end
 - end
 - end
 - end
 - for k,v in pairs(sources) do
 - --print(v.amount)
 - end
 - end
 - function love.draw(dt)
 - love.graphics.clear()
 - --Zeichne Pheromone
 - love.graphics.setColor(unpack(pheromoneColor))
 - for k,v in pairs(pheromone) do
 - if(v.timer > 0) then
 - love.graphics.point(v.x,v.y)
 - else
 - pheromone[k] = nil
 - end
 - end
 - --Zeichne Nest
 - love.graphics.setColor(unpack(nestColor))
 - love.graphics.point(nestX,nestY)
 - --Zeiche alle Ameisen
 - love.graphics.setColor(unpack(antColor))
 - for k,v in pairs(ants) do
 - love.graphics.point(v.x,v.y)
 - end
 - --Zeichne alle Futterquellen
 - love.graphics.setColor(unpack(sourceColor))
 - for k,v in pairs(sources) do
 - love.graphics.point(v.x,v.y)
 - end
 - love.graphics.setColor(255,255,255)
 - love.graphics.print("Food Taken:"..foodTaken,10,10)
 - love.graphics.print("Food in nest:"..foodInNest,10,25)
 - end
 
Advertisement
 
                    Add Comment                
                
                        Please, Sign In to add comment