Python Forum

Full Version: Appropriately delay this PyGame code
You're currently viewing a stripped down version of our content. View the full version with proper formatting.



I am a beginner to programming but have been interested in mazes, and I was trying to run this program :
http://thelinuxchronicles.blogspot.in/20...ution.html

But, the output comes all at once, and I want to slow it down so that one can actually see the red line painting the path slowly.

I've tried adding a sleep() delay in the elif and if cases, and i expected it to slow it down, but it just slows down the appearance of the line(it still appears all at once). Where do I have to put it?Thank you.
 56 # paints the solution path in the maze window
 57 def maze_path_window(m,w):
 58   path = m.solutionpath
 59 
 60   # print every cell within the solution path
 61   for index in range(len(path)-1):
 62     actrow = path[index][0]
 63     actcol = path[index][1]
 64     nextrow = path[index+1][0]
 65     nextcol = path[index+1][1]
 66     pygame.draw.rect(w,RED,(actcol*CELLSIZE+(actcol+1)*WALLSIZE,actrow*CELLSIZE+(actrow+
 67     1)*WALLSIZE,CELLSIZE,CELLSIZE))
 68 
 69     # also paint the white spaces between the cells
 70     if actrow == nextrow:
 71       if actcol < nextcol:
 72         pygame.draw.rect(w,RED,((actcol+1)*CELLSIZE+(actcol+1)*WALLSIZE,actrow*CELLSIZE+
 73         (actrow+1)*WALLSIZE,WALLSIZE,CELLSIZE))
 74       else:
 75         pygame.draw.rect(w,RED,(actcol*CELLSIZE+actcol*WALLSIZE,actrow*CELLSIZE+(actrow+
 76         1)*WALLSIZE,WALLSIZE,CELLSIZE))
 77     elif actcol == nextcol:
 78       if actrow < nextrow:
 79         pygame.draw.rect(w,RED,(actcol*CELLSIZE+(actcol+1)*WALLSIZE,(actrow+1)*CELLSIZE+
 80         (actrow+1)*WALLSIZE,CELLSIZE,WALLSIZE))
 81       else:
 82         pygame.draw.rect(w,RED,(actcol*CELLSIZE+(actcol+1)*WALLSIZE,actrow*CELLSIZE+
 83         actrow*WALLSIZE,CELLSIZE,WALLSIZE))
I can't copy paste that without pasting all the left column numbers too. plus it doesn't look like the full program, so the gist should be this:
you can draw whatever you want to the screen, but the update is only visible to viewer when you call pygame.display.flip()
So instead of:
draw whole maze, then flip.
draw a piece of the maze then flip. also put a time.sleep(0.1) after the flip or it will be too fast to see. (import time at top)
1. You can't use range or any loops. The event loop is your loop.
Never use time.sleep. time.sleep is stop the world.

2. use pygame.time.get_ticks or timers 
make variables current_tick , next_tick
current_tick = 0
next_tick = 0

#event_loop
# some other stuff
current_tick = pygame.time.get_ticks()
if current_tick > next_tick:
    next_tick += 200 # interval
    # do something