77 lines
2.6 KiB
Python
77 lines
2.6 KiB
Python
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))
|