Conway's game of life in PyGame

So after I made Conway's game of life in python, I decided that a graphical representation would be really nice. I wrote a pretty quick and dirty script in pygame to do this. You can click on dead cells to make them come alive and click on live ones to kill them. You can also pause the game by hitting any key during play. This thing is very much still under development. One known bug is that when you first pause and click on the board, the game will move forward one iteration. It will not move again until unpaused. I'm sure there's some simple flow control issue I'm not seeing (post in the comments if you have any suggestions). This uses my previous gameoflifeclasses script from the previous post. You should save that script as a .py file, then save this script as a .py file in the same directory.

initial This is what you'll likely see when you start up the script: The default starting configuration is a glider. You can change this by changing lines under the #hardcoded comment in the init constructor of the GOL class.

Please do whatever you want with the code, just give me credit when you do. Also please point out bugs.

Possible new features:

Here is the code:

 import pygame, sys   
 from pygame.locals import * 
 import Gameoflifeclasses  

 white = (255, 255,255)  
 black = (0, 0, 0)  
 height = 100 #number of pixels across  
 width = 100 
 widthBlock = 10 #number of pixels of width per block  
 heightBlock = 10 
 yBoxes = height/heightBlock #number of blocks down   
 xBoxes = width/widthBlock #number of blocks across  

 def posOfBoxes(width, widthBlock,height, heightBlock): #creates an array of tuples (x,y) that have the pixel wise positions of the boxes  
   corners = []   
   print(xBoxes)  
   for i in xrange(0, (yBoxes)*(xBoxes)):  
     corners.append(((widthBlock*(i%xBoxes)), (widthBlock*(i/yBoxes))))  
   return corners  

 def indexOfBoxes(xPixel,yPixel): #Returns the x and y position of a box (as a tuple) when given pixel coordinates   
   x = xPixel/10 
   y = yPixel/10 
   return (x,y)  
   pass 

 def main():  
   pygame.init()  
   maindisplay = pygame.display.set_mode((width,height))  
   maindisplay.fill(white)  
   linesurf = pygame.Surface((width, height))  
   i = 0 
   for i in xrange(0, width/widthBlock): #these create horizontal and vertical lines  
     linePos = widthBlock+widthBlock*i   
     pygame.draw.line(linesurf, black, (linePos,0), (linePos,height), 1)  
   for x in xrange(0,height/heightBlock):  
     linePos = heightBlock+heightBlock*x  
     pygame.draw.line(linesurf, black, (0,linePos), (height,linePos), 1)  
   corners = posOfBoxes(width, widthBlock,height, heightBlock)  
   print(corners)  
   game = Gameoflifeclasses.GOL(xBoxes) #This initiates the gaem of life classes   
   paused = False 

   while True:  
     ev = pygame.event.get()  
     for event in ev:   
       if event.type == pygame.MOUSEBUTTONUP and paused == True:  
         pos = pygame.mouse.get_pos()  
         xPixel, yPixel = pos #unpacking the mouse position  
         xIndex, yIndex = indexOfBoxes(xPixel,yPixel) #unpacking the tuple returned by indexOfBoxes  
         game.changePoint(xIndex,yIndex)  
         for point in xrange(0,len(corners)):  
           boxxy = pygame.Rect(corners[point], (widthBlock-1, heightBlock-1))  
           if game.array[point] == 1:   
             pygame.draw.rect(maindisplay, black, boxxy, 0)  
           else:   
             pygame.draw.rect(maindisplay, white, boxxy, 0)  
         pygame.display.flip()  
       if event.type == KEYDOWN:  
         if paused:   
           paused = False 
         else:   
           paused = True 
       if event.type == QUIT:  
         pygame.quit()  
         sys.exit()  

     if not paused:   
       for point in xrange(0,len(corners)):  
         boxxy = pygame.Rect(corners[point], (widthBlock-1, heightBlock-1))  
         if game.array[point] == 1:   
           pygame.draw.rect(maindisplay, black, boxxy, 0)  
         else:   
           pygame.draw.rect(maindisplay, white, boxxy, 0)  
       pygame.time.delay(100)  
       game.update()  
       pygame.display.flip()  




 if __name__ == '__main__':  
   main()  
   pass