mirror of
https://github.com/OpenBMB/ChatDev.git
synced 2026-04-28 04:38:27 +00:00
88 lines
3.2 KiB
Python
88 lines
3.2 KiB
Python
'''
|
|
This file contains the Game class which manages the game loop and overall game logic.
|
|
'''
|
|
import pygame
|
|
from player import Player
|
|
from obstacle import Obstacle
|
|
from powerup import Powerup
|
|
import random
|
|
class Game:
|
|
def __init__(self):
|
|
self.screen_width = 800
|
|
self.screen_height = 600
|
|
self.screen = pygame.display.set_mode((self.screen_width, self.screen_height))
|
|
pygame.display.set_caption("Retro Runner")
|
|
self.clock = pygame.time.Clock()
|
|
self.is_running = True
|
|
self.player = Player()
|
|
self.obstacles = []
|
|
self.powerups = []
|
|
self.score = 0
|
|
def run(self):
|
|
while self.is_running:
|
|
self.handle_events()
|
|
self.update()
|
|
self.render()
|
|
self.clock.tick(60)
|
|
def handle_events(self):
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT:
|
|
self.is_running = False
|
|
elif event.type == pygame.KEYDOWN:
|
|
if event.key == pygame.K_SPACE:
|
|
self.player.jump()
|
|
elif event.key == pygame.K_DOWN:
|
|
self.player.slide()
|
|
def update(self):
|
|
self.player.update()
|
|
self.spawn_obstacles()
|
|
self.spawn_powerups()
|
|
self.check_collisions()
|
|
self.score += 1
|
|
for obstacle in self.obstacles:
|
|
obstacle.update()
|
|
if obstacle.x + obstacle.width < 0:
|
|
self.obstacles.remove(obstacle)
|
|
for powerup in self.powerups:
|
|
powerup.update()
|
|
if powerup.x + powerup.width < 0:
|
|
self.powerups.remove(powerup)
|
|
def render(self):
|
|
self.screen.fill((0, 0, 0))
|
|
self.player.draw(self.screen)
|
|
for obstacle in self.obstacles:
|
|
obstacle.draw(self.screen)
|
|
for powerup in self.powerups:
|
|
powerup.draw(self.screen)
|
|
self.draw_score()
|
|
pygame.display.flip()
|
|
def spawn_obstacles(self):
|
|
if len(self.obstacles) < 5:
|
|
x = self.screen_width
|
|
y = random.randint(400, 500)
|
|
width = random.randint(50, 100)
|
|
height = random.randint(50, 100)
|
|
obstacle = Obstacle(x, y, width, height)
|
|
self.obstacles.append(obstacle)
|
|
def spawn_powerups(self):
|
|
if len(self.powerups) < 2:
|
|
x = self.screen_width
|
|
y = random.randint(300, 400)
|
|
width = 50
|
|
height = 50
|
|
powerup = Powerup(x, y, width, height)
|
|
self.powerups.append(powerup)
|
|
def check_collisions(self):
|
|
player_rect = pygame.Rect(self.player.x, self.player.y, self.player.width, self.player.height)
|
|
powerups_to_remove = []
|
|
for powerup in self.powerups:
|
|
powerup_rect = pygame.Rect(powerup.x, powerup.y, powerup.width, powerup.height)
|
|
if player_rect.colliderect(powerup_rect):
|
|
powerups_to_remove.append(powerup)
|
|
self.score += 10
|
|
for powerup in powerups_to_remove:
|
|
self.powerups.remove(powerup)
|
|
def draw_score(self):
|
|
font = pygame.font.Font(None, 36)
|
|
score_text = font.render("Score: " + str(self.score), True, (255, 255, 255))
|
|
self.screen.blit(score_text, (10, 10)) |