Implement a basic game loop that draws the startscreen, and the map after you hit the right button
158 lines
5.1 KiB
Python
158 lines
5.1 KiB
Python
import pygame
|
|
from src.button import Button
|
|
from src.settings import (
|
|
COLOR_BUTTON,
|
|
COLOR_BUTTON_HOVER,
|
|
COLOR_STARTSCREEN_BACKGROUND,
|
|
COLOR_STARTSCREEN_FONT_TITLE,
|
|
COLOR_STARTSCREEN_FONT_LABEL,
|
|
)
|
|
from src.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.wrong_name = False
|
|
|
|
self.button_start = Button("[ENTER] Matriculate",
|
|
500,
|
|
70,
|
|
20,
|
|
100,
|
|
self.button_color,
|
|
self.button_hover_color)
|
|
|
|
self.button_quit = Button("[ESC] Exmatriculate",
|
|
500,
|
|
70,
|
|
20,
|
|
190,
|
|
self.button_color,
|
|
self.button_hover_color)
|
|
|
|
self.text_input_name = TextInput(400,
|
|
40,
|
|
20,
|
|
310)
|
|
|
|
def run(self):
|
|
# 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_1 = self.font_label.render("Welcome to Silent FH", True, COLOR_STARTSCREEN_FONT_LABEL)
|
|
message_2 = self.font_label.render("Study with purpose. Survive with Coffee.", True,
|
|
COLOR_STARTSCREEN_FONT_LABEL)
|
|
|
|
self.screen.blit(message_1, (10, 50))
|
|
self.screen.blit(message_2, (10, 70))
|
|
|
|
# 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
|
|
label_input = self.font_label.render("Enter your student name or ID:", True,
|
|
COLOR_STARTSCREEN_FONT_LABEL)
|
|
self.screen.blit(label_input, (10, 280))
|
|
self.text_input_name.draw(self.screen)
|
|
|
|
# prepare error message when no input was submitted
|
|
label_input_error = self.font_label.render("Student not found. Please enter valid name/id.", True,
|
|
(255, 0, 0))
|
|
|
|
# get all events
|
|
events = pygame.event.get()
|
|
|
|
# react on button clicks
|
|
if button_start_pressed:
|
|
self.player_name = self.text_input_name.get_text()
|
|
|
|
if self.player_name.strip() != "":
|
|
print("Spielername:", self.player_name)
|
|
return "game"
|
|
else:
|
|
self.wrong_name = True
|
|
if button_quit_pressed:
|
|
return "quit"
|
|
|
|
# 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"
|
|
else:
|
|
self.wrong_name = True
|
|
|
|
if self.wrong_name:
|
|
self.screen.blit(label_input_error, (10, 350))
|
|
|
|
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() |