2016-12-25 8 views
1

初心者の多くの初心者のプログラマーのように、私はポンゲームをコーディングすることに決めました。これは私の2回目の試みです。最初はハードなコードで、クラスも機能もほとんどないので、最初から始めました。私は現在、パドルクラスとメインループを持っています。パドルを上下に動かすための機能を記述しましたが、問題があります。私がパドルを動かすためにキーを押すと、ちょうど上下に伸び、実際には動かない。これまでのコードはここにあります:PythonでPongをPygameで作成する際に問題が発生しました。私はそれを動かすとパドルが伸びる

#PONG GAME IN PYTHON WITH PYGAME 

import pygame 
import time 

pygame.init() 

white = (255, 244, 237) 
black = (0, 0, 0) 

largeFont = pygame.font.Font("pongFont.TTF", 75) 
mediumFont = pygame.font.Font("pongFont.TTF", 50) 
smallFont = pygame.font.Font("pongFont.TTF", 25) 

displayWidth = 800 
displayHeight = 600 

gameDisplay = pygame.display.set_mode((displayWidth, displayHeight)) 
pygame.display.set_caption("Pong") 

FPS = 60 
menuFPS = 10 
clock = pygame.time.Clock() 

#Paddle Class 
class Paddle: 

    def __init__(self, player): 

     self.length = 100 
     self.width = 8 
     self.yVelocity = 0 
     self.y = (displayHeight - self.length)/2 

     #Puts player 1 paddle on left and player 2 on right 
     if player == 1: 
      self.x = 3 * self.width 
     elif player == 2: 
      self.x = displayWidth - 4 * self.width 

    #Did paddle hit top or bottom? 
    def checkWall(self): 

     if self.y <= 0: 
      return "top" 
     elif self.y >= displayHeight - self.length: 
      return "bottom" 

    def stop(self): 

     self.yVelocity = 0 

    def moveUp(self): 

     if self.checkWall() == "top": 
      self.stop() 
     else: 
      self.yVelocity = -self.width 

    def moveDown(self): 

     if self.checkWall() == "bottom": 
      self.stop() 
     else: 
      self.yVelocity = self.width 

    #Draw the paddle 
    def draw(self): 

     self.y += self.yVelocity 
     gameDisplay.fill(white, rect = [self.x, self.y, self.width,  self.length]) 

paddle1 = Paddle(1) 
paddle2 = Paddle(2) 

gameFinish = False 

#Main Loop 
while not gameFinish: 

    #Event Loop 
    for event in pygame.event.get(): 

     if event.type == pygame.QUIT: 
      pygame.quit() 
      quit() 

    #Get all pressed keys 
    keyPressed = pygame.key.get_pressed() 

    #Move paddle1 if s or w is pressed 
    if keyPressed[pygame.K_w]: 
     paddle1.moveUp() 
    elif keyPressed[pygame.K_s]: 
     paddle1.moveDown() 
    else: 
     paddle1.stop() 

    #Move paddle2 if UP or DOWN is pressed 
    if keyPressed[pygame.K_UP]: 
     paddle2.moveUp() 
    elif keyPressed[pygame.K_DOWN]: 
     paddle2.moveDown() 
    else: 
     paddle2.stop() 

    paddle1.draw() 
    paddle2.draw() 

    pygame.display.update() 
    clock.tick(FPS) 

お手数でもお手伝いできますことはありませんか?

答えて

1

前の画面をクリアすると、古いパドルがまだ残っているときに新しいパドルを描画しています。

gameDisplay.fill(white)のようなものを使用して画面を消去します。

1

これは、移動したときにパドルスプライトが既にオンになっているためです。あなたがしたいことは効果的に古いパドルを破壊して古いパドルを描画します。そうしないと新しいパドルを作成してマージ効果を作り出します。

+0

助けてくれてありがとう!パドルの場合、古いインスタンスを破棄するために使用できるコードは何ですか?私はボールとスコアも削除するので、画面をクリアしたくない。 –

+0

申し訳ありませんが、私はそれを考え出しました。どうもありがとう! –

+0

@HerbHomework。かなり遅れていますが...上記のアンサーまたは質問の回答が解決した場合は、チェックマークをクリックして受け入れることを検討してください。これは、あなたが解決策を見つけ出し、回答者とあなた自身の両方に評判を与えていることを広範なコミュニティに示します。これを行う義務はありません – Octo

関連する問題