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