Sem4SE/A7/moving_box.py
2026-05-21 14:52:47 +02:00

145 lines
4.0 KiB
Python
Executable File

import pygame
from random import randint
object_position = []
object_size = ()
object_speed = []
size = (640, 400)
sch_pos = size[0]/2 - size[0]/8 #Mittig - Hälfte der Schlägerbreite
sch_speed = 0 #VArtiable zur festlegung der Position
sch_base_speed = 7 #Verschiebungsgeschwindigkeit
game_over = False #Festlegen wenn Game Over
wuerfel = randint(1, 7) # Ganze Zufallszahl aus [1, …, 7[
def init():
global object_position
global object_size, object_speed
global object_image
global paddle_speed
object_image = pygame.image.load('ohm.png')
# Initialisierung der Bibliothek pygame
pygame.init()
# Vorbereiten der Oberfäche
pygame.display.set_mode(size)
pygame.display.set_caption("Pong!")
# Spieldaten initialisieren
object_position = [size[0]/2, size[1]/2]
object_speed = [randint(1,7), randint(1,7)]
object_size = (50, 50)
def draw():
# Benötigte Farben als RGB-Werte
black = (0, 0, 0)
red = (255, 0, 0)
# Zeichnen des aktuellen Spielzustands
window = pygame.display.get_surface()
window.fill(black)
window.blit(object_image, object_position)
#Schläger Größe ans Fenster Anspassen
schläger = pygame.Rect(sch_pos,
size[1]-22,
size[0]/4,
size[1]/25)
pygame.draw.rect(window, red, schläger) # und Zeichnen, mit der position schläger
if game_over:
font = pygame.font.SysFont(None, 60)
text = font.render("GAME OVER", True, (255, 255, 255))
window.blit(text, (180, 150))
pygame.display.flip()
# "Umschalten" der aktuellen Anzeige auf die
# gerade gezeichnete Anzeige
def update():
global object_position
global object_speed
global sch_pos
global game_over
sch_pos += sch_speed
# Abmessungen des Game-Fensters ermitteln
window = pygame.display.get_surface()
window_size = (window.get_width(),
window.get_height())
#Hier wird das erste mal die Dimensionen festgelegt, wichtig für Kollision
logo_rect = pygame.Rect(
object_position[0],
object_position[1],
object_size[0],
object_size[1]
)
#eigentlich kann ich den aus draw() übernehmen aber ich hab vergessen wie
schläger = pygame.Rect(
sch_pos,
size[1]-22,
size[0]/4,
size[1]/25
)
#y-Richtung umdrehen
if logo_rect.colliderect(schläger) and object_speed[1] > 0:
object_speed[1] *= -1
#Bouncing
for dim in [0, 1]:
# Bewegung des Objekts
object_position[dim] += object_speed[dim]
# Bouncing?
if object_position[dim] < 0:
object_speed[dim] *= -1
end = object_position[dim] + object_size[dim]
if end > window_size[dim]:
object_speed[dim] *= -1
if object_position[1] + object_size[1] >= size[1]: #Position = Wert von 0 bis 400 - oben links, size[o] = 40 (oderso), wenn die zusammen gleich oder größer sind als das Window in Vertikal, berührt das Logo die untere Kante
game_over = True
def user_input():
global sch_speed
global sch_base_speed
global game_over
# Alle Events seit dem letzten Durchlauf
for event in pygame.event.get():
if event.type == pygame.QUIT:
return False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
return False
if event.key == pygame.K_LEFT: #Linksclick
sch_speed = -sch_base_speed
if event.key == pygame.K_RIGHT: #Rechtsclick
sch_speed = sch_base_speed
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: #Key wieder hoch
sch_speed = 0
return True
init()
running = True
clock=pygame.time.Clock()
while running:
clock.tick(60) # max 60 frames / sec
running = user_input()
update()
draw()