tmp_blocks = []
for block in blocks:
if ball.rect.colliderect(block.rect) != True:
tmp_blocks.append(block)
blocks = tmp_blocks
ここが働いてないのでしょうか。ブロックが消えません。どうすればいいでしょう
import sys import pygame import math from pygame.locals import QUIT from pygame.locals import Rect pygame.init() SURFACE = pygame.display.set_mode((400,300)) FPSCLOCK = pygame.time.Clock() class Block: def __init__(self, color, rect): #コンストラクタ self.color = color #ボールの色(R,G,B) self.rect = rect #初期位置と大きさ(Rectを利用) #描画するメソッド def draw(self): pygame.draw.rect(SURFACE, self.color, self.rect) class Ball: def __init__(self, color, rect,dir=320,speed=10): self.color = color #ボールの色(R,G,B) self.rect = rect #初期位置と大きさ(Rect を利用) self.dir = dir self.speed = speed def draw(self): pygame.draw.ellipse(SURFACE, self.color, self.rect) def move(self): if self.rect.centerx < 0 or self.rect.centerx > 400: self.dir = 180-self.dir if self.rect.centery < 0 or self.rect.centery > 300: self.dir = -self.dir self.rect.centerx += math.cos(math.radians(self.dir))*self.speed self.rect.centery -= math.sin(math.radians(self.dir))*self.speed #Block オブジェクトの生成 left = 50 top = 50 width = 45 height = 20 color = (200, 50, 200) blocks = [] for i in range(6): rect = Rect(left,top,width,height) blocks.append(Block(color,rect)) left = left + 50 #Ball オブジェクトの生成 ball_rect = Rect(150,100,10,10) ball_color = (255,255,0) ball = Ball(ball_color, ball_rect, 320, 10) tmp_blocks = [] #一時的なリストを tmp_blocks を作成して for block in blocks: #blocks の中から、衝突していない block を tmp_blocks に追加し if ball.rect.colliderect(block.rect) != True: tmp_blocks.append(block) blocks = tmp_blocks #tmp_blocks を blocks に代入することで、blocks リストを更新 while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() SURFACE.fill((0,0,0)) ball.move() for block in blocks: block.draw() ball.draw() pygame.display.update() FPSCLOCK.tick(30) コード
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/21 09:35