turret_spiel
commit
9ba48e72cd
|
|
@ -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()
|
||||||
Loading…
Reference in New Issue