PyGame Problem
Verfasst: Montag 21. Dezember 2020, 10:42
Sehr geehrte Forums Nutzer,
Ich habe leider ein kleines Problem mit PyGame, ich möchte ein Pong artiges Spiel programmieren und habe dafür auch schon den Großteil des Codes. Im Spiel soll es einen eckigen Ball und einen Schläger geben, der Ball soll immer fallen, es sei den er wird vom Schläger getroffen, dann "prallt" er an ihm ab und fliegt wieder nach oben, bis er den Rand des Fensters berührt. Nur beim Starten des Spieles fällt der Ball wie gewollt, buggt dann aber im Schläger, ich weiß leider echt nicht woran das liegt bzw. wie man das lösen kann. Ich würde mich über Hilfe sehr freuen! Hier der Code:
PS: ich entschuldige mich jetzt schonmal für meinen Codestil und die Benennung der Variablen!
Ich habe leider ein kleines Problem mit PyGame, ich möchte ein Pong artiges Spiel programmieren und habe dafür auch schon den Großteil des Codes. Im Spiel soll es einen eckigen Ball und einen Schläger geben, der Ball soll immer fallen, es sei den er wird vom Schläger getroffen, dann "prallt" er an ihm ab und fliegt wieder nach oben, bis er den Rand des Fensters berührt. Nur beim Starten des Spieles fällt der Ball wie gewollt, buggt dann aber im Schläger, ich weiß leider echt nicht woran das liegt bzw. wie man das lösen kann. Ich würde mich über Hilfe sehr freuen! Hier der Code:
Code: Alles auswählen
import pygame
import random
pygame.init()
screen = pygame.display.set_mode([400,500])
pygame.display.set_caption("Pong")
### Farben
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
done = False
fps = 25
clock = pygame.time.Clock()
speed = 5
class Pong:
def __init__(self):
self.direction = 0
self.x = 125
self.y = 500-25
self.ball_x = 190
self.ball_y = 400
self.ball_x_richtung = 0
def left(self):
self.direction = 1
def right(self):
self.direction = -1
def stil(self):
self.direction = 0
def colides(self):
if self.ball_y == self.y and self.ball_x + 10 >= self.x <= self.ball_x:
self.ball_x_richtung = random.randint(-2, 2)
return True
else:
return False
def colides_with_border(self):
if self.ball_y == 1 or self.ball_x == 1 or self.ball_x + 10 >= 399:
return True
return False
def losed(self):
if self.ball_y - 10 > self.y:
return True
return False
def loop(self):
print(self.colides())
### Schläger
if self.direction == 1 and self.x > 0:
self.x -= speed
if self.direction == 0:
self.x = self.x
if self.direction == -1 and self.x < 400-150:
self.x += speed
### Ball
Fall = True
if self.colides():
Fall = False
if Fall:
self.ball_y += 5
self.ball_x += self.ball_x_richtung
if not Fall:
self.ball_y -= 5
self.ball_x_richtung = random.randint(-2, 2)
self.ball_x += self.ball_x_richtung
if self.colides_with_border():
self.ball_x += self.ball_x_richtung
Fall = True
if self.losed():
global done
done = True
def draw(self):
screen.fill(color=BLACK)
pygame.draw.rect(screen, WHITE, (self.x, self.y, 150, 12), 0)
pygame.draw.rect(screen, WHITE, (self.ball_x, self.ball_y, 10, 10))
pygame.display.update()
game = Pong()
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT: done = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and event.key == pygame.K_DOWN:
game.stil()
if event.key == pygame.K_LEFT:
game.left()
if event.key == pygame.K_RIGHT:
game.right()
if event.type == pygame.KEYUP:
game.stil()
game.draw()
game.loop()
clock.tick(fps)
pygame.quit()