Compare commits

1 Commits
Author SHA1 Message Date
Finn-Luca Ortelbach 545b01cad1 Timer added 2026-03-19 14:51:03 +01:00
+31 -135
View File
@@ -1,27 +1,22 @@
from pygame import * from pygame import *
import random import random
from pygame.font import SysFont
init() init()
running = False running = False
game_started = False
in_game = False # Neue Variable: Sind wir im Spiel oder im Menü?
width, height = 1920, 1000 width, height = 1920, 1000
screen = display.set_mode((width, height)) screen = display.set_mode((width, height))
display.set_caption("Game") display.set_caption("Game")
clock = time.Clock() clock = time.Clock()
font = SysFont(None, 40) font = font.SysFont(None, 40)
title_font = SysFont(None, 80)
white = (255,255,255) white = (255,255,255)
blue = (0,0,255) blue = (0,0,255)
red = (255,0,0) red = (255,0,0)
green = (0,255,0) green = (0,255,0)
black = (0, 0, 0) black = (0, 0, 0)
gray = (128, 128, 128)
border = Rect(0, 0 , width, height) border = Rect(0, 0 , width, height)
@@ -31,15 +26,19 @@ speed = 10
points_p1 = 0 points_p1 = 0
points_p2 = 0 points_p2 = 0
c_r = 25 c_r = 25
c_d = c_r * 2 c_d = c_r * 2
c_x = random.randint(0, width - c_d) c_x = random.randint(0, width - c_d)
c_y = random.randint(0, height - c_d) c_y = random.randint(0, height - c_d)
c = Rect(c_x, c_y, c_d, c_d) c = Rect(c_x, c_y, c_d, c_d)
p1 = Rect(100, 200, p_size, p_size) p1 = Rect(100, 200, p_size, p_size)
p2 = Rect(600, 250, p_size, p_size) p2 = Rect(600, 250, p_size, p_size)
timer_sec = 120 timer_sec = 120
timer_bool = True timer_bool = True
@@ -55,124 +54,18 @@ def show_timer():
timer_text = font.render(f"Zeit: {int(timer_sec)}", True, black) timer_text = font.render(f"Zeit: {int(timer_sec)}", True, black)
screen.blit(timer_text, (10, 40)) screen.blit(timer_text, (10, 40))
def reset_game():
"""Setzt alle Spielvariablen zurück"""
global points_p1, points_p2, timer_sec, c_x, c_y, c, p1, p2
points_p1 = 0
points_p2 = 0
timer_sec = 120
c_x = random.randint(0, width - c_d)
c_y = random.randint(0, height - c_d)
c = Rect(c_x, c_y, c_d, c_d)
p1.topleft = (100, 200)
p2.topleft = (600, 250)
def start_screen():
global game_started, in_game
start_button = Rect(width // 2 - 100, height // 2 + 50, 200, 50)
quit_button = Rect(width // 2 - 100, height // 2 + 120, 200, 50)
while not game_started:
for e in event.get():
if e.type == QUIT:
return False
if e.type == MOUSEBUTTONDOWN:
mouse_pos = e.pos
if start_button.collidepoint(mouse_pos):
reset_game() # Setze Spiel zurück bevor es startet
in_game = True
return True
if quit_button.collidepoint(mouse_pos):
return False
# Zeichne Startbildschirm
screen.fill(blue)
# Titel
title_text = title_font.render("CATCH THE SQUARE", True, white)
title_rect = title_text.get_rect(center=(width // 2, height // 3))
screen.blit(title_text, title_rect)
# Spieler-Steuerung anzeigen
controls_text = font.render("Steuerung:", True, white)
screen.blit(controls_text, (width // 2 - 150, height // 2 - 100))
p1_controls = font.render("Spieler 1: Pfeiltasten", True, white)
screen.blit(p1_controls, (width // 2 - 150, height // 2 - 60))
p2_controls = font.render("Spieler 2: W A S D", True, white)
screen.blit(p2_controls, (width // 2 - 150, height // 2 - 20))
# Buttons
draw.rect(screen, green, start_button)
draw.rect(screen, red, quit_button)
start_text = font.render("START", True, white)
start_text_rect = start_text.get_rect(center=start_button.center)
screen.blit(start_text, start_text_rect)
quit_text = font.render("QUIT", True, white)
quit_text_rect = quit_text.get_rect(center=quit_button.center)
screen.blit(quit_text, quit_text_rect)
display.flip()
clock.tick(60)
def show_game_over():
"""Zeigt das Game Over an und kehrt nach 5 Sekunden zum Menü zurück"""
global game_started, in_game
screen.fill(white)
# Ergebnis anzeigen
end_text = font.render(
f"Ende! P1: {points_p1} | P2: {points_p2}",
True,
black
)
screen.blit(end_text, (width // 2 - 200, height // 2 - 50))
# Wer hat gewonnen?
if points_p1 > points_p2:
winner_text = font.render("Spieler 1 gewinnt!", True, blue)
elif points_p2 > points_p1:
winner_text = font.render("Spieler 2 gewinnt!", True, green)
else:
winner_text = font.render("Unentschieden!", True, black)
screen.blit(winner_text, (width // 2 - 150, height // 2))
# Zurück zum Menü Text
back_text = font.render("Zurück zum Hauptmenü...", True, gray)
screen.blit(back_text, (width // 2 - 150, height // 2 + 100))
display.flip()
time.wait(5000)
# Kehre zum Startmenü zurück
in_game = False
game_started = False
def game(): def game():
global running, points_p1, points_p2, c_x, c_y, c, timer_sec, in_game global running, points_p1, points_p2, c_x, c_y, c, timer_sec
while running and in_game: while running:
for e in event.get(): for e in event.get():
if e.type == QUIT: if e.type == QUIT:
running = False running = False
return print("Programm closed by user input")
# Optional: ESC-Taste zum Zurückkehren zum Menü
if e.type == KEYDOWN:
if e.key == K_ESCAPE:
in_game = False
return
keys = key.get_pressed() keys = key.get_pressed()
if keys[K_LEFT]: if keys[K_LEFT]:
p1.x -= speed p1.x -= speed
if keys[K_RIGHT]: if keys[K_RIGHT]:
@@ -182,6 +75,7 @@ def game():
if keys[K_UP]: if keys[K_UP]:
p1.y -= speed p1.y -= speed
if keys[K_a]: if keys[K_a]:
p2.x -= speed p2.x -= speed
if keys[K_d]: if keys[K_d]:
@@ -194,6 +88,7 @@ def game():
p1.clamp_ip(border) p1.clamp_ip(border)
p2.clamp_ip(border) p2.clamp_ip(border)
if p1.colliderect(p2): if p1.colliderect(p2):
p1.topleft = ( p1.topleft = (
random.randint(0, width - p_size), random.randint(0, width - p_size),
@@ -204,6 +99,7 @@ def game():
random.randint(0, height - p_size) random.randint(0, height - p_size)
) )
if p1.colliderect(c): if p1.colliderect(c):
c_x = random.randint(0, width - c_d) c_x = random.randint(0, width - c_d)
c_y = random.randint(0, height - c_d) c_y = random.randint(0, height - c_d)
@@ -216,17 +112,19 @@ def game():
c = Rect(c_x, c_y, c_d, c_d) c = Rect(c_x, c_y, c_d, c_d)
points_p2 += 1 points_p2 += 1
timer_sec -= clock.get_time() / 1000 timer_sec -= clock.get_time() / 1000
if timer_sec <= 0: if timer_sec <= 0:
# Zeit abgelaufen - zeige Game Over und kehre zum Menü zurück running = False
show_game_over()
return
# Zeichnen # Zeichnen
screen.fill(white) screen.fill(white)
draw.rect(screen, blue, p1) draw.rect(screen, blue, p1)
draw.rect(screen, green, p2) draw.rect(screen, green, p2)
draw.circle(screen, red, (c_x + c_r, c_y + c_r), c_r) draw.circle(screen, red, (c_x + c_r, c_y + c_r), c_r)
show_score(points_p1, points_p2) show_score(points_p1, points_p2)
if timer_bool: if timer_bool:
@@ -235,24 +133,22 @@ def game():
display.flip() display.flip()
clock.tick(60) clock.tick(60)
def main(): screen.fill(white)
global running, game_started, in_game end_text = font.render(
f"Ende! P1: {points_p1} | P2: {points_p2}",
True,
black
)
screen.blit(end_text, (width // 2 - 200, height // 2))
display.flip()
time.wait(7000)
def start():
global running
print("Starting Game")
running = True running = True
while running:
# Zeige Startbildschirm
if not start_screen():
break # Spieler hat Quit gewählt
# Starte das Spiel
game() game()
print("Game ended")
# Nach dem Spiel: Wenn running noch True ist, gehe zurück zum Menü start()
if not running:
break
quit() quit()
if __name__ == "__main__":
main()