230 lines
5.9 KiB
Lua
230 lines
5.9 KiB
Lua
|
x, y = 400, 300
|
||
|
s2 = 0
|
||
|
sy = 0
|
||
|
pp = 0
|
||
|
gegner_intervall = 0
|
||
|
gegner = {}
|
||
|
gegner_geboren = 0
|
||
|
raketen = {}
|
||
|
explosionen = {}
|
||
|
freund = { x = 200, y = 300 }
|
||
|
rakete_laden = 0
|
||
|
|
||
|
function love.load()
|
||
|
robot = love.graphics.newImage("robot.png")
|
||
|
flame = love.graphics.newImage("flame.png")
|
||
|
parachute = love.graphics.newImage("parachute.png")
|
||
|
feuerwerksrakete = love.graphics.newImage("feuerwerksrakete.png")
|
||
|
faust = love.graphics.newImage("faust.png")
|
||
|
kingkong = love.graphics.newImage("kingkong.png")
|
||
|
geist = love.graphics.newImage("geist.png")
|
||
|
lindwurm = love.graphics.newImage("lindwurm.png")
|
||
|
baummonster = love.graphics.newImage("baummonster.png")
|
||
|
steinmonster = love.graphics.newImage("steinmonster.png")
|
||
|
|
||
|
-- font = love.graphics.newFont("Grundschrift-Normal.otf", 24)
|
||
|
-- love.graphics.setFont(font)
|
||
|
end
|
||
|
|
||
|
function love.update(dt)
|
||
|
-- Bewegung eigener Roboter
|
||
|
if love.keyboard.isDown("left") then
|
||
|
x = x - 100 * dt
|
||
|
end
|
||
|
if love.keyboard.isDown("right") then
|
||
|
x = x + 100 * dt
|
||
|
end
|
||
|
if x < 0 then
|
||
|
x = 0
|
||
|
end
|
||
|
if x > 800 - 32 then
|
||
|
x = 800 - 32
|
||
|
end
|
||
|
|
||
|
if love.keyboard.isDown("up") then
|
||
|
sy = sy - 1 * dt
|
||
|
end
|
||
|
if love.keyboard.isDown("down") then
|
||
|
sy = sy + 1 * dt
|
||
|
end
|
||
|
if sy > 1 then
|
||
|
sy = 1
|
||
|
end
|
||
|
y = y + sy
|
||
|
if y > 600 - 32 then
|
||
|
y = 600 - 32
|
||
|
sy = 0
|
||
|
end
|
||
|
if y < 0 and sy < 0 then
|
||
|
sy = -sy
|
||
|
end
|
||
|
|
||
|
-- Rakete losschiessen
|
||
|
rakete_laden = rakete_laden + dt
|
||
|
if love.keyboard.isDown("space") and rakete_laden > 0.1 then
|
||
|
rakete_laden = 0
|
||
|
table.insert(raketen, { x = x, y = y, s = 10 })
|
||
|
end
|
||
|
|
||
|
-- Raketen weiterfliegen lassen
|
||
|
for r, rakete in ipairs(raketen) do
|
||
|
rakete.s = rakete.s * 1.1
|
||
|
rakete.y = rakete.y - rakete.s * dt
|
||
|
end
|
||
|
-- Gegner treffen mit Rakete
|
||
|
for g, gegner1 in ipairs(gegner) do
|
||
|
for r, rakete in ipairs(raketen) do
|
||
|
if rakete.x > gegner1.x - 16 and rakete.x < gegner1.x + 16 and rakete.y > gegner1.y - 16 and rakete.y < gegner1.y + 16 then
|
||
|
gegner1.leben = gegner1.leben - 25
|
||
|
table.remove(raketen, r)
|
||
|
print("neue explosion")
|
||
|
table.insert(explosionen, { x = rakete.x, y = rakete.y, t = 0 })
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
for g, gegner1 in ipairs(gegner) do
|
||
|
if gegner1.leben < 1 then
|
||
|
table.remove(gegner, g)
|
||
|
end
|
||
|
end
|
||
|
for r, rakete in ipairs(raketen) do
|
||
|
-- Oberer Bildschirmrand
|
||
|
if rakete.y < 0 then
|
||
|
table.remove(raketen, r)
|
||
|
end
|
||
|
end
|
||
|
for i, explosion in ipairs(explosionen) do
|
||
|
explosion.t = explosion.t + dt
|
||
|
if explosion.t > 1 then
|
||
|
table.remove(explosionen, i)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- Neue Gegner
|
||
|
gegner_intervall = gegner_intervall + dt
|
||
|
if gegner_intervall > 0 then
|
||
|
gegner_intervall = -3
|
||
|
local bild = math.floor(4 * math.random())
|
||
|
local kraft = 0.4 * math.random()
|
||
|
if bild == 0 then
|
||
|
kraft = 10 * kraft
|
||
|
end
|
||
|
if gegner_geboren % 30 == 29 then
|
||
|
table.insert(gegner, { x = 100 + 600 * math.random(), y = -100, s = 0, kraft = kraft, leben = 400, bild = 4 })
|
||
|
else
|
||
|
table.insert(gegner, { x = 100 + 600 * math.random(), y = -100, s = 0, kraft = kraft, leben = 100, bild = bild })
|
||
|
end
|
||
|
gegner_geboren = gegner_geboren + 1
|
||
|
end
|
||
|
-- Bewegung Gegner
|
||
|
for i, g in ipairs(gegner) do
|
||
|
if g.x > x then
|
||
|
g.s = g.s - g.kraft * dt
|
||
|
end
|
||
|
if g.x < x then
|
||
|
g.s = g.s + g.kraft * dt
|
||
|
end
|
||
|
if g.s > 100 * dt then
|
||
|
g.s = 100 * dt
|
||
|
end
|
||
|
if g.s < -100 * dt then
|
||
|
g.s = -100 * dt
|
||
|
end
|
||
|
g.x = g.x + g.s
|
||
|
if g.x < 0 then
|
||
|
g.x = 0
|
||
|
end
|
||
|
if g.x > 800 - 32 then
|
||
|
g.x = 800 - 32
|
||
|
end
|
||
|
if g.y > y then
|
||
|
g.y = g.y - 100 * dt
|
||
|
end
|
||
|
if g.y < y then
|
||
|
g.y = g.y + 100 * dt
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- Bewegung Freund
|
||
|
if table.getn(gegner) > 0 then
|
||
|
local g = gegner[1]
|
||
|
if freund.x < g.x then
|
||
|
freund.x = freund.x + 100 * dt
|
||
|
end
|
||
|
if freund.x > g.x then
|
||
|
freund.x = freund.x - 100 * dt
|
||
|
end
|
||
|
if freund.y < g.y then
|
||
|
freund.y = freund.y + 100 * dt
|
||
|
end
|
||
|
if freund.y > g.y and g.y > 0 then
|
||
|
freund.y = freund.y - 100 * dt
|
||
|
end
|
||
|
end
|
||
|
-- Freund verpruegelt Gegner
|
||
|
for g, gegner1 in ipairs(gegner) do
|
||
|
if gegner1.x > freund.x and gegner1.x < freund.x + 32 and gegner1.y > freund.y and gegner1.y < freund.y + 32 then
|
||
|
gegner1.leben = gegner1.leben - 30 * dt
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function love.draw()
|
||
|
love.graphics.setColor(1,1,1, 1)
|
||
|
love.graphics.setBackgroundColor(0.5, 0.5, 1)
|
||
|
|
||
|
if sy < 0 then
|
||
|
love.graphics.draw(flame, x, y + 32)
|
||
|
end
|
||
|
if sy > 0 and pp < 29 then
|
||
|
pp = pp + 1
|
||
|
end
|
||
|
if sy <= 0 and pp > 0 then
|
||
|
pp = pp - 1
|
||
|
end
|
||
|
if pp > 0 then
|
||
|
love.graphics.draw(parachute, x, y - pp)
|
||
|
end
|
||
|
love.graphics.draw(robot, x, y)
|
||
|
|
||
|
-- Durch alle Gegner
|
||
|
for i, g in ipairs(gegner) do
|
||
|
-- Zeichne
|
||
|
if g.bild == 0 then
|
||
|
love.graphics.draw(lindwurm, g.x, g.y)
|
||
|
elseif g.bild == 1 then
|
||
|
love.graphics.draw(geist, g.x, g.y)
|
||
|
elseif g.bild == 2 then
|
||
|
love.graphics.draw(robot, g.x, g.y)
|
||
|
elseif g.bild == 3 then
|
||
|
love.graphics.draw(baummonster, g.x, g.y)
|
||
|
elseif g.bild == 4 then
|
||
|
love.graphics.draw(steinmonster, g.x, g.y)
|
||
|
end
|
||
|
-- Setze Balkenfarbe
|
||
|
love.graphics.setColor(1 - (g.leben / 100), g.leben / 100, 0, 1)
|
||
|
-- Zeichne Balken fuer leben
|
||
|
love.graphics.rectangle("fill", g.x, g.y + 32, 32 * g.leben / 100, 4, 0, 0, 0)
|
||
|
|
||
|
love.graphics.setColor(1,1,1,1)
|
||
|
-- Zeichne Faust
|
||
|
if g.x >= x - 16 and g.x < x + 16 then
|
||
|
love.graphics.draw(faust, g.x + 16, g.y)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
love.graphics.draw(kingkong, freund.x, freund.y)
|
||
|
|
||
|
for i, rakete in ipairs(raketen) do
|
||
|
love.graphics.draw(feuerwerksrakete, rakete.x, rakete.y)
|
||
|
end
|
||
|
for i, explosion in ipairs(explosionen) do
|
||
|
love.graphics.setColor(1, 1 - explosion.t, 0, 1 - explosion.t)
|
||
|
love.graphics.circle("fill", explosion.x, explosion.y, 100 * explosion.t, 10)
|
||
|
end
|
||
|
|
||
|
love.graphics.setColor(1,1,1, 1)
|
||
|
-- love.graphics.print(math.floor(x).." "..math.floor(y).." "..sy, 0, 0)
|
||
|
love.graphics.print("Gegner: "..(#gegner), 0, 0)
|
||
|
end
|