私はPythonのブロック崩しゲームに取り組んでおり、キーボードで自由に動かすことができるパドル、ブロック、ボールをすでに作成しています。ボールはブロックに当たることができ、ウインドウに当たることはできますが、パドルに当たることはできません。 パドルを通り抜けて、パドルの下のウインドウにぶつかって、跳ね返るだけです。今どうしたらいいのかわからないです。
import
1import pygame 2from pygame.locals import QUIT, KEYDOWN, K_LEFT, K_RIGHT 3from pygame.locals import Rect 4import math 5pygame.init() 6SURFACE = pygame.display.set_mode((400,300)) 7pygame.display.set_caption("Game Window") 8FPSCLOCK = pygame.time.Clock() 9class Block: 10 def __init__(self, color, rect): 11 self.color = color 12 self.rect = rect 13 def draw(self): 14 pygame.draw.rect(SURFACE, self.color, self.rect) 15 def delete(self): 16 blocks.remove(block) 17pw = 40 18ph = 5 19paddle = Block((0, 0, 255),Rect(180, 295,pw, ph)) 20pygame.key.set_repeat(30, 30) 21class Ball: 22 def __init__(self,a,b,c,d): 23 self.color=a 24 self.rect=b 25 self.dir=c 26 self.speed=d 27 def draw(self): 28 pygame.draw.ellipse(SURFACE, ball_color, ball_rect) 29 def move(self): 30 ball_rect.centerx += math.cos(math.radians(self.dir))*self.speed 31 ball_rect.centery -= math.sin(math.radians(self.dir))*self.speed 32 if ball_rect.centerx <=0 or ball_rect.centerx >= 400: 33 self.dir = 180 - self.dir 34 if ball_rect.centery <= 0 or ball_rect.centery >= 300: 35 self.dir = -self.dir 36 def bounce(self): 37 self.dir -= 180 38left=6 39top=30 40width=45 41height=20 42color=(200,50,200) 43blocks = [] 44for i in range(4): 45 for j in range(8): 46 rect = Rect(left, top, width, height) 47 blocks.append(Block(color, rect)) 48 left += 49 49 left = 6 50 top += 24 51ball_rect = Rect(150,100,10,10) 52ball_color = (255,255,0) 53ball = Ball(ball_color, ball_rect, 60, 5) 54num=0 55while True: 56 SURFACE.fill((0,0,0)) 57 for event in pygame.event.get(): 58 if event.type == QUIT: 59 pygame.quit() 60 sys.exit() 61 elif event.type == KEYDOWN: 62 if event.key == K_LEFT and paddle.rect.centerx-pw/2 > 0: 63 paddle.rect.centerx -= 10 64 elif event.key == K_RIGHT and paddle.rect.centerx+pw/2 < 400: 65 paddle.rect.centerx += 10 66 SURFACE.fill((0,0,0)) 67 paddle.draw() 68 for block in blocks: 69 block.draw() 70 ball.draw() 71 ball.move() 72 for block in blocks: 73 if ball.rect.colliderect(block.rect)==True: 74 Block.delete(blocks) 75 ball.bounce() 76 pygame.display.update() 77 FPSCLOCK.tick(60) 78コード
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/12 02:44
2021/12/12 04:21 編集
2021/12/14 05:54