Update game
parent
e074f61712
commit
8bef30be97
128
game
128
game
|
|
@ -0,0 +1,128 @@
|
||||||
|
import pygame
|
||||||
|
from settings import *
|
||||||
|
|
||||||
|
from world import World
|
||||||
|
from player import Player
|
||||||
|
from camera import Camera
|
||||||
|
from inventory import Inventory
|
||||||
|
from enemy_manager import EnemyManager
|
||||||
|
|
||||||
|
|
||||||
|
class Game:
|
||||||
|
def __init__(self):
|
||||||
|
# ----------------------------------
|
||||||
|
# Display Setup
|
||||||
|
# ----------------------------------
|
||||||
|
flags = pygame.SCALED
|
||||||
|
self.screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT), flags)
|
||||||
|
pygame.display.set_caption(GAME_TITLE)
|
||||||
|
|
||||||
|
self.clock = pygame.time.Clock()
|
||||||
|
self.running = True
|
||||||
|
self.paused = False
|
||||||
|
|
||||||
|
# ----------------------------------
|
||||||
|
# Core Systems
|
||||||
|
# ----------------------------------
|
||||||
|
self.world = World()
|
||||||
|
self.player = Player(100, 100)
|
||||||
|
self.camera = Camera(self.player)
|
||||||
|
self.inventory = Inventory()
|
||||||
|
self.enemy_manager = EnemyManager(self.world, self.player)
|
||||||
|
|
||||||
|
# ----------------------------------
|
||||||
|
# Debug
|
||||||
|
# ----------------------------------
|
||||||
|
self.font = pygame.font.SysFont("consolas", 18)
|
||||||
|
|
||||||
|
# ==========================================================
|
||||||
|
# MAIN LOOP
|
||||||
|
# ==========================================================
|
||||||
|
def run(self):
|
||||||
|
while self.running:
|
||||||
|
dt = self.clock.tick(FPS) / 1000
|
||||||
|
|
||||||
|
self.handle_events()
|
||||||
|
|
||||||
|
if not self.paused:
|
||||||
|
self.update(dt)
|
||||||
|
|
||||||
|
self.draw()
|
||||||
|
|
||||||
|
pygame.quit()
|
||||||
|
|
||||||
|
# ==========================================================
|
||||||
|
# EVENTS
|
||||||
|
# ==========================================================
|
||||||
|
def handle_events(self):
|
||||||
|
for event in pygame.event.get():
|
||||||
|
|
||||||
|
if event.type == pygame.QUIT:
|
||||||
|
self.running = False
|
||||||
|
|
||||||
|
if event.type == pygame.KEYDOWN:
|
||||||
|
if event.key == pygame.K_ESCAPE:
|
||||||
|
self.paused = not self.paused
|
||||||
|
|
||||||
|
# Mouse input for breaking/placing
|
||||||
|
if event.type == pygame.MOUSEBUTTONDOWN:
|
||||||
|
if event.button == 1: # Left click
|
||||||
|
self.world.break_block(
|
||||||
|
pygame.mouse.get_pos(),
|
||||||
|
self.camera
|
||||||
|
)
|
||||||
|
|
||||||
|
if event.button == 3: # Right click
|
||||||
|
self.world.place_block(
|
||||||
|
pygame.mouse.get_pos(),
|
||||||
|
self.camera
|
||||||
|
)
|
||||||
|
|
||||||
|
# ==========================================================
|
||||||
|
# UPDATE
|
||||||
|
# ==========================================================
|
||||||
|
def update(self, dt):
|
||||||
|
self.player.update(dt, self.world)
|
||||||
|
self.camera.update()
|
||||||
|
self.enemy_manager.update(dt)
|
||||||
|
|
||||||
|
# ==========================================================
|
||||||
|
# DRAW
|
||||||
|
# ==========================================================
|
||||||
|
def draw(self):
|
||||||
|
self.screen.fill(BACKGROUND_COLOR)
|
||||||
|
|
||||||
|
# Draw world relative to camera
|
||||||
|
self.world.draw(self.screen, self.camera)
|
||||||
|
|
||||||
|
# Draw entities
|
||||||
|
self.enemy_manager.draw(self.screen, self.camera)
|
||||||
|
self.player.draw(self.screen, self.camera)
|
||||||
|
|
||||||
|
# UI
|
||||||
|
self.inventory.draw(self.screen)
|
||||||
|
self.draw_ui()
|
||||||
|
|
||||||
|
pygame.display.flip()
|
||||||
|
|
||||||
|
# ==========================================================
|
||||||
|
# UI / DEBUG
|
||||||
|
# ==========================================================
|
||||||
|
def draw_ui(self):
|
||||||
|
if SHOW_FPS:
|
||||||
|
fps = self.clock.get_fps()
|
||||||
|
fps_text = self.font.render(f"FPS: {int(fps)}", True, (255, 255, 255))
|
||||||
|
self.screen.blit(fps_text, (10, 10))
|
||||||
|
|
||||||
|
if DEBUG_MODE:
|
||||||
|
debug_text = self.font.render(
|
||||||
|
f"Player: ({int(self.player.rect.x)}, {int(self.player.rect.y)})",
|
||||||
|
True,
|
||||||
|
(255, 255, 255)
|
||||||
|
)
|
||||||
|
self.screen.blit(debug_text, (10, 30))
|
||||||
|
|
||||||
|
if self.paused:
|
||||||
|
pause_text = self.font.render("PAUSED", True, (255, 0, 0))
|
||||||
|
rect = pause_text.get_rect(center=(SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2))
|
||||||
|
self.screen.blit(pause_text, rect)
|
||||||
Loading…
Reference in New Issue