私はボールやパワーアップや病気を撃つ大砲のように最終的にブロック/さまざまな機能を追加してしまうが、今の私も正しく..... インポートpygameのポンボールはパドルを通り抜けて壁に当たって、パドルにぶつかって反射する。
BLACK = (0,0,0)
WHITE = (255,255,255)
RED = (255,0,0)
GOLD = (201,168,168)
Call = pygame.sprite.Group(())
got = pygame.sprite.Group(())
SCR_WID, SCR_HEI = 640, 480
backg = pygame.image.load("background.png")
class Player(pygame.sprite.Sprite):
def __init__(self, name):
pygame.sprite.Sprite.__init__(self)
if name == "george":
self.x, self.y = 16, SCR_HEI/2
elif name =="frank":
self.x, self.y = SCR_WID-16, SCR_HEI/2
self.name = name
self.speed = 3
self.padWid, self.padHei = 8, 64
self.score = 0
self.scoreFont = pygame.font.Font("imagine_font.ttf", 64)
def scoring(self):
scoreBlit = self.scoreFont.render(str(self.score), 1, (255, 255, 255))
if self.name == "george":
screen.blit(scoreBlit, (32, 16))
if self.score == 10:
print ("player 1 wins!")
exit()
elif self.name == "frank":
screen.blit(scoreBlit, (SCR_HEI+92, 16))
if self.score == 10:
print ("Player 2 wins!")
exit()
def movement(self):
keys = pygame.key.get_pressed()
if self.name == "george":
if keys[pygame.K_w]:
self.y -= self.speed
elif keys[pygame.K_s]:
self.y += self.speed
elif self.name == "frank":
if keys[pygame.K_UP]:
self.y -= self.speed
elif keys[pygame.K_DOWN]:
self.y += self.speed
if self.y <= 0:
self.y = 0
elif self.y >= SCR_HEI-64:
self.y = SCR_HEI-64
def draw(self):
pygame.draw.rect(screen, (255, 255, 255), (self.x, self.y, self.padWid, self.padHei))
ボールが敵のパドルを通過しているパドルを打つためにボールを取得傾けます。それは実際にそれを通過するわけではありませんがそれをブロックしますが、パドルを過ぎる。私はいろいろなやり方を試みてきましたが、私はこれに新しいし、苦労しています。
これは私がトラブルを引き起こしていると信じているクラスです。私はそのようなIDのようにパドルに当たっていないという方法でもエラーは発生しません。プレイヤーのパドルは正しく動作していない敵のものだけをうまく動作させます。
class Ball(pygame.sprite.Sprite):
image = pygame.image.load("bong.png")
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.rect = self.image.get_rect()
self.rect.x, self.rect.y = SCR_WID/2, SCR_HEI/2
self.speed_x = -3
self.speed_y = 3
self.size = 8
def movement(self):
self.rect.x += self.speed_x
self.rect.y += self.speed_y
if self.rect.y <= 0:
self.speed_y *= -1
elif self.rect.y >= SCR_HEI-self.size:
self.speed_y *= -1
if self.rect.x <= 0:
self.__init__()
enemy.score += 1
elif self.rect.x >= SCR_WID-self.size:
self.__init__()
self.speed_x = 3
player.score += 1
for n in range(-self.size, player.padHei):
if self.rect.y == player.y + n:
if self.rect.x <= player.x + player.padWid:
self.speed_x *= -1
break
n += 1
for n in range(-self.size, enemy.padHei):
if self.rect.y == enemy.y + n:
if self.rect.x >= enemy.x - enemy.padWid:
self.speed_x *= -1
break
また、ボールが跳ね返るようにブロックに衝突を追加することも苦労しています。アイブはいくつかの方法で試してみたが、ボールがパドルを通過していたことに気付き、まずそれを修正しなければならなかった。これは私の次のステップです。どんな助けもありがとうございます。
class Block(pygame.sprite.Sprite):
image = pygame.image.load("brick.png")
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.rect = self.image.get_rect()
self.rect.x = 300
self.rect.y = 0
SCR_WID, SCR_HEI = 640, 480
screen = pygame.display.set_mode((SCR_WID, SCR_HEI))
pygame.display.set_caption("Pong")
pygame.font.init()
clock = pygame.time.Clock()
FPS = 60
pygame.init()
def main():
backgscale = pygame.transform.scale(backg,(SCR_WID, SCR_HEI))
global player
player = Player("george")
global enemy
enemy = Player("frank")
block = Block()
got.add(block)
ball = Ball()
Call.add(ball)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
print("Game exited by user")
exit()
screen.blit(backg,(0,0))
got.update()
Call.update()
backgscale = pygame.transform.scale(backg,(SCR_WID, SCR_HEI))
got.draw(screen)
Call.draw(screen)
player.movement()
enemy.movement()
ball.movement()
player.draw()
player.scoring()
enemy.draw()
enemy.scoring()
pygame.display.flip()
clock.tick(FPS)
main()
私は間違っているかどうかを知りません。
私は私のように表面に画像を変更しなければならなかった...スプライトグループを作成し、それらに私はそれらを表示し、まだ移動するためにそれらを持っているためのより良い方法を知らない、そのように表示
こんにちは、あなたの助けを借りてからあなたの投稿を欺くことはありません。それはそれの下に避難所を取った後に木を切り落とすようなものです。他の将来のユーザーが知識から得ることを許可してください。回答者は多くの努力をしていたでしょう。貴重な時間を無駄にしないでください。 –