145 lines
4.0 KiB
Python
Executable File
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()
|