Ich versuche gerade, Pong in Pygame zu erstellen. Dies ist mein Code:Pygame-Code wird nicht ausgeführt (Fenster wird nicht geöffnet)
import sys, pygame
from pygame.locals import *
FPS = 60
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
WINDOWWIDTH = 400
WINDOWHEIGHT = 300
LINETHICKNESS = 10
PADDLESIZE = 50
PADDLEOFFSET = 20
def drawArena():
DISPLAYSURF.fill((BLACK))
pygame.draw.rect(DISPLAYSURF, WHITE, ((0,0),(WINDOWWIDTH,WINDOWHEIGHT)), LINETHICKNESS*2)
pygame.draw.line(DISPLAYSURF, WHITE, ((WINDOWWIDTH/2),0),((WINDOWWIDTH/2),WINDOWHEIGHT), (LINETHICKNESS/4))
def drawPaddle(paddle):
if paddle.bottom > (WINDOWHEIGHT - LINETHICKNESS):
paddle.bottom = WINDOWHEIGHT - LINETHICKNESS
elif paddle.top > LINETHICKNESS:
paddle.top = LINETHICKNESS
pygame.draw.rect(DISPLAYSURF, WHITE, paddle)
def drawBall(ball):
pygame.draw.rect(DISPLAYSURF, WHITE, ball)
def moveBall(ball, ballDirX, ballDirY):
ball.x += ballDirX
ball.y += ballDirY
return ball
def checkWallCollision(ball, ballDirX, ballDirY):
if ball.top == (LINETHICKNESS) or ball.bottom == (WINDOWHEIGHT - LINETHICKNESS):
ballDirY = ballDirY * -1
if ball.left == (LINETHICKNESS) or ball.right == (WINDOWHEIGHT - LINETHICKNESS):
ballDirX = ballDirX * -1
return ballDirX, ballDirY
def checkPaddleCollision(ball, ballDirX, paddle1, paddle2):
if ballDirX == -1 and paddle1.right == ball.left and paddle1.top < ball.top and paddle1.bottom > ball.bottom:
return -1
elif ballDirX == -1 and paddle2.left == ball.right and paddle2.top < ball.top and paddle2.bottom > ball.bottom:
return -1
else:
return 1
def checkPointScored(paddle1, ball, score, ballDirX):
if ball.left == LINETHICKNESS:
return 0
elif ballDirX == -1 and paddle1.right == ball.left and paddle1.top < ball.top and paddle1.bottom > ball.bottom:
score += 1
elif ball.right == WINDOWWIDTH - LINETHICKNESS:
score += 5
return score
else: return score
def aI(ball, ballDirX, paddle2):
if ballDirX == -1:
if paddle2.centery < (WINDOWHEIGHT/2):
paddle2.y += 1
elif paddle2.centery > (WINDOWHEIGHT/2):
paddle2.y -= 1
elif ballDirX == 1:
if paddle2.centery < ball.centery:
paddle2.y += 1
else:
paddle2.y -=1
return paddle2
def displayScore(score):
resultSurf = BASICFONT.render('Score = %s' %(score), True, WHITE)
resultRect = resultSurf,get_rect()
resultRect.topleft = WINDOWWIDTH = 150, 25
DISPLAYSURF.blit(resultSurf, resultRect)
def main():
pygame.init()
global DISPLAYSURF
global BASICFONT, BASICFONTSIZE
BASICFONTSIZE = 20
BASICFONT = pygame.font.Font('freesansbold.ttf', BASICFONTSIZE)
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))
pygame.display.set_caption('Pong')
ballX = WINDOWWIDTH/2 - LINETHICKNESS/2
ballY = WINDOWHEIGHT/2 - LINETHICKNESS/2
playerOnePosition = (WINDOWHEIGHT - PADDLESIZE) /2
playerTwoPosition = (WINDOWHEIGHT - PADDLESIZE) /2
score = 0
ballDirX = -1
ballDirY = -1
paddle1 = pygame.Rect(PADDLEOFFSET, playerOnePosition, LINETHICKNESS, PADDLESIZE)
paddle2 = pygame.Rect(WINDOWWIDTH - PADDLEOFFSET - LINETHICKNESS, playerTwoPosition, LINETHICKNESS, PADDLESIZE)
ball = pygame.Rect(ballX, ballY, LINETHICKNESS, LINETHICKNESS)
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
while True: #main game loop
pygame.event.get()
pygame.event.pump()
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
pygame.display.update()
FPSCLOCK.tick(FPS)
if __name__=='__main__':
main()
Mein Problem ist, wenn ich die Datei durch die Schale laufen die Ausgabe:
Python 3.6.0 |Continuum Analytics, Inc.| (default, Dec 23 2016, 11:57:41) on Windows (64 bits).
This is the Pyzo interpreter with integrated event loop for TK.
Type 'help' for help, type '?' for a list of *magic* commands.
Running script: "H:\pong.py"
jedoch das Fenster, das ich geschaffen wird nicht angezeigt, und es scheint, als ob es ist abgestürzt, sobald es geöffnet wurde oder etwas Ähnliches. Hilf mir, herauszufinden, was das ist, bitte!
Unter der Annahme, dass der Code mit dem tatsächlichen Einzug gebucht wird, wird nichts tatsächlich ausgeführt wird - die letzten beiden Zeilen, die aufrufen sollte 'main()' sind eingerückt, so dass sie ein Teil der Haupt sind, anstatt auf die oberste Ebene. – jasonharper