Files
PyGame-Tetris/hud.py
2025-04-21 20:33:36 +02:00

76 lines
2.8 KiB
Python

import pygame
import os
from enums import BrickColor
class Hud:
def __init__(self, screen_width, screen_height, tile_size, font_size=36, highscore_file="highscore.txt"):
self.score = 0
self.lines = 0
self.level = 0
self.highscore_file = highscore_file
self.highscore = self.load_highscore()
self.font = pygame.font.Font(None, font_size)
self.color = BrickColor.Red.value
self.screen_width = screen_width
self.screen_height = screen_height
self.tile_size = tile_size
def load_highscore(self):
if os.path.exists(self.highscore_file):
with open(self.highscore_file, 'r') as file:
try:
return int(file.read())
except ValueError:
return 0
return 0
def save_highscore(self):
with open(self.highscore_file, 'w') as file:
file.write(str(self.highscore))
def add_points(self, points):
self.score += points
if self.score > self.highscore:
self.highscore = self.score
self.save_highscore()
def add_lines(self, lines):
self.lines += lines
if lines > 2:
self.add_points(lines * lines * 100)
else:
self.add_points(lines * 100)
def level_up(self):
self.level += 1
def reset(self, reset_score=True):
if reset_score:
self.score = 0
def draw(self, screen):
# Score (top-left)
score_text = self.font.render(f"Score:", True, self.color)
score = self.font.render(f"{self.score}", True, self.color)
screen.blit(score_text, (self.tile_size / 2, self.tile_size))
screen.blit(score,(self.tile_size / 2, self.tile_size + 24))
lines_text = self.font.render(f"Lines:", True, self.color)
lines = self.font.render(f"{self.lines}", True, self.color)
screen.blit(lines_text, (self.tile_size / 2, self.tile_size * 2 + 24))
screen.blit(lines, (self.tile_size / 2, self.tile_size * 3))
level_text = self.font.render(f"Level:", True, self.color)
level = self.font.render(f"{self.level}", True, self.color)
screen.blit(level_text, (self.tile_size / 2, self.tile_size * 4))
screen.blit(level, (self.tile_size / 2, self.tile_size * 4 + 24))
# Highscore (top-center)
highscore_text = self.font.render(f"High Score:", True, self.color)
highscore = self.font.render(f"{self.highscore}", True, self.color)
screen.blit(highscore_text, (self.tile_size / 2, self.tile_size * 5 + 24))
screen.blit(highscore, (self.tile_size / 2, self.tile_size * 6))
next_text = self.font.render("Next:", True, self.color)
screen.blit(next_text, (self.tile_size * 15, self.tile_size))