summaryrefslogtreecommitdiff
path: root/asteroidfield.py
diff options
context:
space:
mode:
authoryuzu-eva <stevenhu@web.de>2024-09-20 17:55:28 +0200
committeryuzu-eva <stevenhu@web.de>2024-09-20 17:55:28 +0200
commit220e57f42fca7bd241041e5c808f62a3fa7cfa2a (patch)
tree1234322a927b2572ed2cf86500255a5cb35e0e02 /asteroidfield.py
parent681826fc3272b9ec0e60c6863381404c7ee42094 (diff)
add asteroids
Diffstat (limited to 'asteroidfield.py')
-rw-r--r--asteroidfield.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/asteroidfield.py b/asteroidfield.py
new file mode 100644
index 0000000..da82d41
--- /dev/null
+++ b/asteroidfield.py
@@ -0,0 +1,51 @@
+import pygame
+import random
+from asteroid import Asteroid
+from constants import *
+
+
+class AsteroidField(pygame.sprite.Sprite):
+ edges = [
+ [
+ pygame.Vector2(1, 0),
+ lambda y: pygame.Vector2(-ASTEROID_MAX_RADIUS, y * SCREEN_HEIGHT),
+ ],
+ [
+ pygame.Vector2(-1, 0),
+ lambda y: pygame.Vector2(
+ SCREEN_WIDTH + ASTEROID_MAX_RADIUS, y * SCREEN_HEIGHT
+ ),
+ ],
+ [
+ pygame.Vector2(0, 1),
+ lambda x: pygame.Vector2(x * SCREEN_WIDTH, -ASTEROID_MAX_RADIUS),
+ ],
+ [
+ pygame.Vector2(0, -1),
+ lambda x: pygame.Vector2(
+ x * SCREEN_WIDTH, SCREEN_HEIGHT + ASTEROID_MAX_RADIUS
+ ),
+ ],
+ ]
+
+ def __init__(self):
+ pygame.sprite.Sprite.__init__(self, self.containers)
+ self.spawn_timer = 0.0
+
+ def spawn(self, radius, position, velocity):
+ asteroid = Asteroid(position.x, position.y, radius)
+ asteroid.velocity = velocity
+
+ def update(self, dt):
+ self.spawn_timer += dt
+ if self.spawn_timer > ASTEROID_SPAWN_RATE:
+ self.spawn_timer = 0
+
+ # spawn a new asteroid at a random edge
+ edge = random.choice(self.edges)
+ speed = random.randint(40, 100)
+ velocity = edge[0] * speed
+ velocity = velocity.rotate(random.randint(-30, 30))
+ position = edge[1](random.uniform(0, 1))
+ kind = random.randint(1, ASTEROID_KINDS)
+ self.spawn(ASTEROID_MIN_RADIUS * kind, position, velocity)