class GameLoop (object): def __init__(self, ticks_per_second, max_frame_skip): self.TicksPerSecond = ticks_per_second self.TimePerTick = 1000.0 / self.TicksPerSecond # MS per tick self.MaxFrameSkip = max_frame_skip pygame.init() size = width, height = 800, 600 self.black = 0,0,0 self.screen = pygame.display.set_mode(size, pygame.FULLSCREEN) self.imageCache = ImageCache() self.imageCache.getSurface("units/Player1.png", "ball") self.imageCache.getSurface("units/Creature1.png", "mob") self.imageCache.getSurface("terrains/Normal.jpg", "normal") self.imageCache.getSurface("terrains/Impassable1.jpg", "impassable-1") ball = self.imageCache.getCachedSurface("ball") self.screenRect = pygame.Rect(0, 0, width, height) self.playerSprite = PlayerSprite(ball, self.screenRect) self.sprites = pygame.sprite.Group(self.playerSprite) self.mapView = None def render(self): self.screen.fill(self.black) self.mapView.draw(self.screen) self.sprites.draw(self.screen) pygame.display.flip() def update(self): for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() speed = 5 if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: sys.exit() elif event.key == pygame.K_a: self.playerSprite.dx -= speed elif event.key == pygame.K_d: self.playerSprite.dx += speed elif event.key == pygame.K_w: self.playerSprite.dy -= speed elif event.key == pygame.K_s: self.playerSprite.dy += speed if event.type == pygame.KEYUP: if event.key == pygame.K_a: self.playerSprite.dx += speed elif event.key == pygame.K_d: self.playerSprite.dx -= speed elif event.key == pygame.K_w: self.playerSprite.dy += speed elif event.key == pygame.K_s: self.playerSprite.dy -= speed self.mapView.update() self.sprites.update() def loop(self): nextGameTick = pygame.time.get_ticks() renderClock = pygame.time.Clock() updateTick = 0 levelMap = Map(30, 30, mapElementCB = initMapElement) astar = AStar(levelMap.getSquareAdjacencies, lambda elem: getCost(levelMap, elem), lambda x, y: getHeuristicCost(levelMap, x, y), isImpassable) self.mapView = MapView(levelMap, self.imageCache, pygame.Rect(0, 0, 800, 600), 32, 32) self.playerSprite.setMapView(self.mapView) sprinkleMobs(10, 8, self.sprites, self.mapView, self.imageCache, self.screenRect, astar, self.playerSprite) while 1: loops = 0 while pygame.time.get_ticks() > nextGameTick and loops < self.MaxFrameSkip: self.update() nextGameTick += self.TimePerTick loops += 1 updateTick += 1 if updateTick % 100 == 0: print renderClock.get_fps() renderClock.tick() self.render()
class GameLoop(object): def __init__(self, ticks_per_second, max_frame_skip): self.TicksPerSecond = ticks_per_second self.TimePerTick = 1000.0 / self.TicksPerSecond # MS per tick self.MaxFrameSkip = max_frame_skip pygame.init() try: self.font = pygame.font.Font('VeraMono.ttf', 16) except: print 'problem loading font' self.font = None self.fontSurf = None self._displayFPS = False size = width, height = 800, 600 self.black = 0, 0, 0 #self.screen = pygame.display.set_mode(size, pygame.FULLSCREEN) self.screen = pygame.display.set_mode(size) self.imageCache = ImageCache() self.imageCache.getSurface("units/Player1.png", "ball") self.imageCache.getSurface("units/Creature1.png", "mob") self.imageCache.getSurface("units/Mine1.png", "mine") self.imageCache.getSurface("terrains/Normal.jpg", "normal") self.imageCache.getSurface("terrains/Impassable5.jpg", "impassable-1") ball = self.imageCache.getCachedSurface("ball") self.mobs = pygame.sprite.Group() self.playerSprite = PlayerSprite(ball, width / 2 - 16, height / 2 - 16, self.imageCache, self.mobs) self.playerSpriteGroup = pygame.sprite.Group(self.playerSprite) self.mapView = None def _updateFPS(self, fps): self.fontSurf = self.font.render('FPS: %.3f' % fps, True, (0, 255, 0)) def render(self): self.screen.fill(self.black) self.mapView.draw(self.screen) self.playerSpriteGroup.draw(self.screen) self.mobs.draw(self.screen) if self.fontSurf and self._displayFPS: self.screen.blit(self.fontSurf, (25, 25)) pygame.display.flip() def update(self): for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() speed = 15 if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: sys.exit() elif event.key == pygame.K_a: self.playerSprite.dx -= speed elif event.key == pygame.K_d: self.playerSprite.dx += speed elif event.key == pygame.K_w: self.playerSprite.dy -= speed elif event.key == pygame.K_s: self.playerSprite.dy += speed elif event.key == pygame.K_F1: self._displayFPS = not self._displayFPS if event.type == pygame.KEYUP: if event.key == pygame.K_a: self.playerSprite.dx += speed elif event.key == pygame.K_d: self.playerSprite.dx -= speed elif event.key == pygame.K_w: self.playerSprite.dy += speed elif event.key == pygame.K_s: self.playerSprite.dy -= speed self.mapView.update() self.playerSpriteGroup.update() self.mobs.update() def loop(self): nextGameTick = pygame.time.get_ticks() renderClock = pygame.time.Clock() updateTick = 0 self.levelMap = Map(mapElementCB=initMapElement) self.mapView = MapView(self.levelMap, self.imageCache, pygame.Rect(0, 0, 800, 600), 32, 32) self.playerSprite.mapView = self.mapView while 1: loops = 0 while pygame.time.get_ticks( ) > nextGameTick and loops < self.MaxFrameSkip: self.update() nextGameTick += self.TimePerTick loops += 1 updateTick += 1 if updateTick % 10 == 0: self._updateFPS(renderClock.get_fps()) renderClock.tick() self.render()
class GameLoop (object): def __init__(self, ticks_per_second, max_frame_skip): self.TicksPerSecond = ticks_per_second self.TimePerTick = 1000.0 / self.TicksPerSecond # MS per tick self.MaxFrameSkip = max_frame_skip pygame.init() try: self.font = pygame.font.Font('VeraMono.ttf', 16) except: print 'problem loading font' self.font = None self.fontSurf = None self._displayFPS = False size = width, height = 800, 600 self.black = 0,0,0 #self.screen = pygame.display.set_mode(size, pygame.FULLSCREEN) self.screen = pygame.display.set_mode(size) self.imageCache = ImageCache() self.imageCache.getSurface("units/Player1.png", "ball") self.imageCache.getSurface("units/Creature1.png", "mob") self.imageCache.getSurface("units/Mine1.png", "mine") self.imageCache.getSurface("terrains/Normal.jpg", "normal") self.imageCache.getSurface("terrains/Impassable5.jpg", "impassable-1") ball = self.imageCache.getCachedSurface("ball") self.mobs = pygame.sprite.Group() self.playerSprite = PlayerSprite(ball, width/2-16, height/2-16, self.imageCache, self.mobs) self.playerSpriteGroup = pygame.sprite.Group(self.playerSprite) self.mapView = None def _updateFPS(self, fps): self.fontSurf = self.font.render('FPS: %.3f' % fps, True, (0, 255, 0)) def render(self): self.screen.fill(self.black) self.mapView.draw(self.screen) self.playerSpriteGroup.draw(self.screen) self.mobs.draw(self.screen) if self.fontSurf and self._displayFPS: self.screen.blit(self.fontSurf, (25, 25)) pygame.display.flip() def update(self): for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() speed = 15 if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: sys.exit() elif event.key == pygame.K_a: self.playerSprite.dx -= speed elif event.key == pygame.K_d: self.playerSprite.dx += speed elif event.key == pygame.K_w: self.playerSprite.dy -= speed elif event.key == pygame.K_s: self.playerSprite.dy += speed elif event.key == pygame.K_F1: self._displayFPS = not self._displayFPS if event.type == pygame.KEYUP: if event.key == pygame.K_a: self.playerSprite.dx += speed elif event.key == pygame.K_d: self.playerSprite.dx -= speed elif event.key == pygame.K_w: self.playerSprite.dy += speed elif event.key == pygame.K_s: self.playerSprite.dy -= speed self.mapView.update() self.playerSpriteGroup.update() self.mobs.update() def loop(self): nextGameTick = pygame.time.get_ticks() renderClock = pygame.time.Clock() updateTick = 0 self.levelMap = Map(mapElementCB = initMapElement) self.mapView = MapView(self.levelMap, self.imageCache, pygame.Rect(0, 0, 800, 600), 32, 32) self.playerSprite.mapView = self.mapView while 1: loops = 0 while pygame.time.get_ticks() > nextGameTick and loops < self.MaxFrameSkip: self.update() nextGameTick += self.TimePerTick loops += 1 updateTick += 1 if updateTick % 10 == 0: self._updateFPS(renderClock.get_fps()) renderClock.tick() self.render()