From 9ba48e72cd27174ae7d4bbeaa3b8cdea7b34cf22 Mon Sep 17 00:00:00 2001 From: Polina Khomutova Date: Wed, 29 Apr 2026 19:53:12 +0200 Subject: [PATCH] turret_spiel --- turret_spiel | 252 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100644 turret_spiel diff --git a/turret_spiel b/turret_spiel new file mode 100644 index 0000000..2c737a1 --- /dev/null +++ b/turret_spiel @@ -0,0 +1,252 @@ +import pygame +import math + +# Einstellungsteil + +# Fenster +pygame.init() +screen = pygame.display.set_mode((1000, 600)) +clock = pygame.time.Clock() +running = True + +# Name des Fensters +pygame.display.set_caption("Turret Spiel") + +# Font fürs Text +font = pygame.font.Font(None, 20) + +# Funktion, die Text schreibt +def write(text, location, color="black"): + screen.blit(font.render(text, True, color), location) + +# Funktion, die Geschenk zeichnet +def draw_target(pos, size, color="red"): + pygame.draw.rect(screen, color, [pos.x, pos.y - size + 1, size, size]) + pygame.draw.rect(screen, "green", [pos.x + size / 2 - size / 10, pos.y - size + 1, size / 5, size]) + pygame.draw.rect(screen, "green", [pos.x, pos.y - size + 1 + size / 3, size, size / 5]) + pygame.draw.rect( + screen, + "green", + [pos.x + size / 2, pos.y - size - 4, 10, 5], + border_bottom_left_radius=0, + border_top_left_radius=15, + border_top_right_radius=15, + border_bottom_right_radius=15, + ) + +# Textkoordinaten +text_angle_location = pygame.Vector2(80, 520) +text_power_location = pygame.Vector2(80, 540) +text_h_location = pygame.Vector2(80, 560) + +text_level_location = pygame.Vector2(900, 80) +#Level und Win +game_level = 1 +game_win = 0 + +#Textkoordinaten für Win +text_win_location = pygame.Vector2(450, 50) + +# Höhe und Breite des Fensters +screen_high = 600 +screen_width = 1000 + +# Parameter fürs Boden +ground_begin = pygame.Vector2(0, screen_high - 100 + 3) +ground_end = pygame.Vector2(screen_width, screen_high - 100 + 3) + +# Lauf Parameter +gun_length = 30 +gun_angle = 45 +gun_begin = pygame.Vector2(100, 500) +gun_end = pygame.Vector2(100 + gun_length * math.cos(math.radians(gun_angle)), + 500 - gun_length * math.sin(math.radians(gun_angle))) + +gun_power = 50 + +# Kugel Zeit-Parameter +bullet_tick = 0 +bullet_time = 0 +# Zwei Geschwindigkeiten der Kugel +bullet_speed_x = 0 +bullet_speed_y = 0 + +# Turret Startposition +turret_pos = pygame.Vector2(100, 500) + +# Anfangskoordinaten -- Entfernung und Höhe +bullet_s = 100 +bullet_h = 500 +bullet_pos = pygame.Vector2(bullet_s, bullet_h) + +#Wand +wall_1_x = 500 +wall_1_high = 50 +wall_1_width = 10 + +# Geschenk Parameter +target_x = 650 +target_y = 500 +target_size = 40 +target_move = 0 +target_step = -1 + +# while-Schleife +while running: + + # 6o Wiederholungen pro Sekunde, bzw. 60 fps. Wenn wir diese Zeile weglassen, wird die gesamte CPU-Leistung genutzt. + clock.tick(60) + + # Fenster zu schließen + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + + # Fenster mit weiße Farbe ausfüllen + screen.fill("white") + + # Boden zeichnen + pygame.draw.line(screen, "black", ground_begin, ground_end, 5) + # Turret zeichnen + pygame.draw.circle(screen, "black", turret_pos, 20, 0, + True, True, False, False) + # Lauf zeichnen + pygame.draw.line(screen, "black", gun_begin, gun_end, 5) + + # Text: + # Winkel + text_angle = "Angle: " + str(gun_angle) + write(text_angle, text_angle_location) + # Kraft + text_power = "Power: " + str(gun_power) + write(text_power, text_power_location) + # Höhe + text_h = "High: " + str(int(bullet_h)) + write(text_h, text_h_location) + + keys = pygame.key.get_pressed() + + # Spiel von Vorne anfangen + if keys[pygame.K_ESCAPE]: + game_level = 1 + target_x = 650 + target_move = 0 + game_win = 0 + + # Spiel anhalten, andere Tasten ignorieren + if game_win == 1: + continue + + # W und S für Winkel + if keys[pygame.K_w]: + if gun_angle < 80: + gun_angle += 1 + + if keys[pygame.K_s]: + if gun_angle > 10: + gun_angle -= 1 + gun_end = pygame.Vector2(100 + gun_length * math.cos(math.radians(gun_angle)), + 500 - gun_length * math.sin(math.radians(gun_angle))) + + # A und D für Kraft + if keys[pygame.K_a]: + if gun_power > 40: + gun_power -= 1 + + if keys[pygame.K_d]: + if gun_power < 100: + gun_power += 1 + + # Leertaste -- Kugelschoß + if keys[pygame.K_SPACE]: + if bullet_tick == 0: + bullet_tick = 1 + bullet_speed_x = gun_power * math.cos(math.radians(gun_angle)) + bullet_speed_y = gun_power * math.sin(math.radians(gun_angle)) + + # Kugel Zeitskalierung + bullet_time = bullet_tick / 10 + + # Kugel y-Koordinate + bullet_h = bullet_speed_y * bullet_time - (9.8 * bullet_time * bullet_time) / 2 + bullet_pos.y = 500 - bullet_h + + # Kugel x-Koordinate + bullet_s = bullet_speed_x * bullet_time + bullet_pos.x = 100 + bullet_s + + # Kugel zeichnen + pygame.draw.circle(screen, "red", bullet_pos, 3) + + match game_level: + case 1: + # Große Geschenk, kleine Wand + target_size = 40 + wall_1_high = 50 + case 2: + # Geschenk -- neue Position + target_x = 900 + case 3: + # Geschenk -- neue Größe und Position + target_size = 25 + target_x = 800 + case 4: + # Wand mitte + wall_1_high = 200 + case 5: + # Wand hoch + wall_1_high = 300 + case 6: + # Wand höher + wall_1_high = 400 + case 7: + # Geschenk -- Bewegung + target_move = 1 + case _: + write("You win!", text_win_location, "red") + game_win = 1 + + # Geschenk -- Bewegen in Level 7 + if target_move == 1: + if target_x <= 550 or target_x >= 950: + target_step *= -1 + target_x += target_step + + # Geschenk Position + target_pos = pygame.Vector2(target_x, target_y) + # Geschenk Zeichnen + draw_target(target_pos, target_size) + + # Wand Position + wall_1_pos = pygame.Vector2(wall_1_x, screen_high - 100 - wall_1_high) + # Wand Zeichnen + pygame.draw.rect(screen, "black", [wall_1_pos.x, wall_1_pos.y, wall_1_width, wall_1_high + 1]) + + # Level-Nummer anzeigen + text_game_level = "Level: " + str(game_level) + write(text_game_level, text_level_location) + + # Objekte auf den Schirm anzuzeigen + pygame.display.flip() + + # Überprüfungen + # Wir prüfen, ob die Kugel den Boden erreicht hat, und wenn ja, stoppen wir sie. + if bullet_h <= 0: + bullet_tick = 0 + + # Kugel stoppt, wenn der Kugel das Geschenk berüht + if (bullet_pos.x >= target_pos.x and bullet_pos.x <= target_pos.x + target_size + and bullet_pos.y >= target_pos.y - target_size and bullet_pos.y <= target_pos.y): + game_level += 1 + bullet_tick = 0 + + # Kugel stoppt, wenn der Kugel die Wand berüht + if (bullet_pos.x >= wall_1_pos.x and bullet_pos.x <= wall_1_pos.x + wall_1_width + and bullet_pos.y >= wall_1_pos.y and bullet_pos.y <= wall_1_pos.y + wall_1_high): + bullet_tick = 0 + + # Wenn der Ball den Boden noch nicht erreicht hat, erhöhen wir die Variable bullet_tick kontinuierlich: + if bullet_tick > 0: + bullet_tick += 1 + +pygame.quit() \ No newline at end of file