Example #1
0
class Game:
	"""Classe que representa o jogo"""
	def __init__(self):
		self.pilha = [] #pilha usada para o desfazer
		self.win = False #True caso tenha finalizado o mapa
		self.fase = 0 #id do mapa que está em jogo
		self.screen = None #Tela principal do jogo
		self.map = None #Map em jogo
		self.person = None #Personagem
			
	def init(self):
		"""Método para iniciar o jogo completo"""
		#inicia a janela 'invisível'
		self.screen = pygame.display.set_mode((1,1),NOFRAME,32)
		
		
		#cria uma instancia para o mapa
		self.map = Map(self.screen)
		pygame.display.set_icon(self.map._getGraf('!'))
		#cria personagem 
		self.person = Character(self.map,self.screen)

		#incia mapa self.fase
		self.mapInit()
		
		#Comeca o jogo
		self.screen = self.update()
		
		
		#laço principal do jogo
		while True:		
			for event in pygame.event.get():
				if event.type == QUIT:
					self.exit()
				if event.type == KEYDOWN:
					
					#movimentos do personagem
					if event.key == K_UP: #cima
						self.win,s = self.person.up()
						self.pushPilha(s)
					elif event.key == K_DOWN: #baixo
						self.win,s = self.person.down()
						self.pushPilha(s)
					elif event.key == K_LEFT: #esquerda
						self.win,s = self.person.left()
						self.pushPilha(s)
					elif event.key == K_RIGHT: #direita
						self.win,s = self.person.right()
						self.pushPilha(s)
						
					elif event.key == K_w: #ganha
						self.win = True
					elif event.key == K_r: #reincia o mapa
						self.mapInit()
						self.screen = self.update()
						
					elif event.key == K_z and pygame.key.get_mods() & KMOD_CTRL: #ctrl + z
						self.desfazer()
						self.screen = self.update()
				
			pygame.display.flip()
			if self.win:
				self.fase = (self.fase+1) % 16
				self.mapInit()
				self.screen = self.update()
	#end init
	
	
	def pushPilha(self,s):
		"""Método adiciona o último estado do jogo a pilha do desfazer. Adiciona no máximo 5 estados.
			obj.pushPilha(estado)
			estado ->  (['mapa'],(x,y))
		"""
		if len(self.pilha) > 5:
			del self.pilha[0]
		self.pilha.append(s)
		
	def popPilha(self):
		"""Método pop do desfazer"""
		if len(self.pilha) > 0:
			return self.pilha.pop()
		return None
		
	def desfazer(self):
		"""Recupera os estados salvos na pilha para desfazer o jogo"""
		ns = self.popPilha()
		if ns:
			self.map._str = ns[0]
			self.map._pos = ns[1]
			self.map.draw()
			
		
	def mapInit(self):
		"""Inicia um mapa"""
		#Marca estado com não vitorioso
		self.win = False
		#zera a pilha do desfazer
		self.pilha = []
		#define o mapa de inicio
		self.map.setID(self.fase)
		#desenha o mapa
		self.map.draw()
		
	
	def update(self):
		"""Atualiza jogo"""
		return self.person.update()
		
	def exit(self):
		"""Sai do jogo"""
		exit()