タイトルが最もよく説明されているかどうかはわかりません。しかし、これが私の問題です。'Ball'という名前のクラスがあります。各ボールには、独自の幅、半径、色があります。ループの前に自分のボールを追加している間、私のコードはうまく機能しました。ball1 = Ball().... ball2 = Ball()pygameを使用しています。必要なのは、「スペース」を押すたびに、独自の特性を持つ別のボールが追加されるようにすることです。幅、半径、色がランダムに出るようにしています。これが私のコードです:
BLACK = (0,0,0)
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
fps = 30
color_list = [BLACK, BLUE, GREEN, RED]
col = None
siz = None
wit = None
posx = None
posy = None
ball = None
class Ball:
ballCount = 0
def __init__(self):
Ball.ballCount +=1
self.col = random.choice(color_list)
self.siz = random.randint(20, 80)
self.wit = random.randint(1, 3)
self.posx = random.randint(self.siz, width-self.siz)
self.posy = random.randint(self.siz, height-self.siz)
def blitball(self):
pygame.draw.circle(screen, self.col, (self.posx, self.posy),self.siz, self.wit)
def move(self):
self.posx+=1
ball2 = Ball()
ball1 = Ball()
ball3 = Ball()
while True:
amount = 0
event = pygame.event.poll()
keys = pygame.key.get_pressed()
if event.type == QUIT:
pygame.quit()
sys.exit()
if keys[K_q]:
pygame.quit()
sys.exit()
#############################################################
if keys[K_SPACE]:
eval("ball"+str(Ball.ballCount+1)) = Ball()
#############################################################
screen.fill(WHITE)
for r in range(Ball.ballCount):
amount+=1
eval("ball"+str(amount)).move()
eval("ball"+str(amount)).blitball()
pygame.time.wait(int(1000/fps))
pygame.display.update()
を使用for r in range(Ball.ballCount):
しているので、ボールごとに関数を入力する必要はありません。これは完全に機能します。もっと簡単な方法を知っているなら、私に知らせてください。
したがって、追加する必要があるのは次のとおりです。
if keys[K_SPACE]:
#add another ball, ball3, ball4,..etc.
これが私のコードの一部を変更することを意味する場合は、遠慮なく私に教えてください。よろしくお願いします。(ハッシュタグ内に問題があります)
デニス