游戏可以运行
This commit is contained in:
26
game/wave.py
26
game/wave.py
@@ -1,22 +1,16 @@
|
||||
from game.enemy import Enemy
|
||||
from game.config import PATH_WAYPOINTS
|
||||
|
||||
|
||||
WAVE_DATA = [
|
||||
[{"type": "normal", "count": 5, "interval": 1.0}],
|
||||
[{"type": "normal", "count": 6, "interval": 0.8}, {"type": "swarm", "count": 4, "interval": 0.3}],
|
||||
[{"type": "normal", "count": 5, "interval": 0.8}, {"type": "fast", "count": 3, "interval": 0.6}],
|
||||
[{"type": "swarm", "count": 10, "interval": 0.25}, {"type": "normal", "count": 5, "interval": 0.7}],
|
||||
[{"type": "normal", "count": 5, "interval": 0.6}, {"type": "heavy", "count": 2, "interval": 1.5}, {"type": "boss", "count": 1, "interval": 2.0}],
|
||||
[{"type": "normal", "count": 8, "interval": 0.5}, {"type": "fast", "count": 5, "interval": 0.4}, {"type": "swarm", "count": 8, "interval": 0.2}],
|
||||
[{"type": "shield", "count": 3, "interval": 1.2}, {"type": "healer", "count": 2, "interval": 1.5}, {"type": "normal", "count": 6, "interval": 0.6}],
|
||||
[{"type": "heavy", "count": 4, "interval": 0.8}, {"type": "fast", "count": 5, "interval": 0.5}, {"type": "shield", "count": 3, "interval": 1.0}],
|
||||
[{"type": "swarm", "count": 15, "interval": 0.15}, {"type": "healer", "count": 3, "interval": 1.0}, {"type": "heavy", "count": 4, "interval": 0.7}],
|
||||
[{"type": "normal", "count": 10, "interval": 0.3}, {"type": "heavy", "count": 5, "interval": 0.5}, {"type": "fast", "count": 8, "interval": 0.3}, {"type": "shield", "count": 4, "interval": 0.8}, {"type": "healer", "count": 2, "interval": 1.0}, {"type": "boss", "count": 2, "interval": 2.0}],
|
||||
]
|
||||
|
||||
|
||||
class WaveManager:
|
||||
def __init__(self):
|
||||
def __init__(self, wave_data=None, waypoints=None):
|
||||
self.wave_data = wave_data or WAVE_DATA
|
||||
self.waypoints = waypoints or PATH_WAYPOINTS
|
||||
self.current_wave = 0
|
||||
self.spawn_queue = []
|
||||
self.spawn_timer = 0
|
||||
@@ -24,12 +18,12 @@ class WaveManager:
|
||||
self.all_waves_done = False
|
||||
|
||||
def start_next_wave(self):
|
||||
if self.current_wave >= len(WAVE_DATA):
|
||||
if self.current_wave >= len(self.wave_data):
|
||||
self.all_waves_done = True
|
||||
return False
|
||||
|
||||
self.spawn_queue = []
|
||||
for group in WAVE_DATA[self.current_wave]:
|
||||
for group in self.wave_data[self.current_wave]:
|
||||
for _ in range(group["count"]):
|
||||
self.spawn_queue.append((group["type"], group["interval"]))
|
||||
|
||||
@@ -38,6 +32,10 @@ class WaveManager:
|
||||
self.spawn_timer = 0
|
||||
return True
|
||||
|
||||
@property
|
||||
def total_waves(self):
|
||||
return len(self.wave_data)
|
||||
|
||||
def update(self, dt, enemies):
|
||||
if not self.wave_active:
|
||||
return
|
||||
@@ -50,11 +48,11 @@ class WaveManager:
|
||||
self.spawn_timer -= dt
|
||||
if self.spawn_timer <= 0:
|
||||
enemy_type, interval = self.spawn_queue.pop(0)
|
||||
enemies.append(Enemy(enemy_type))
|
||||
enemies.append(Enemy(enemy_type, self.waypoints))
|
||||
self.spawn_timer = self.spawn_queue[0][1] if self.spawn_queue else 0
|
||||
|
||||
def is_wave_complete(self):
|
||||
return not self.wave_active and self.current_wave > 0
|
||||
|
||||
def has_more_waves(self):
|
||||
return self.current_wave < len(WAVE_DATA)
|
||||
return self.current_wave < len(self.wave_data)
|
||||
|
||||
Reference in New Issue
Block a user