# your code goes here
from collections import namedtuple
import random
import math
def ask(prompt, options):
"""General function for asking questions with options"""
answer = None
while answer not in options:
answer = input(prompt + ' ({})'.format(', '.join(options)))
return answer
Stats = namedtuple('Stats', 'hp attack defense')
CLASS_STATS = {
'archer': Stats(hp=35, attack=10, defense=4),
'rogue': Stats(hp=30, attack=12, defense=4),
'warrior': Stats(hp=50, attack=6, defense=8),
'mage': Stats(hp=30, attack=16, defense=2),
'cleric': Stats(hp=40, attack=8, defense=5)
}
class Player():
"""Class to represent a player"""
@staticmethod
def create():
"""Ask questions and create a player based on the answers."""
good = 'no'
while good != 'yes':
user = input('What is your username? ')
race = ask(prompt='What is your race?', options=['orc', 'human', 'elf', 'goblin'])
p_class = ask(prompt='What is your class?', options=['archer', 'rogue', 'warrior', 'mage', 'cleric'])
player = Player(user, race, p_class) # create the player
good = ask(prompt='so you are {}? '.format(player), options=['yes', 'no'])
return player
def __init__(self, username, race, p_class):
"""Initialize a new Player instance and set its attributes"""
self.username = username
self.race = race
self.p_class = p_class
self.stats = CLASS_STATS[p_class] # Assign starting stats
def __str__(self):
"""String representation of a Player object"""
return "{} the {} {}".format(self.username, self.race, self.p_class)
def __repr__(self):
"""Python representation of a Player object"""
return "Player('{}', '{}', '{}')".format(self.username, self.race, self.p_class)
player = Player.create()
def intro():
print('''
Welcome to the Realms of Sacar, {}!'''.format(player.username))
print('''
As a {}, your stats are: {}'''.format(player.p_class, player.stats))
print('''
You are an adventurer, you make your living off of collecting bounties on
monsters and selling equipment and unique items you find on the way.
''')
print('''At any time you can type "adventure" or "shop" to switch between
battling and visiting the shop. You start with an inital 50g it's
recommended that you visit the shop first.
''')
intro()
monsters = ('fly', 'mouse', 'rat', 'serpent', 'goblin', 'gnome')
Monsters = namedtuple('type', 'hp attack defense')
MONSTERS_STATS = {
'fly': Fly(hp=10, attack=2, defense=1),
'mouse': Mouse(hp=20, attack=4, defense=1),
'rat': Rat(hp=25, attack=6, defense=3),
'serpent': Serpent(hp=40, attack=7, defense=3),
'goblin': Goblin(hp=55, attack=8, defense=4),
'gnome': Gnome(hp=55, attack=8, defense=8),
}
while(True): #ignore this
command = input()
if command == 'adventure':
print('adventure')
if command == 'shop':
print('shop')
print(MONSTERS_STATS[0])
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKaW1wb3J0IHJhbmRvbQppbXBvcnQgbWF0aAogCmRlZiBhc2socHJvbXB0LCBvcHRpb25zKToKICAgICIiIkdlbmVyYWwgZnVuY3Rpb24gZm9yIGFza2luZyBxdWVzdGlvbnMgd2l0aCBvcHRpb25zIiIiCiAgICBhbnN3ZXIgPSBOb25lCiAgICB3aGlsZSBhbnN3ZXIgbm90IGluIG9wdGlvbnM6CiAgICAgICAgYW5zd2VyID0gaW5wdXQocHJvbXB0ICsgJyAoe30pJy5mb3JtYXQoJywgJy5qb2luKG9wdGlvbnMpKSkKICAgIHJldHVybiBhbnN3ZXIKIApTdGF0cyA9IG5hbWVkdHVwbGUoJ1N0YXRzJywgJ2hwIGF0dGFjayBkZWZlbnNlJykKIApDTEFTU19TVEFUUyA9IHsKICAgICdhcmNoZXInOiBTdGF0cyhocD0zNSwgYXR0YWNrPTEwLCBkZWZlbnNlPTQpLAogICAgJ3JvZ3VlJzogU3RhdHMoaHA9MzAsIGF0dGFjaz0xMiwgZGVmZW5zZT00KSwKICAgICd3YXJyaW9yJzogU3RhdHMoaHA9NTAsIGF0dGFjaz02LCBkZWZlbnNlPTgpLAogICAgJ21hZ2UnOiBTdGF0cyhocD0zMCwgYXR0YWNrPTE2LCBkZWZlbnNlPTIpLAogICAgJ2NsZXJpYyc6IFN0YXRzKGhwPTQwLCBhdHRhY2s9OCwgZGVmZW5zZT01KQp9CiAKY2xhc3MgUGxheWVyKCk6CiAgICAiIiJDbGFzcyB0byByZXByZXNlbnQgYSBwbGF5ZXIiIiIKIAogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGNyZWF0ZSgpOgogICAgICAgICIiIkFzayBxdWVzdGlvbnMgYW5kIGNyZWF0ZSBhIHBsYXllciBiYXNlZCBvbiB0aGUgYW5zd2Vycy4iIiIKICAgICAgICBnb29kID0gJ25vJwogICAgICAgIHdoaWxlIGdvb2QgIT0gJ3llcyc6CiAgICAgICAgICAgIHVzZXIgPSBpbnB1dCgnV2hhdCBpcyB5b3VyIHVzZXJuYW1lPyAnKQogICAgICAgICAgICByYWNlID0gYXNrKHByb21wdD0nV2hhdCBpcyB5b3VyIHJhY2U/Jywgb3B0aW9ucz1bJ29yYycsICdodW1hbicsICdlbGYnLCAnZ29ibGluJ10pCiAgICAgICAgICAgIHBfY2xhc3MgPSBhc2socHJvbXB0PSdXaGF0IGlzIHlvdXIgY2xhc3M/Jywgb3B0aW9ucz1bJ2FyY2hlcicsICdyb2d1ZScsICd3YXJyaW9yJywgJ21hZ2UnLCAnY2xlcmljJ10pCiAgICAgICAgICAgIHBsYXllciA9IFBsYXllcih1c2VyLCByYWNlLCBwX2NsYXNzKSAjIGNyZWF0ZSB0aGUgcGxheWVyCiAgICAgICAgICAgIGdvb2QgPSBhc2socHJvbXB0PSdzbyB5b3UgYXJlIHt9PyAnLmZvcm1hdChwbGF5ZXIpLCBvcHRpb25zPVsneWVzJywgJ25vJ10pCiAgICAgICAgcmV0dXJuIHBsYXllcgogCiAgICBkZWYgX19pbml0X18oc2VsZiwgdXNlcm5hbWUsIHJhY2UsIHBfY2xhc3MpOgogICAgICAgICIiIkluaXRpYWxpemUgYSBuZXcgUGxheWVyIGluc3RhbmNlIGFuZCBzZXQgaXRzIGF0dHJpYnV0ZXMiIiIKICAgICAgICBzZWxmLnVzZXJuYW1lID0gdXNlcm5hbWUKICAgICAgICBzZWxmLnJhY2UgPSByYWNlCiAgICAgICAgc2VsZi5wX2NsYXNzID0gcF9jbGFzcwogICAgICAgIHNlbGYuc3RhdHMgPSBDTEFTU19TVEFUU1twX2NsYXNzXSAgIyBBc3NpZ24gc3RhcnRpbmcgc3RhdHMKIAogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIiIiU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgUGxheWVyIG9iamVjdCIiIgogICAgICAgIHJldHVybiAie30gdGhlIHt9IHt9Ii5mb3JtYXQoc2VsZi51c2VybmFtZSwgc2VsZi5yYWNlLCBzZWxmLnBfY2xhc3MpCiAKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAiIiJQeXRob24gcmVwcmVzZW50YXRpb24gb2YgYSBQbGF5ZXIgb2JqZWN0IiIiCiAgICAgICAgcmV0dXJuICJQbGF5ZXIoJ3t9JywgJ3t9JywgJ3t9JykiLmZvcm1hdChzZWxmLnVzZXJuYW1lLCBzZWxmLnJhY2UsIHNlbGYucF9jbGFzcykKIApwbGF5ZXIgPSBQbGF5ZXIuY3JlYXRlKCkKCmRlZiBpbnRybygpOgogICAgcHJpbnQoJycnCiAgICBXZWxjb21lIHRvIHRoZSBSZWFsbXMgb2YgU2FjYXIsIHt9IScnJy5mb3JtYXQocGxheWVyLnVzZXJuYW1lKSkKICAgIHByaW50KCcnJwogICAgQXMgYSB7fSwgeW91ciBzdGF0cyBhcmU6IHt9JycnLmZvcm1hdChwbGF5ZXIucF9jbGFzcywgcGxheWVyLnN0YXRzKSkKICAgIHByaW50KCcnJwogICAgWW91IGFyZSBhbiBhZHZlbnR1cmVyLCB5b3UgbWFrZSB5b3VyIGxpdmluZyBvZmYgb2YgY29sbGVjdGluZyBib3VudGllcyBvbgogICAgbW9uc3RlcnMgYW5kIHNlbGxpbmcgZXF1aXBtZW50IGFuZCB1bmlxdWUgaXRlbXMgeW91IGZpbmQgb24gdGhlIHdheS4KICAgICcnJykKICAgIHByaW50KCcnJ0F0IGFueSB0aW1lIHlvdSBjYW4gdHlwZSAiYWR2ZW50dXJlIiBvciAic2hvcCIgdG8gc3dpdGNoIGJldHdlZW4KICAgIGJhdHRsaW5nIGFuZCB2aXNpdGluZyB0aGUgc2hvcC4gWW91IHN0YXJ0IHdpdGggYW4gaW5pdGFsIDUwZyBpdCdzCiAgICByZWNvbW1lbmRlZCB0aGF0IHlvdSB2aXNpdCB0aGUgc2hvcCBmaXJzdC4KICAgICcnJykKaW50cm8oKQoKbW9uc3RlcnMgPSAoJ2ZseScsICdtb3VzZScsICdyYXQnLCAnc2VycGVudCcsICdnb2JsaW4nLCAnZ25vbWUnKQoKTW9uc3RlcnMgPSBuYW1lZHR1cGxlKCd0eXBlJywgJ2hwIGF0dGFjayBkZWZlbnNlJykKCk1PTlNURVJTX1NUQVRTID0gewogICAgJ2ZseSc6IEZseShocD0xMCwgYXR0YWNrPTIsIGRlZmVuc2U9MSksCiAgICAnbW91c2UnOiBNb3VzZShocD0yMCwgYXR0YWNrPTQsIGRlZmVuc2U9MSksCiAgICAncmF0JzogUmF0KGhwPTI1LCBhdHRhY2s9NiwgZGVmZW5zZT0zKSwKICAgICdzZXJwZW50JzogU2VycGVudChocD00MCwgYXR0YWNrPTcsIGRlZmVuc2U9MyksCiAgICAnZ29ibGluJzogR29ibGluKGhwPTU1LCBhdHRhY2s9OCwgZGVmZW5zZT00KSwKICAgICdnbm9tZSc6IEdub21lKGhwPTU1LCBhdHRhY2s9OCwgZGVmZW5zZT04KSwKfSAgICAKCndoaWxlKFRydWUpOiAjaWdub3JlIHRoaXMKICAgIGNvbW1hbmQgPSBpbnB1dCgpCiAgICBpZiBjb21tYW5kID09ICdhZHZlbnR1cmUnOgogICAgICAgIHByaW50KCdhZHZlbnR1cmUnKQogICAgaWYgY29tbWFuZCA9PSAnc2hvcCc6CiAgICAgICAgcHJpbnQoJ3Nob3AnKQoKcHJpbnQoTU9OU1RFUlNfU1RBVFNbMF0p