asteroid stages

This commit is contained in:
Donald Ball 2025-11-14 17:10:40 -05:00
parent 78cd6176a8
commit 73cae82662

View file

@ -3,18 +3,38 @@ local love = require("love")
function love.load()
arenaWidth = 800
arenaHeight = 600
shipRadius = 30
bulletTimerLimit = 0.5
bulletRadius = 5
asteroidStages = {
{
speed = 120,
radius = 15,
},
{
speed = 70,
radius = 30,
},
{
speed = 50,
radius = 50,
},
{
speed = 20,
radius = 80,
},
}
function reset()
shipX = arenaWidth / 2
shipY = arenaHeight / 2
shipAngle = 0
shipSpeedX = 0
shipSpeedY = 0
shipRadius = 30
bullets = {}
bulletTimerLimit = 0.5
bulletTimer = bulletTimerLimit
bulletRadius = 5
asteroids = {
{
x = 100,
@ -31,8 +51,11 @@ function love.load()
}
for asteroidIndex, asteroid in ipairs(asteroids) do
asteroid.angle = love.math.random() * (2 * math.pi)
asteroid.stage = #asteroidStages
end
asteroidRadius = 80
end
reset()
end
function love.update(dt)
@ -70,20 +93,24 @@ function love.update(dt)
end
for asteroidIndex = #asteroids, 1, -1 do
local asteroid = asteroids[asteroidIndex]
if areCirclesIntersecting(bullet.x, bullet.y, bulletRadius, asteroid.x, asteroid.y, asteroidRadius) then
if areCirclesIntersecting(bullet.x, bullet.y, bulletRadius, asteroid.x, asteroid.y, asteroidStages[asteroid.stage].radius) then
table.remove(bullets, bulletIndex)
if asteroid.stage > 1 then
local angle1 = love.math.random() * (2 * math.pi)
local angle2 = (angle1 - math.pi) % (2 * math.pi)
table.insert(asteroids, {
x = asteroid.x,
y = asteroid.y,
angle = angle1,
stage = asteroid.stage - 1,
})
table.insert(asteroids, {
x = asteroid.x,
y = asteroid.y,
angle = angle2,
stage = asteroid.stage - 1,
})
end
table.remove(asteroids, asteroidIndex)
break
end
@ -104,15 +131,18 @@ function love.update(dt)
end
for asteroidIndex, asteroid in ipairs(asteroids) do
local asteroidSpeed = 20
asteroid.x = (asteroid.x + math.cos(asteroid.angle) * asteroidSpeed * dt) % arenaWidth
asteroid.y = (asteroid.y + math.sin(asteroid.angle) * asteroidSpeed * dt) % arenaHeight
asteroid.x = (asteroid.x + math.cos(asteroid.angle) * asteroidStages[asteroid.stage].speed * dt) % arenaWidth
asteroid.y = (asteroid.y + math.sin(asteroid.angle) * asteroidStages[asteroid.stage].speed * dt) % arenaHeight
if areCirclesIntersecting(shipX, shipY, shipRadius, asteroid.x, asteroid.y, asteroidRadius) then
love.load()
if areCirclesIntersecting(shipX, shipY, shipRadius, asteroid.x, asteroid.y, asteroidStages[asteroid.stage].radius) then
reset()
break
end
end
if #asteroids == 0 then
reset()
end
end
function love.draw()
@ -133,12 +163,12 @@ function love.draw()
for bulletIndex, bullet in ipairs(bullets) do
love.graphics.setColor(0, 1, 0)
love.graphics.circle('fill', bullet.x, bullet.y, 5)
love.graphics.circle('fill', bullet.x, bullet.y, bulletRadius)
end
for asteroidIndex, asteroid in ipairs(asteroids) do
love.graphics.setColor(1, 1, 0)
love.graphics.circle('fill', asteroid.x, asteroid.y, asteroidRadius)
love.graphics.circle('fill', asteroid.x, asteroid.y, asteroidStages[asteroid.stage].radius)
end
end
end