2014-02-23 57 views
0

我目前正在寫一個函數作爲函數賦值的一部分。我正在使用python 2.7.5和pygame。我們應該編寫一個繪製光照的遞歸函數。我目前對我的代碼有錯誤,但我不知道它是什麼。這裏是我的代碼:閃電函數Python

from math import * 
from pygame import * 
from random import * 

screen=display.set_mode((800,600)) 


def lightning(screen,x,y,size,ang): 
    if size > 5: 
     rang = radians(ang) 
     x2 = x-size*cos(rang) 
     y2 = y+size*sin(rang) 
     draw.line(screen,(200,180,0),(x,y),(x2,y2)) 
     lightning(screen,x2,y2,size-randint(1,10),ang-randint(-20,10)) 
     lightning(screen,x2,y2,size-randint(1,10),ang+randint(-10,30)) 

lightning(screen,400,0,100,randint(60,100)) 
running=True 
while running: 
    for evt in event.get(): 
     if evt.type==QUIT: 
      runnning=False 
    screen.fill((0,0,0)) 
    lightning(screen,400,0,100,randint(60,100)) 
    time.wait(500) 

    display.flip() 
quit() 

目前,當我嘗試添加閃電的另一條線(「閃電(...)」),它不會顯示在外殼的任何錯誤,也沒有顯示任何內容pygame窗口。當我只有一條線路時,閃電功能正常。我只想知道我的錯誤在哪裏以及導致錯誤的原因。任何幫助表示讚賞。謝謝。

+0

也許是因爲你從來沒有真正退出的功能?它只是循環和循環。 – aIKid

+0

請根據PEP-8格式化您的Python代碼。 –

+0

我建議在'lightning()'裏面加入'print'語句,看它在運行時打印什麼。如果在運行時看不到輸出,請將打印的語句寫入日誌文件,然後在運行後查看它。 – steveha

回答

1

對於size=100功能ligthning()調用80萬到3 500 000次。

如果添加另一條閃電線路,它甚至可以撥打7 000 000個電話。

也許你看不到結果,因爲它的工作時間太長。試試你的代碼更小size

我的代碼來計數ligthning()調用。

from math import * 
from pygame import * 
from random import * 

#--------------------------------------------------------------------- 

def lightning(screen, x, y, size, ang, count): 
    if size > 5: 
     rang = radians(ang) 
     x2 = x-size*cos(rang) 
     y2 = y+size*sin(rang) 
     draw.line(screen,(200,180,0),(x,y),(x2,y2)) 
     count = lightning(screen,x2,y2,size-randint(1,10),ang-randint(-20,10), count) 
     count = lightning(screen,x2,y2,size-randint(1,10),ang+randint(-10,30), count) 
    return count + 1 

#--------------------------------------------------------------------- 

screen = display.set_mode((800,600)) 

#lightning(screen,400, 0, 100, randint(60,100)) 

running = True 

while running: 

    for evt in event.get(): 
     if evt.type == QUIT: 
      running = False 
     elif evt.type == KEYDOWN: 
      if evt.key == K_ESCAPE: 
       running = False 

    screen.fill((0,0,0)) 
    print 'count: ', lightning(screen, 400, 0, 100, randint(60,100), 0) 
    display.flip() 

    #time.wait(500) 

quit() 

編輯:

理論上radint(1,10)總能給1,所以你總是可以有lightning(...,size-1, ...)size=100它可以給2點** 95的電話。

2 ** 95 = 39 614 081 257 132 168 796 771 975 168L