Advertisement
Guest User

Untitled

a guest
May 15th, 2017
398
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 13.21 KB | None | 0 0
  1.  
  2.  
  3. main.py
  4. from classes.game import Person, bcolors
  5. from classes.magic import Spell
  6. from classes.inventory import Item
  7. import random
  8.  
  9. print("\n\n")
  10. # Create Black Magic
  11. fire = Spell("Fire", 25, 600, "black")
  12. thunder = Spell("Thunder", 25, 600, "black")
  13. blizzard = Spell("Blizzard", 25, 600, "black")
  14. meteor = Spell("Meteor", 40, 1200, "black")
  15. quake = Spell("Quake", 14, 140, "black")
  16.  
  17. # Create White Magic
  18. cure = Spell("Cure", 25, 620, "white")
  19. cura = Spell("Cura", 32, 1500, "white")
  20. curaga = Spell("Curaga", 50, 6000, "white")
  21.  
  22.  
  23. # Create some Items
  24. potion = Item("Potion", "potion", "Heals 50 HP", 50)
  25. hipotion = Item("Hi-Potion", "potion", "Heals 100 HP", 100)
  26. superpotion = Item("Super Potion", "potion", "Heals 1000 HP", 1000)
  27. elixer = Item("Elixer", "elixer", "Fully restores HP/MP of one party membrer", 9999)
  28. hielixer = Item("MegaElixer", "elixer", "Fully restores party's HP/MP", 9999)
  29.  
  30. grenade = Item("Grenade", "attack", "Deals 500 damage", 500)
  31.  
  32. player_spells = [fire, thunder, blizzard, meteor, cure, cura]
  33. enemy_spells = [fire, meteor, curaga]
  34. player_items = [{"item": potion, "quantity": 15}, {"item": hipotion, "quantity": 5},
  35.                 {"item": superpotion, "quantity": 5}, {"item": elixer, "quantity": 5},
  36.                 {"item": hielixer, "quantity": 2}, {"item": grenade, "quantity": 5}]
  37.  
  38. #Instantiate People
  39. player1 = Person( "Valos:", 3260, 132, 300, 34, player_spells, player_items)
  40. player2 = Person( "Nick :", 4160, 138, 311, 34, player_spells, player_items)
  41. player3 = Person( "Robot:", 3089, 174, 288, 34, player_spells, player_items)
  42.  
  43. enemy1 = Person("Imp  ", 1250, 130, 560, 325, enemy_spells, [])
  44. enemy2 = Person("Magus", 18200, 701, 525, 25, enemy_spells, [])
  45. enemy3 = Person("Imp  ", 1250, 130, 560, 325, enemy_spells, [])
  46.  
  47. players = [player1, player2, player3]
  48. enemies = [enemy1, enemy2, enemy3]
  49.  
  50. running = True
  51. i = 0
  52.  
  53. print(bcolors.FAIL + bcolors.BOLD + "AN ENEMY ATTACKS!" + bcolors.ENDC)
  54.  
  55. while running:
  56.     print("==============================")
  57.  
  58.     print("\n\n")
  59.     print("NAME                    HP                                       MP")
  60.     for player in players:
  61.         player.get_stats()
  62.  
  63.     print("\n")
  64.  
  65.     for enemy in enemies:
  66.         enemy.get_enemy_stats()
  67.  
  68.  
  69.     for player in players:
  70.         player.choose_action()
  71.         choice = input("    Choose action: ")
  72.         index = int(choice) - 1
  73.  
  74.         if index == 0:
  75.             dmg = player.generate_damage()
  76.             enemy = player.choose_target(enemies)
  77.  
  78.             enemies[enemy].take_damage(dmg)
  79.             print("\n" + "You attacked " +enemies[enemy].name.replace("  ", "") + " for", dmg, "points of damage.")
  80.  
  81.             if enemies[enemy].get_hp() == 0:
  82.                 print(enemies[enemy].name.replace("  ", "") + " has died.")
  83.                 del enemies[enemy]
  84.  
  85.         elif index == 1:
  86.             player.choose_magic()
  87.             magic_choice = int(input("    Choose magic: ")) - 1
  88.  
  89.             if magic_choice == -1:
  90.                 continue
  91.  
  92.             spell = player.magic[magic_choice]
  93.             magic_dmg = spell.generate_damage()
  94.  
  95.             current_mp = player.get_mp()
  96.  
  97.             if spell.cost > current_mp:
  98.                 print(bcolors.FAIL + "\nNot enough MP\n" + bcolors.ENDC)
  99.                 continue
  100.  
  101.             player.reduce_mp(spell.cost)
  102.  
  103.             if spell.type == "white":
  104.                 player.heal(magic_dmg)
  105.                 print(bcolors.OKBLUE + "\n" + spell.name + " heals for", str(magic_dmg), "HP." + bcolors.ENDC)
  106.             elif spell.type == "black":
  107.  
  108.                 enemy = player.choose_target(enemies)
  109.  
  110.                 enemies[enemy].take_damage(magic_dmg)
  111.  
  112.                 print(bcolors.OKBLUE + "\n" + spell.name + " deals", str(magic_dmg), "points of damage to " + enemies[enemy].name.replace("  ", "") + bcolors.ENDC)
  113.  
  114.                 if enemies[enemy].get_hp() == 0:
  115.                     print(enemies[enemy].name + " has died.")
  116.                     del enemies[enemy]
  117.  
  118.         elif index == 2:
  119.             player.choose_item()
  120.             item_choice = int(input("    Choose item: ")) - 1
  121.  
  122.             if item_choice == -1:
  123.                 continue
  124.  
  125.             item = player.items[item_choice]["item"]
  126.  
  127.             if player.items[item_choice]["quantity"] == 0:
  128.                 print(bcolors.FAIL + "\n" + "None left..." + bcolors.ENDC)
  129.                 continue
  130.  
  131.             player.items[item_choice]["quantity"] -= 1
  132.  
  133.             if item.type == "potion":
  134.                 player.heal(item.prop)
  135.                 print(bcolors.OKGREEN + "\n" + item.name + " heals for", str(item.prop), "HP", bcolors.ENDC)
  136.             elif item.type == "elixer":
  137.  
  138.                 if item.name == "MegaElixer":
  139.                     for i in players:
  140.                         i.hp = i.maxhp
  141.                         i.mp = i.maxmp
  142.                 else:
  143.                     player.hp = player.maxhp
  144.                     player.mp = player.maxmp
  145.                 print(bcolors.OKGREEN + "\n" + item.name +" fully restores HP/MP" + bcolors.ENDC)
  146.             elif item.type == "attack":
  147.  
  148.                 enemy = player.choose_target(enemies)
  149.  
  150.                 enemies[enemy].take_damage(item.prop)
  151.  
  152.                 print(bcolors.FAIL + "\n" + item.name + " deals", str(item.prop), " points of damage to " + enemies[enemy].name.replace("  ", "") + "." + bcolors.ENDC)
  153.  
  154.     if enemies[enemy].get_hp() == 0:
  155.         print(enemies[enemy].name.replace("  ", "") + " has died.")
  156.         del enemies[enemy]
  157.  
  158.     defeated_enemies = 0
  159.     defeated_players = 0
  160.  
  161.     for player in players:
  162.         if player.get_hp() == 0:
  163.             defeated_players += 1
  164.  
  165.     for enemy in enemies:
  166.         if enemy.get_hp() == 0:
  167.             defeated_enemies += 1
  168.  
  169.     # Check if Player won
  170.     if defeated_enemies == 2:
  171.         print(bcolors.OKGREEN + "You win!" + bcolors.ENDC)
  172.         running = False
  173.  
  174.     # Check if Enemy won
  175.     elif defeated_players == 2:
  176.         print(bcolors.FAIL + "Your enemies have defeated you!" + bcolors.ENDC)
  177.         running = False
  178.  
  179.     print("\n")
  180.     # Enemy attack phase
  181.     for enemy in enemies:
  182.         enemy_choice = random.randrange(0, 2)
  183.  
  184.         if enemy_choice == 0:
  185.             target = random.randrange(0, 2)
  186.             enemy_dmg = enemies[0].generate_damage()
  187.  
  188.             players[target].take_damage(enemy_dmg)
  189.             print(enemy.name.replace("  ", "") + " attacks " + players[target].name.replace(" ", "") + " for", str(enemy_dmg) + ".")
  190.  
  191.         elif enemy_choice == 1:
  192.             spell, magic_dmg = enemy.choose_enemy_spell()
  193.             enemy.reduce_mp(spell.cost)
  194.  
  195.             if spell.type == "white":
  196.                 enemy.heal(magic_dmg)
  197.                 print(bcolors.OKBLUE + spell.name + " heals " + enemy.name.replace("  ", "") + " for", str(magic_dmg), "HP." + bcolors.ENDC)
  198.             elif spell.type == "black":
  199.  
  200.                 target = random.randrange(0, 2)
  201.  
  202.                 players[target].take_damage(magic_dmg)
  203.  
  204.                 print(bcolors.OKBLUE + "\n" + enemy.name.replace(" ", "") + "'s " + spell.name + " deals", str(magic_dmg),
  205.                       "points of damage to " + players[target].name.replace("  ", "") + bcolors.ENDC)
  206.  
  207.                 if players[target].get_hp() == 0:
  208.                     print(players[target].name.replace("  ", "") + " has died.")
  209.                     del players[player]
  210.  
  211.             # print("Enemy chose", spell, "damage is", magic_dmg)
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218. game.py
  219. import random
  220. import pprint
  221.  
  222. class bcolors:
  223.         HEADER = '\033[95m'
  224.         OKBLUE = '\033[94m'
  225.         OKGREEN = '\033[92m'
  226.         WARNING = '\033[93m'
  227.         FAIL = '\033[91m'
  228.         ENDC = '\033[0m'
  229.         BOLD = '\033[1m'
  230.         UNDERLINE = '\033[4m'
  231.  
  232. class Person:
  233.     def __init__(self, name, hp, mp, atk, df, magic, items):
  234.         self.maxhp = hp
  235.         self.hp = hp
  236.         self.maxmp = mp
  237.         self.mp = mp
  238.         self.atkl = atk - 10
  239.         self.atkh = atk + 10
  240.         self.df = df
  241.         self.magic = magic
  242.         self.items = items
  243.         self.actions = ["Attack", "Magic", "Items"]
  244.         self.name = name
  245.  
  246.     def generate_damage(self):
  247.             return random.randrange(self.atkl, self.atkh)
  248.  
  249.     def take_damage(self, dmg):
  250.         self.hp -= dmg
  251.         if self.hp < 0:
  252.             self.hp = 0
  253.         return self.hp
  254.  
  255.     def heal(self, dmg):
  256.         self.hp += dmg
  257.         if self.hp > self.maxhp:
  258.             self.hp = self.maxhp
  259.  
  260.     def get_hp(self):
  261.         return self.hp
  262.  
  263.     def get_max_hp(self):
  264.         return self.maxhp
  265.  
  266.     def get_mp(self):
  267.         return self.mp
  268.  
  269.     def get_max_mp(self):
  270.         return self.maxmp
  271.  
  272.     def reduce_mp(self, cost):
  273.         self.mp -= cost
  274.  
  275.     def choose_action(self):
  276.         i = 1
  277.         print("\n" + "    " + bcolors.BOLD + self.name + bcolors.ENDC)
  278.         print(bcolors.OKBLUE + bcolors.BOLD + "    ACTIONS:" + bcolors.ENDC)
  279.         for item in self.actions:
  280.             print("        " + str(i) + ":", item)
  281.             i += 1
  282.  
  283.     def choose_magic(self):
  284.         i = 1
  285.  
  286.         print("\n" + bcolors.OKBLUE + bcolors.BOLD + "    MAGIC:" + bcolors.ENDC)
  287.         for spell in self.magic:
  288.             print("        " + str(i) + ":", spell.name, "(cost:", str(spell.cost) + ")")
  289.             i += 1
  290.  
  291.     def choose_item(self):
  292.         i=1
  293.  
  294.         print("\n" + bcolors.OKGREEN + bcolors.BOLD + "    ITEMS:" + bcolors.ENDC)
  295.         for item in self.items:
  296.             print("        " + str(i) + ".", item["item"].name + ":", item["item"].description, " (x" + str(item["quantity"]) + ")")
  297.             i += 1
  298.  
  299.     def choose_target(self, enemies):
  300.         i = 0
  301.         print("\n" + bcolors.FAIL + bcolors.BOLD + "    TARGET:" + bcolors.ENDC)
  302.         for enemy in enemies:
  303.             if enemy.get_hp() != 0:
  304.                 print("        " + str(i+1) + "." + enemy.name)
  305.                 i += 1
  306.         choice = int(input("    Chose target: ")) - 1
  307.         return choice
  308.  
  309.     def get_enemy_stats(self):
  310.         hp_bar = ""
  311.         bar_ticks = (self.hp / self.maxhp) * 100 / 2
  312.  
  313.         while bar_ticks > 0:
  314.             hp_bar += "█"
  315.             bar_ticks -= 1
  316.  
  317.         while len(hp_bar) < 50:
  318.             hp_bar += " "
  319.  
  320.         hp_string = str(self.hp) + "/" + str(self.maxhp)
  321.         current_hp = ""
  322.  
  323.         if len(hp_string) < 11:
  324.             decreased = 11 - len(hp_string)
  325.  
  326.             while decreased > 0:
  327.                 current_hp += " "
  328.                 decreased -= 1
  329.  
  330.             current_hp += hp_string
  331.         else:
  332.             current_hp = hp_string
  333.  
  334.         print("                        __________________________________________________")
  335.         print(bcolors.BOLD + self.name + "      " +
  336.               current_hp + " |" + bcolors.FAIL + hp_bar + bcolors.ENDC + bcolors.BOLD + "|     ")
  337.  
  338.     def get_stats(self):
  339.         hp_bar = ""
  340.         bar_ticks = (self.hp / self.maxhp) * 100 / 4
  341.  
  342.         mp_bar = ""
  343.         mp_ticks = (self.mp / self.maxmp) * 100 / 10
  344.  
  345.         while bar_ticks > 0:
  346.             hp_bar += "█"
  347.             bar_ticks -= 1
  348.  
  349.         while len(hp_bar) < 25:
  350.              hp_bar += " "
  351.  
  352.         while mp_ticks > 0:
  353.             mp_bar += "█"
  354.             mp_ticks -= 1
  355.  
  356.         while len(mp_bar) < 10:
  357.             mp_bar += " "
  358.  
  359.         hp_string = str(self.hp) + "/" + str(self.maxhp)
  360.         current_hp = ""
  361.  
  362.         if len(hp_string) < 9:
  363.             decreased = 9 - len(hp_string)
  364.  
  365.             while decreased > 0:
  366.                 current_hp += " "
  367.                 decreased -= 1
  368.  
  369.             current_hp += hp_string
  370.         else:
  371.             current_hp = hp_string
  372.  
  373.         mp_string = str(self.mp) + "/" + str(self.maxmp)
  374.         current_mp = ""
  375.  
  376.         if len(mp_string) < 7:
  377.             decreased = 7 - len(mp_string)
  378.             while decreased > 0:
  379.                 current_mp += " "
  380.                 decreased -= 1
  381.  
  382.             current_mp += mp_string
  383.  
  384.         else:
  385.             current_mp = mp_string
  386.  
  387.         print("                        _________________________                __________")
  388.         print(bcolors.BOLD + self.name + "       " +
  389.              current_hp + " |" + bcolors.OKGREEN + hp_bar + bcolors.ENDC + bcolors.BOLD + "|     " +
  390.              current_mp + "  |" + bcolors.OKBLUE + mp_bar + bcolors.ENDC + "|")
  391.  
  392.     def choose_enemy_spell(self):
  393.         magic_choice = random.randrange(0, len(self.magic))
  394.         spell = self.magic[magic_choice]
  395.         magic_dmg = spell.generate_damage()
  396.  
  397.         pct = self.hp / self.maxhp * 100
  398.  
  399.         if self.mp < spell.cost or spell.type == "white" and pct > 50:
  400.             self.choose_enemy_spell()
  401.         else:
  402.             return spell, magic_dmg
  403.  
  404.  
  405.  
  406. inventory.py
  407. class Item:
  408.         def __init__(self, name, type, description, prop):
  409.                 self.name = name
  410.                 self.type = type
  411.                 self.description = description
  412.                 self.prop = prop
  413.  
  414.  
  415.  
  416. magic.py
  417. import random
  418.  
  419. class Spell:
  420.     def __init__(self, name, cost, dmg, type):
  421.         self.name = name
  422.         self.cost = cost
  423.         self.dmg = dmg
  424.         self.type = type
  425.  
  426.     def generate_damage(self):
  427.         low = self.dmg - 15
  428.         high = self.dmg + 15
  429.         return random.randrange(low, high)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement