Moortiii icon

Fighting monsters

Moortiii | PRO | 04/17/17 09:24:30 PM UTC | 0 ⭐ | 364 👁️ | Never ⏰ | []
Python |

6.01 KB

|

None

|

0 👍

/

0 👎

import random
import time
 
def sleep():
    time.sleep(1)
    print("")
    
class Player():
    def __init__(self, hitpoints, attack):
        self.hitpoints = hitpoints
        self.attack = attack
        self.backpack = {"bandages": 5, "hatchet": 1, "rocks": 3}
 
    def pAttack(self, monster):
        sleep()
        diceRoll = random.randint(1,6)
        if(diceRoll >= 5):
            criticalHit = (self.attack * 2) - 1
            monster.hitpoints -= criticalHit
            print("You critically hit the {}!".format(monster.name))
            print("You deal {} damage. The {} now has {} hitpoints left".format(criticalHit, monster.name, monster.hitpoints))
        else:
            monster.hitpoints -= self.attack
            print("You manage to hit the {}!".format(monster.name))
            print("You deal {} damage. The {} now has {} hitpoints left".format(self.attack, monster.name, monster.hitpoints))
 
    def pBlock(self, monster):
        sleep()
        print("You manage to block the {}'s hit!".format(monster.name))
        print("You still have {} hitpoints left".format(self.hitpoints))
 
    def pMisses(self, monster):
        sleep()
        print("You miss your swing at the {}!".format(monster.name))
        print("The {} still has {} hitpoints left.".format(monster.name, monster.hitpoints))
 
    def viewInventory(self):
        print("Backpack: {}".format(self.backpack))
 
    def useItem(self):
        itemToUse = input("Type 'B' to use a bandage and heal up: ").upper()
        if(itemToUse == "B"):
            if(self.backpack["bandages"] > 0):
                self.hitpoints += 5
                self.backpack["bandages"] -= 1
                print("You have {} bandages left".format(self.backpack["bandages"]))
            else:
                print("You are out of bandages!")
class Monster():
    def __init__(self, color, hitpoints, attack):
        self.color = color
        self.hitpoints = hitpoints
        self.attack = attack
        self.name = "fabledong"
    
    def mAttack(self, player):
        sleep()
        player.hitpoints -= self.attack
        print("The {} hits its attack!".format(self.name))
        print("It deals {} damage. You now have {} hitpoints left.".format(self.attack, player.hitpoints))
 
    def mMisses(self, player):
        sleep()
        print("The {} misses its attack!".format(self.name))
        print("You still have {} hitpoints left".format(player.hitpoints))
        
    def mBlock(self):
        sleep()
        print("The {} is able to block your attack!".format(self.name))
        print("The {} still has {} hitpoints left".format(self.name, self.hitpoints))
 
class Dragon():
    def __init__(self, hitpoints, attack):
        self.hitpoints = hitpoints
        self.attack = attack
        self.spells = ["fireball", "iceblast", "earthquake"]
        self.name = "dragon"
 
    def mAttack(self, player):
        spellChoice = random.choice(self.spells)
        spellDamage = 0
        if(spellChoice == "fireball"):
            spellDamage = 3
        elif(spellChoice == "iceblast"):
            spellDamage = 5
        elif(spellChoice == "earthquake"):
            spellDamage = 8
        player.hitpoints -= spellDamage
        sleep()
        print("The {} uses {}!".format(self.name, spellChoice))
        sleep()
        print("It deals {} damage to you. You have {} hitpoints left!".format(spellDamage, player.hitpoints))
 
    def mMisses(self, player):
        sleep()
        print("The {} misses its attack!".format(self.name))
        print("You still have {} hitpoints left".format(player.hitpoints))
        
    def mBlock(self):
        sleep()
        print("The {} is able to block your attack!".format(self.name))
        print("The {} still has {} hitpoints left".format(self.name, self.hitpoints))
        
 
def fightMonster(player, monster):
    print("The {} has {} attack and {} hitpoints.".format(monster.name, monster.attack, monster.hitpoints))
    print("You have {} attack and {} hitpoints.".format(player.attack, player.hitpoints))
    while(True):
        mIsStunned = False
        if(player.hitpoints > 0):
            wantsToAttack = input("Do you want to attack, block or use an item? 'A' / 'B' / 'I'\n\n").upper()
            if(wantsToAttack == "A"):
                pDiceRoll = random.randint(1,6)
                if(pDiceRoll > 3):
                    player.pAttack(monster)
                else:
                    player.pMisses(monster)
            elif(wantsToAttack == "I"):
                player.viewInventory()
                player.useItem()
            else:
                pDiceRoll = random.randint(1,6)
                if(pDiceRoll > 3):
                    player.pBlock(monster)
                    print("You stun the {}, it's a guaranteed hit!".format(monster.name))
                    mIsStunned = True
                    player.pAttack(monster)
                else:
                    monster.mAttack(player)
            if(monster.hitpoints <= 0):
                print("The {} is all out of hitpoints! You win the battle!".format(monster.name))
                break
            else:
                if(mIsStunned):
                    sleep()
                    print("The {} is stunned and unable to attack".format(monster.name))
                else:
                    if(player.hitpoints > 0):
                        print("The {} tries to attack you.".format(monster.name))
                        mDiceRoll = random.randint(1,6)
                        if(mDiceRoll > 3):
                            monster.mAttack(player)
                        else:
                            monster.mMisses(player)
        else:
            print("You are out of hitpoints! You lose the battle!")
            break
    sleep()
 
def playGame():
    myMonster = Monster("red", 15, 2)
    myDragon = Dragon(20, 5)
    myPlayer = Player(20, 4)
    fightMonster(myPlayer, myMonster)
    fightMonster(myPlayer, myDragon)
 
playGame()

Comments