Advertisement
xgeovanni

Game class

Apr 16th, 2013
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.74 KB | None | 0 0
  1. import pygame
  2. import sys
  3. import threading
  4.  
  5. try:
  6.     from grid import Grid
  7. except ImportError:
  8.     raise ImportWarning("Grid library is unavailable, do not attempt to use Grids")
  9.    
  10. def getKeycodes():
  11.     """A method to get all the keycodes
  12.     used in pygame in to a dictionary"""
  13.    
  14.     keycodes = {item[2:].lower() : eval("pygame." + item)
  15.                 for item in dir(pygame) if "K_" in item}
  16.    
  17.     return keycodes
  18.  
  19. KEYCODES = getKeycodes()
  20.  
  21. def key(key):
  22.     return KEYCODES[key]
  23.  
  24. class Renderer(threading.Thread):
  25.     def __init__(self, RENDERRATE, *renderFuncs):
  26.         self.clock = pygame.time.Clock()
  27.        
  28.         self.renderFuncs = renderFuncs
  29.         self.RENDERRATE = RENDERRATE
  30.         self.deltaTime = self.clock.tick(self.RENDERRATE)
  31.  
  32.         threading.Thread.__init__(self)
  33.        
  34.     def run(self):
  35.         while True:
  36.             self.deltaTime = self.clock.tick(self.RENDERRATE)
  37.            
  38.             for func in self.renderFuncs:
  39.                 func()
  40.                
  41. class Game():
  42.     def __init__(self, WIDTH, HEIGHT, gridsize = None,
  43.                  FRAMERATE = 0, RENDERRATE = None, fillcolour = (0, 0, 0),
  44.                  fullscreen = False):
  45.        
  46.         if fullscreen:
  47.             self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
  48.         else:
  49.             self.screen = pygame.display.set_mode((WIDTH, HEIGHT))
  50.            
  51.         self.SCREENSIZE = self.screen.get_size()
  52.         self.SCREENRECT = pygame.Rect((0, 0), self.SCREENSIZE)
  53.         self.WIDTH, self.HEIGHT = self.SCREENSIZE
  54.            
  55.         self.fillcolour = fillcolour
  56.        
  57.         self.returnValue = None
  58.         self.dirtyRects = []
  59.         self.oldDirtyRects = []
  60.        
  61.         self.clock = pygame.time.Clock()
  62.         self.FRAMERATE = FRAMERATE
  63.        
  64.         if RENDERRATE is None:
  65.             self.renderer = None
  66.         else:
  67.             self.renderer = Renderer(RENDERRATE, self.render, self.updateDisplay)
  68.        
  69.         self.deltaTime = self.clock.tick(self.FRAMERATE)
  70.        
  71.         if gridsize:
  72.             self.grid = Grid(self.screen, gridsize)
  73.  
  74.     def updateDisplay(self):
  75.         #self.screen.unlock()
  76.        
  77.         if self.dirtyRects:
  78.             pygame.display.update(self.dirtyRects + self.oldDirtyRects)
  79.         else:
  80.             pygame.display.update()
  81.        
  82.         #self.screen.lock()
  83.  
  84.         self.screen.fill(self.fillcolour)
  85.        
  86.     def setup(self):
  87.         """Hook for setup"""
  88.         pass
  89.        
  90.     def update(self):
  91.         """Hook for game update"""
  92.         pass
  93.    
  94.     def render(self):
  95.         """Hook for game render"""
  96.         pass
  97.    
  98.     def handleEvent(self, event):
  99.         """Hook for event handling"""
  100.         pass
  101.    
  102.     def handleInputs(self):
  103.         """Input handling"""
  104.        
  105.         for event in pygame.event.get():
  106.             if event.type == pygame.QUIT:
  107.                 self.quit()
  108.                
  109.             else:
  110.                 self.handleEvent(event)
  111.        
  112.     def run(self):
  113.         self.setup()
  114.        
  115.         if self.renderer:
  116.             self.renderer.start()
  117.        
  118.         while True:
  119.            
  120.             self.deltaTime = self.clock.tick(self.FRAMERATE) / 1000
  121.                
  122.             self.oldDirtyRects = self.dirtyRects
  123.             self.dirtyRects = []
  124.            
  125.            
  126.             self.update()
  127.            
  128.             if not self.renderer:
  129.                 self.render()
  130.                 self.updateDisplay()
  131.            
  132.             self.handleInputs()
  133.            
  134.             if self.returnValue is not None:
  135.                 return self.returnValue
  136.    
  137.     def quit(self):
  138.         pygame.quit()
  139.         sys.exit(0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement