import random import pygame import pygame.font from settings import GameSettings from map import Map from entity import Enemy, Player from projectiles import Projectiles from camera import Camera class Game: def __init__(self): self.settings = GameSettings() self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height)) pygame.display.set_caption(self.settings.caption) self.clock = pygame.time.Clock() self.map = Map(self, 0, 0) player_spawn_block = self.map.player_spawn offset = [ (self.settings.screen_width // 2) - player_spawn_block.x - (self.settings.block_size // 2), (self.settings.screen_height // 2) - player_spawn_block.y - (self.settings.block_size // 2) ] self.map.change_coords(offset[0], offset[1]) self.enemies = pygame.sprite.Group() self.projectiles = Projectiles(self) d = (self.settings.block_size - self.settings.entity_size) // 2 self.player = Player(self, self.map.player_spawn.x + d, self.map.player_spawn.y + d) self.camera = Camera(self) self.score = 0 def run(self): while self.settings.running: #FPS control self.clock.tick(self.settings.fps) #Events for event in pygame.event.get(): if event.type == pygame.QUIT: self.settings.running = False self.camera.update() self.enemies.update() #Spawn enemies if self.settings.enemy_spawn_rev < self.settings.enemy_spawn_rev_thresh: self.settings.enemy_spawn_rev -= self.settings.enemy_spawn_rev_delta if random.randint(1, self.settings.enemy_spawn_rev) == 1: self.spawn_enemy() #Render self.screen.fill((0, 0, 0)) self.map.update() #print(map) self.player.update() self.enemies.draw(self.screen) self.projectiles.update() self.draw_score() pygame.display.flip() return self.score def spawn_enemy(self): es = random.choice(self.map.enemy_spawns) self.enemies.add(Enemy(self, es.x, es.y)) def draw_score(self): fnt = pygame.font.SysFont("calibri", 40, True) score = fnt.render("Score: " + str(self.score), True, (255, 255, 255), (0, 0, 0)) self.screen.blit(score, (0, 0))