我不確定標題是否給出了最佳描述。但這是我的問題。 我有一個名爲'球'的課。每個球都有其自己的寬度,半徑和顏色。 我的代碼工作很好,而我在循環之前加入我自己的球 例如。 ball1 = Ball().... ball2 = Ball() 我使用的是pygame,我想要的是當我按下'Space'時它會添加另一個具有它自己特性的球。我有它,它隨機給出一個寬度,半徑和顏色。 這裏是我的代碼:在循環中添加同一類的新對象
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.
如果這意味着要改變我的一些代碼,請隨時告訴我,甚至這樣做自己。 感謝您提前回復。 (我有我的問題內的井號標籤)
丹尼斯
你已經在使用列表,所以你應該知道它們。爲什麼不使用它們呢? – delnan 2013-02-15 18:20:08
似乎更像是一個設計問題 - 你試圖讓球做兩件事 - 代表一個球對象,但也跟蹤所有其他的球對象。似乎你的設計會更簡單,如果你把它們作爲兩個單獨的問題來處理;球和球本身的清單。 – GoingTharn 2013-02-15 18:23:09