Example #1
0
class Game(object):

	def __init__(self, screen, width, height, debug=False, start_level=1):
		self.target_fps = 60
		self.clock = pygame.time.Clock()
		self.running = False
		self.test_text = "Hello world"
		self.font = pygame.font.Font('./assets/font/vcr.ttf', 28)
		self.screen = screen
		self.width = width
		self.height = height
		self.current_scene = None
		self.restarting = False
		self.input = Input(pygame.key, pygame.mouse)
		self.current_scene = MenuScene(self, start_level)
		self.next_scene = None
		self.debug = debug
		# self.background = Background((800, 600), 'assets/img/bgs.png')

	def run(self):
		self.running = True
		current_time = 0
		previous_time = time.time()
		while self.running:
			self.clock.tick( self.target_fps )
			self.input.update()

			if not self.next_scene is None:
				self.current_scene = copy.copy(self.next_scene)
				self.next_scene = None

			for event in pygame.event.get():
				if event.type == pygame.QUIT:
					self.running = False
					self.restarting = False

				self.input.handle_event(event)

			if game.input.is_down(pygame.K_ESCAPE):
				self.running = False
				self.restarting = False

			current_time = time.time()
			delta_time = (current_time - previous_time)
			
			self.update(delta_time)
			self.draw()

			if self.debug:
				fps = round(1.0 / delta_time)
				fps_text = 'FPS: {0}'.format(fps)
				fps_w, fps_h = self.font.size(fps_text)
				fps_text_pos = (self.width - fps_w - 40, 20)
				
				self.screen.blit(self.font.render(fps_text, 1, WHITE), fps_text_pos)

			pygame.display.update()
			previous_time = current_time

		if self.restarting:
			game.run()
		else:
			game.quit()

	def restart(self):
		self.running = False
		self.restarting = True

	def quit(self):
		pygame.quit()
		quit()

	def update(self, dt):
		self.current_scene.update(dt)

	def draw(self):
		self.current_scene.draw()