mirror of
https://github.com/OpenBMB/ChatDev.git
synced 2026-04-27 12:18:15 +00:00
76 lines
2.7 KiB
Python
76 lines
2.7 KiB
Python
'''
|
|
This file contains the Game class which manages the game logic.
|
|
'''
|
|
import pygame
|
|
from player import Player
|
|
from enemy import Enemy
|
|
from bullet import Bullet
|
|
class Game:
|
|
def __init__(self, screen):
|
|
self.screen = screen
|
|
self.clock = pygame.time.Clock()
|
|
self.destroyed_count = 0
|
|
self.paused = False
|
|
# Create the player
|
|
player_x = 400
|
|
player_y = 500
|
|
self.player = Player(player_x, player_y)
|
|
# Create the enemies
|
|
self.enemies = []
|
|
self.spawn_enemies()
|
|
# Create the bullets
|
|
self.bullets = []
|
|
def spawn_enemies(self):
|
|
enemy_x = 100
|
|
enemy_y = 50
|
|
enemy_spacing = 100
|
|
num_enemies = 6
|
|
for i in range(num_enemies):
|
|
enemy = Enemy(enemy_x + i * enemy_spacing, enemy_y)
|
|
self.enemies.append(enemy)
|
|
def handle_events(self):
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT:
|
|
pygame.quit()
|
|
quit()
|
|
elif event.type == pygame.KEYDOWN:
|
|
if event.key == pygame.K_SPACE:
|
|
bullet_x = self.player.x + self.player.width / 2
|
|
bullet_y = self.player.y
|
|
bullet = Bullet(bullet_x, bullet_y)
|
|
self.bullets.append(bullet)
|
|
def update(self):
|
|
if not self.paused:
|
|
for bullet in self.bullets:
|
|
bullet.update()
|
|
for enemy in self.enemies:
|
|
enemy.update()
|
|
self.player.update()
|
|
# Check for collisions between bullets and enemies
|
|
destroyed_enemies = []
|
|
for bullet in self.bullets:
|
|
for enemy in self.enemies:
|
|
if bullet.collides_with(enemy):
|
|
destroyed_enemies.append(enemy)
|
|
self.destroyed_count += 1
|
|
# Remove destroyed enemies and bullets
|
|
for enemy in destroyed_enemies:
|
|
self.enemies.remove(enemy)
|
|
self.bullets = [bullet for bullet in self.bullets if not bullet.collides_with_any(self.enemies)]
|
|
def draw(self):
|
|
self.screen.fill((0, 0, 0))
|
|
for bullet in self.bullets:
|
|
bullet.draw(self.screen)
|
|
for enemy in self.enemies:
|
|
enemy.draw(self.screen)
|
|
self.player.draw(self.screen)
|
|
self.clock.tick(60)
|
|
def get_destroyed_count(self):
|
|
return self.destroyed_count
|
|
def enemy_reached_bottom(self):
|
|
for enemy in self.enemies:
|
|
if enemy.y + enemy.height >= 600:
|
|
return True
|
|
return False
|
|
def pause(self):
|
|
self.paused = True |