class Merchant(): #added def __init__(self): self._elixir_price = 1 self._shield_price = 2 self._pos = Pos() def get_pos(self): return self._pos def set_pos(self, row, column): self._pos.set_pos(row, column) def talk(self, text): print("Merchant$: " + text, end='') def action_on_soldier(self, soldier): commu_enable = True if soldier.count_coin() > 0 else False if not commu_enable: self.talk("You don't have enough coins.\n\n") while commu_enable: self.talk("Do you want to buy something? (1. Elixir, 2. Shield, 3. Leave.) Input: ") x = input() if x == '1': soldier.buy_elixir(self._elixir_price) commu_enable = False elif x == '2': if not soldier.buy_shield(self._shield_price): self.talk("You don't have enough coins.\n\n") commu_enable = False elif x == '3': self.talk('Bye.\n\n') commu_enable = False else: print('=> Illegal choice!\n') def display_symbol(self): print('$', end = '')
class Soldier(): def __init__(self): self._health = 100 self.__num_elixirs = 2 self.__pos = Pos() self.__keys = [] def get_health(self): return self._health def lose_health(self): self._health -= 10 return self._health <= 0 def recover(self, healing_power): total_health = healing_power + self._health if (total_health >= 100): self._health = 100 else: self._health = total_health def get_pos(self): return self.__pos def set_pos(self, row, col): self.__pos.set_pos(row, col) def move(self, row, col): self.set_pos(row, col) def get_keys(self): return self.__keys def add_key(self, key): self.__keys.append(key) def get_num_elixirs(self): return self.__num_elixirs def add_elixir(self): self.__num_elixirs += 1 def use_elixir(self): self.recover(random.randint(0, 5) + 15) self.__num_elixirs -= 1 def display_information(self): str_key = [str(x) for x in self.__keys] print("Health: ", self._health, ".") print("Position (row, column): (", self.__pos.get_row(), ", ", self.__pos.get_col(), ").") print("Keys: [" + ", ".join(str_key) + "].") print("Elixirs: ", self.__num_elixirs, ".") def display_symbol(self): print("S", end="")
class Soldier(): def __init__(self): self._health = 100 self._num_elixirs = 2 self._pos = Pos() self._keys = [] def get_health(self): return self._health def lose_health(self): self._health -= 10 return self._health <= 0 def recover(self, healing_power): total_health = healing_power + self._health self._health = 100 if total_health >= 100 else total_health def get_pos(self): return self._pos def set_pos(self, row, column): self._pos.set_pos(row, column) def move(self, row, column): self._pos.set_pos(row, column) def get_keys(self): return self._keys def add_key(self, key): self._keys.append(key) def get_num_elixirs(self): return self._num_elixirs def add_elixir(self): self._num_elixirs += 1 def use_elixir(self): self.recover(random.randint(15, 21)) self._num_elixirs -= 1 def display_information(self): print("Health:", self._health) print("Position (row, column): (", self._pos.get_row(), " ", self._pos.get_column(), ")", sep='') print("Keys:", self._keys) print("Elixirs: %d" % self._num_elixirs) def display_symbol(self): print("S", end='')
class Soldier(): def __init__(self): self._health = 100 self._num_elixirs = 2 self._pos = Pos() self._keys = set() def get_health(self): return self._health def lose_health(self): self._health -= 10 return self._health <= 0 def recover(self, healing_power): ## Soldier's health cannot exceed capacity. total_health = healing_power + self._health self._health = 100 if total_health >= 100 else total_health def get_pos(self): return self._pos def set_pos(self, row, column): self._pos.set_pos(row, column) def move(self, row, column): self.set_pos(row, column) def get_keys(self): return self._keys def add_key(self, key): self._keys.add(key) def get_num_elixirs(self): return self._num_elixirs def add_elixir(self): self._num_elixirs += 1 def use_elixir(self): self.recover(random.randint(15, 20)) self._num_elixirs -= 1 def display_information(self): print("Health: %d." % (self._health)) print("Position (row, column): (%d, %d)." % (self._pos.get_row(self), self._pos.get_column(self))) print('Keys: [', end='') print(*self._keys, sep=', ', end='].\n') print("Elixirs: %d." % (self._num_elixirs)) def display_symbol(self): print('S', end='')
class Soldier(): def __init__(self): self.health = 100 self.num_elixirs = 2 self.pos = Pos() self.keys = [] def get_health(self): return self.health def lose_health(self): self.health -= 10 return self.health <= 0 def recover(self, healing_power): total_health = healing_power + self.health self.health = 100 if total_health >= 100 else total_health def get_pos(self): return self.pos def set_pos(self, row, column): self.pos.set_pos(row, column) def move(self, row, column): self.set_pos(row, column) def get_keys(self): return self.keys def add_key(self, key): self.keys.append(key) def get_num_elixirs(self): return self.num_elixirs def add_elixir(self): self.num_elixirs += 1 def use_elixir(self): self.recover(random.randint(0, 5) + 15) self.num_elixirs -= 1 def display_information(self): print("Health: {}.".format(self.health)) print("Position (row, column): ({}, {}).".format(self.pos.get_row(), self.pos.get_column())) print("Keys: " + str(sorted(set(self.keys))) + ".") print("Elixirs: {}.".format(self.num_elixirs)) def display_symbol(self): print("S", end="")
class Merchant(): def __init__(self, elixir_price, shield_price): # TODO: Initialization. self._elixir_price = elixir_price self._shield_price = shield_price self._pos = Pos() def action_on_soldier(self, soldier): self.talk( 'Do you want to buy something? (1. Elixir, 2. Shield) Input: ') # TODO: Main logic. choice = input() if choice == '1': if soldier.get_num_coin() >= self._elixir_price: soldier.use_coin(self._elixir_price) soldier.add_elixir() print("You have %d coin(s) left.", soldier.get_num_coin()) else: self.talk("Poor guy, you don't have enough coins.") print() elif choice == '2': if soldier.get_num_coin() >= self._shield_price: soldier.use_coin(self._shield_price) soldier.add_shield() print("You have %d coin(s) left.", soldier.get_num_coin()) else: self.talk("Poor guy, you don't have enough coins.") print() else: print('=> Illegal move!\n') def talk(self, text): print('Merchant$: ' + text, end='') # TODO: Other functions. def get_pos(self): return self._pos def set_pos(self, row, column): self._pos.set_pos(row, column) def display_symbol(self): print('$', end='')
class Task4Merchant(): def __init__(self): self.pos = Pos() self.shield_price = 2 self.elixir_price = 1 def action_on_soldier(self, soldier): self.talk( "Do you want to buy something? (1. Elixir, 2. Shield, 3. Leave) Input: " ) choice = input() if choice == "1": if soldier.get_coin() >= self.elixir_price: soldier.spend_coin(self.elixir_price) soldier.add_elixir() else: print("You don't have enough coins.\n") elif choice == "2": if soldier.get_coin() >= self.shield_price: soldier.spend_coin(self.shield_price) soldier.add_defence() else: print("You don't have enough coins.\n") elif choice == "3": return else: print("=> Illegal choice!\n") def talk(self, text): print("Merchant$: " + text, end="") def display_symbol(self): print("$", end="") def set_pos(self, row, column): self.pos.set_pos(row, column) def get_pos(self): return self.pos
class Task4Merchant(): def __init__(self): self.__elixir_price = 1 self.__shield_price = 2 self.__pos = Pos() def action_on_soldier(self,soldier): sc=input("Do you want to buy something? (1. Elixir, 2. Shield, 3. Leave.) Input: ") if(sc == '1'): if(soldier.get_coin() >= self.__elixir_price): soldier.add_elixir() soldier.lose_coin(self.__elixir_price) self.talk("You bought an Elixir.\n\n") else: self.talk("You don't have enough coins.\n\n") elif(sc == '2'): if(soldier.get_coin() >= self.__shield_price): soldier.add_shield() soldier.lose_coin(self.__shield_price) self.talk("You bought a shield.\n\n") else: self.talk("You don't have enough coins.\n\n") elif(sc == '3'): self.talk("Thank you for coming. :D\n\n") else: print("=> Illegal choice!\n\n") def talk(self,text): print("Merchant$",text,end='') def set_pos(self,row,col): self.__pos.set_pos(row,col) def get_pos(self): return self.__pos def display_symbol(self): print("$",end='')
class Spring(): def __init__(self): self.__num_chance = 1 self.__healing_power = 100 self.__pos = Pos() def set_pos(self, row, col): self.__pos.set_pos(row, col) def get_pos(self): return self.__pos def action_on_soldier(self, soldier): self.talk() if (self.__num_chance == 1): soldier.recover(self.__healing_power) self.__num_chance -= 1 def talk(self): print("Spring@: You have %d chance to recover 100 health.\n\n" % (self.__num_chance)) def display_symbol(self): print("@", end='')
class Spring(): def __init__(self): self.num_chance = 1 self.healing_power = 100 self.pos = Pos() def set_pos(self, row, column): self.pos.set_pos(row, column) def get_pos(self): return self.pos def action_on_soldier(self, soldier): self.talk() if self.num_chance == 1: soldier.recover(self.healing_power) self.num_chance -= 1 def talk(self): print("Spring@: You have {} chance to recover 100 health.\n".format( self.num_chance)) def display_symbol(self): print("@", end="")
class Spring(): def __init__(self): self._num_chance = 1 self._healing_power = 100 self._pos = Pos() def set_pos(self, row, column): self._pos.set_pos(row, column) def get_pos(self): return self._pos def action_on_soldier(self, soldier): self.talk() if self._num_chance == 1: soldier.recover(self._healing_power) self._num_chance -= 1 def talk(self): print('Spring@: You have ' + str(self._num_chance) + ' chance to recover 100 health.\n') def display_symbol(self): print('@', end='')
class Monster(): def __init__(self, monster_ID=0, health_capacity=30): self._monster_ID = monster_ID self._health_capacity = health_capacity self._health = health_capacity self._pos = Pos() self._drop_item_list = [] self._hint_list = [] def add_drop_item(self, key): self._drop_item_list.append(key) def add_hint(self, monster_ID): self._hint_list.append(monster_ID) def get_monster_ID(self): return self._monster_ID def get_pos(self): return self._pos def set_pos(self, row, column): self._pos.set_pos(row, column) def get_health_capacity(self): return self._health_capacity def get_health(self): return self._health def lose_health(self): self._health -= 10 return self._health <= 0 def recover(self, healing_power): self._health = healing_power def action_on_soldier(self, soldier): if self._health <= 0: self.talk('You had defeated me.\n') else: if self.require_key(soldier.get_keys()): self.fight(soldier) else: self.display_hints() def require_key(self, keys): return self._monster_ID in keys def display_hints(self): self.talk("Defeat Monster %s first.\n" % (self._hint_list)) def fight(self, soldier): fight_enabled = True while fight_enabled: print(" | Monster%d | Soldier |" % (self._monster_ID)) print("Health | %8d | %7d |\n" % (self._health, soldier.get_health())) choice = input( '=> What is the next step? (1 = Attack, 2 = Escape, 3 = Use Elixir.) Input: ' ) if choice == '1': if self.lose_health(): print("=> You defeated Monster%d.\n" % (self._monster_ID)) self.drop_items(soldier) fight_enabled = False else: if soldier.lose_health(): self.recover(self._health_capacity) fight_enabled = False elif choice == '2': self.recover(self._health_capacity) fight_enabled = False elif choice == '3': if soldier.get_num_elixirs() == 0: print('=> You have run out of elixirs.\n') else: soldier.use_elixir() else: print('=> Illegal choice!\n') def drop_items(self, soldier): for item in self._drop_item_list: soldier.add_key(item) def talk(self, text): print("Monster%d: %s" % (self._monster_ID, text)) def display_symbol(self): print("M", end='')
class Monster(): def __init__(self, monster_id, health_capacity): self.__monster_id = monster_id self.__health_capacity = health_capacity self.__health = health_capacity self.__pos = Pos() self.__drop_item_list = [] self.__hint_list = [] def add_drop_item(self, key): self.__drop_item_list.append(key) def add_hint(self, monster_id): self.__hint_list.append(monster_id) def get_monster_id(self): return self.__monster_id def get_pos(self): return self.__pos def set_pos(self, row, col): self.__pos.set_pos(row, col) def get_health_capacity(self): return self.__health_capacity def get_health(self): return self.__health def lose_health(self): self.__health -= 10 return self.__health <= 0 def recover(self, healing_power): self.__health = healing_power def action_on_soldier(self, soldier): if (self.__health <= 0): self.talk("You had defeated me.\n\n") else: if (self.require_key(soldier.get_keys())): self.fight(soldier) else: self.display_hints() def require_key(self, keys): return keys.count(self.__monster_id) def display_hints(self): new_hint_list = [str(x) for x in self.__hint_list] self.talk("Defeat Monster " + " ".join(new_hint_list) + " first.\n\n") def fight(self, soldier): fight_enabled = True while (fight_enabled): print(" | Monster", self.__monster_id, " | Soldier |") print("Health | %8d | %7d |\n\n" % (self.__health, soldier.get_health())) sc = input( "=> What is the next step? (1 = Attack, 2 = Escape, 3 = Use Elixir.) Input: " ) if (sc == '1'): if (self.lose_health()): print("=> You defeated Monster", self.__monster_id, ".\n\n") self.drop_item(soldier) fight_enabled = False else: if (soldier.lose_health()): self.recover(self.__health_capacity) fight_enabled = False elif (sc == '2'): self.recover(self.__health_capacity) fight_enabled = False elif (sc == '3'): if (soldier.get_num_elixirs() == 0): print("=> You have run out of elixirs.\n\n") else: soldier.use_elixir() else: print("=> Illegal choice!\n\n") def drop_item(self, soldier): for i in self.__drop_item_list: if not soldier.get_keys().count(i): soldier.add_key(i) def talk(self, text): print("Monster", self.__monster_id, ": " + text) def display_symbol(self): print("M", end='')
class Warrior(): def __init__(self, posx, posy, index, mapp): self._pos = Pos(posx, posy) self._index = index self._map = mapp self._name = ("W%s" % str(index)) self._health = HEALTH_CAP self._magic_crystal = 10 def action_on_warrior(self, warrior): self.talk("Hi, bro. You can call me %s. I am very happy to meet you. I have %s magic crystals." % (self.name, int(self._magic_crystal))) self.talk("The number of your magic crystals is %s." % int(warrior.magic_crystal)) self.talk("Need I share with you some magic crystals?") self.talk("You now have following options: ") print("1. Yes") print("2. No") a = int(input()) if(a == 1): value = random.randint(1, self._magic_crystal) self.decrease_crystal(value) warrior.increase_crystal(value) warrior.talk("Thanks for your shared %s crystals! %s." % (int(value), self.name)) return False def teleport(self): print(("Hi, %s. Your position is (%s,%s) and health is %s." % (self._name, self._pos.x, self._pos.y, self._health))) print("Specify your target position (Input 'x y').") inp = input() inp = inp.split(' ') posx = int(inp[0]) posy = int(inp[1]) while(posx == self._pos.x and posy == self._pos.y): print("Specify your target position (Input 'x y'). It should not be the same as the original one.") inp = input() inp = inp.split(' ') posx = int(inp[0]) posy = int(inp[1]) result = self._map.coming(posx, posy, self) if result: self._map.set_land(self._pos, None) self._pos.set_pos(posx, posy) self._map.set_land(self._pos, self) self._map.print_board() if self.health <= 0: print("Very sorry, %s has been killed." % self.name) self._map.set_land(self.pos, None) self._map.delete_teleportable_obj(self) self._map.decrease_num_of_warriors() def talk(self, content): print("%s: %s" % (self._name, content)) def increase_crystal(self, value): self._magic_crystal = self._magic_crystal + value def decrease_crystal(self, value): self._magic_crystal = self._magic_crystal - value def increase_health(self, value): self._health = self._health + value if self._health > HEALTH_CAP: self._health = HEALTH_CAP def decrease_health(self, value): self._health = self._health - value @property def pos(self): return self._pos @property def name(self): return self._name @property def health(self): return self._health @health.setter def health(self, health): self._health = health @property def magic_crystal(self): return self._magic_crystal @magic_crystal.setter def magic_crystal(self, magic_crystal): self._magic_crystal = magic_crystal
class Monster(): def __init__(self, monster_id, health_capacity): self.monster_id = monster_id self.health_capacity = health_capacity self.health = health_capacity self.pos = Pos() self.drop_item_list = [] self.hint_list = [] def add_drop_item(self, key): self.drop_item_list.append(key) def add_hint(self, monster_id): self.hint_list.append(monster_id) def get_monster_id(self): return self.monster_id def get_pos(self): return self.pos def set_pos(self, row, column): self.pos.set_pos(row, column) def get_health_capacity(self): return self.health_capacity def get_health(self): return self.health def lose_health(self): self.health -= 10 return self.health <= 0 def recover(self, healing_power): self.health = healing_power def action_on_soldier(self, soldier): if self.health <= 0: self.talk("You had defeated me.\n\n") else: if self.require_key(soldier.get_keys()): self.fight(soldier) else: self.display_hints() def require_key(self, keys): return self.monster_id in keys def display_hints(self): self.talk("Defeat Monster " + str(self.hint_list) + " first.\n\n") def fight(self, soldier): fight_enabled = True while fight_enabled: print(" | Monster{} | Soldier |".format(self.monster_id)) print("Health | %8d | %7d |\n" % (self.health, soldier.get_health())) choice = input("=> What is the next step? (1 = Attack, 2 = Escape, 3 = Use Elixir.) Input: ") if choice == "1": if self.lose_health(): print("=> You defeated Monster{}.\n".format(self.monster_id)) self.drop_items(soldier) fight_enabled = False else: if soldier.lose_health(): self.recover(self.health_capacity) fight_enabled = False elif choice == "2": self.recover(self.health_capacity) fight_enabled = False elif choice == "3": if soldier.get_num_elixirs() == 0: print("=> You have run out of elixirs.\n") else: soldier.use_elixir() else: print("=> Illegal choice!\n") def drop_items(self, soldier): for item in self.drop_item_list: soldier.add_key(item) def talk(self, text): print("Monster{}: ".format(self.monster_id) + text, end="") def display_symbol(self): print("M", end="")