Exemplo n.º 1
0
class Game:
	def setup(self):
		""" Generates a hero, monster and door at random locations. """
		player_start = GameMap.random_location()
	
		# Generate monster location. Make sure it is not the same as player location
		while True:
			monster_start = GameMap.random_location()
			if monster_start == player_start:
				continue
			else:
				break

		# Generate door location. Make sure it is not the same as player and monster location.
		while True:
			door_start = GameMap.random_location()
			if door_start == monster_start or door_start == player_start:
				continue
			else:
				break
			
		self.player = Hero(position=player_start)
		self.monster = Monster(position=monster_start)
		self.door = Door(position=door_start)

		self.player.visit_location(player_start)

	def player_turn(self):
		""" Asks the user to take an action to either attack or recover """
		while True:
			action = input("Attack or Heal: ").lower().strip()
			if action == "heal":
				self.player.heal()
				print("new hp {}".format(self.player.hp))
				break
			elif action == "attack":
				damage = self.player.make_attack()
				print("\nYou hit the monster for {} damage.".format(damage))
				self.monster.hp -= damage
				break
			else:
				print("Invalid action, try again.\n")
		
	def monster_turn(self):
		""" The monster attemps to attack the player """
		damage = self.monster.make_attack()
		print("The monster hits you for {} damage.\n".format(damage))
		self.player.hp -= damage

	def fight(self):
		""" Handles the fight between the player and the monster. """
		while True:
			print('-' * 30)
			print(self.player)
			print(self.monster)
			print('-' * 30)
			self.player_turn()

			if self.monster.hp <= 0:
				print("You have slain the monster and taken the key from it's dead body.\n")
				self.player.key = True
				self.monster.position = None
				break

			self.monster_turn()
			
			if self.player.hp <= 0:
				print("You have been killed by the monster. Game over!\n")
				sys.exit()

	def clear(self):
		""" Clears the screen """
		os.system('cls' if os.name == 'nt' else 'clear')

	def __init__(self):
		self.clear()
		
		self.setup()
	
		message = None

		while True:
			self.clear()

			print("Hero: " + self.player.name.title() + " / Weapon: " + self.player.weapon.title()) 
			self.player.draw_map(hero = self.player.position, 
								monster=self.monster.position, 
								door = self.door.position, 
								visited=self.player.visited_list)

			if message:
				print(message)
				message = None

			if self.player.key == True:
				print("Inventory: Key")
				
			move = input("{}: ".format(self.player.get_valid_moves(self.player.position))).upper().strip()

			if self.player.is_valid_move(move, self.player.position):
				print("You moved {}.\n\n".format(move))
				self.player.change_position(move)
			else:
				message="That is not a valid move."
			if self.player.position == self.door.position:
				if self.player.key:
					print("You found the exit. You win!")
					break
				else:
					message = "You found the exit, but the door is locked."
			elif self.player.position == self.monster.position:
				print("You have found the monster!\n")
				self.fight()

			
		print("Game over. You made {} moves.\n\n".format(len(self.player.visited_list)-1))