turret_spiel

main
Polina Khomutova 2026-04-29 19:53:12 +02:00
commit 9ba48e72cd
1 changed files with 252 additions and 0 deletions

252
turret_spiel Normal file
View File

@ -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()