From 8bef30be97a149cf5109cb399ad8fd6fc7bc2723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filips=20Kalni=C5=86=C5=A1?= Date: Wed, 11 Feb 2026 06:26:18 +0000 Subject: [PATCH] Update game --- game | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) diff --git a/game b/game index e69de29..58512a6 100644 --- a/game +++ b/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)