Files
silent-fh/src/startscreen.py
T

143 lines
4.4 KiB
Python

import pygame
from button import Button
from settings import (COLOR_BUTTON,
COLOR_BUTTON_HOVER,
COLOR_STARTSCREEN_BACKGROUND,
COLOR_STARTSCREEN_FONT_TITLE,
COLOR_STARTSCREEN_FONT_LABEL)
from text_input import TextInput
class Startscreen:
def __init__(self, screen):
self.screen = screen
self.font_title = pygame.font.SysFont("Arial", 36)
self.font_label = pygame.font.SysFont("Arial", 20)
self.button_color = COLOR_BUTTON
self.button_hover_color = COLOR_BUTTON_HOVER
self.player_name = ""
self.button_start = Button("[ENTER] Immatrikulieren",
500,
70,
20,
60,
self.button_color,
self.button_hover_color)
self.button_quit = Button("[ESC] Exmatrikulieren",
500,
70,
20,
150,
self.button_color,
self.button_hover_color)
self.text_input_name = TextInput(400,
40,
20,
240)
def run(self):
# get all events
events = pygame.event.get()
# check events
for event in events:
if event.type == pygame.QUIT:
return "quit"
# forward event to text input box
self.text_input_name.handle_event(event)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
return "quit"
if event.key == pygame.K_RETURN:
self.player_name = self.text_input_name.get_text()
if self.player_name.strip() != "":
print("Spielername:", self.player_name)
return "game"
# set background color
self.screen.fill(COLOR_STARTSCREEN_BACKGROUND)
# set title and intro/welcome message
title = self.font_title.render("SILENT FH", True, COLOR_STARTSCREEN_FONT_TITLE)
self.screen.blit(title, (10, 10))
message = self.font_label.render("Welcome to FH - Study with purpose", True, COLOR_STARTSCREEN_FONT_LABEL)
# draw buttons and get click state
button_start_pressed = self.button_start.draw(self.screen)
button_quit_pressed = self.button_quit.draw(self.screen)
# draw text input box
self.text_input_name.draw(self.screen)
# react on button clicks
if button_start_pressed:
return "game"
if button_quit_pressed:
return "quit"
# check key down events - exit/quit
for event in pygame.event.get():
if event.type == pygame.QUIT:
return "quit"
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN:
return "game"
if event.key == pygame.K_ESCAPE:
return "quit"
return "startscreen"
# test function fro temporary testing
if __name__ == "__main__":
pygame.init()
screen = pygame.display.set_mode((960, 640))
pygame.display.set_caption("Silent FH - Startscreen Test")
clock = pygame.time.Clock()
startscreen = Startscreen(screen)
state = "startscreen"
running = True
while running:
clock.tick(60)
if state == "startscreen":
state = startscreen.run()
elif state == "game":
screen.fill((30, 30, 30))
font = pygame.font.SysFont("Arial", 36)
text = font.render("GAME STARTED", True, (255, 255, 255))
screen.blit(text, (300, 280))
info = font.render("Press ESC to quit", True, (150, 150, 150))
screen.blit(info, (300, 330))
for event in pygame.event.get():
if event.type == pygame.QUIT:
state = "quit"
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
state = "quit"
elif state == "quit":
running = False
pygame.display.flip()
pygame.quit()