Exemple #1
0
class Monster(object):
    def __init__(self):
        name = RandomMonsterName()
        self.fullName = name.getFullName()
        self.shortName = name.getShortName()
        self.hp = 10
        self.strength = 1
        self.killed = False
        self.hasLoot = False
        self.level = 1
        self.item = Items()
        self.Loot = self.item.randomWeapon(self.level)
        self.handler = Stringhandler()

    def getFullName(self):
        return self.fullName

    def getShortName(self):
        return self.shortName

    def is_alive(self):
        if self.hp > 0:
            return True
        else:
            self.killed = True
            return self.killed

    def takeDamage(self, damage, player):

        self.hp -= damage
        string = '"' + self.handler.strMonster("hit", self, player) + '"\n'
        for char in string:
            time.sleep(uniform(0.05, 0.08))
            sys.stdout.write('\033[32m' + '\033[1m' + char)
            sys.stdout.flush()
        print Fore.WHITE
        time.sleep(0.5)

    def getHP(self):
        return self.hp

    def getLoot(self):
        return self.Loot

    def setLoot(self, value):
        self.Loot = self.item.randomWeapon(value)

    def kill(self):
        self.killed = True

    def calcDamage(self):
        damage = self.strength + random.randint(0, 3)
        return damage

    def setup(self, difficulty, player_level):
        self.killed = False
        if difficulty is 1:
            self.hp = player_level + random.randint(10, 25)
            self.strength = player_level + random.randint(1, 9)
            rnd = random.randint(0, 10)
            if rnd > 3:
                self.hasLoot = True
            self.level = random.randint(1, 10)
            self.setLoot(self.level)

        else:
            self.hp = player_level + random.randint(15, 35)
            self.strength = player_level + random.randint(5, 15)

            rnd = random.randint(0, 10)
            if rnd > 7:
                self.hasLoot = True
            self.level = random.randint(1, 6)
            self.setLoot(self.level)

    def attackPlayer(self, room, player, damage):

        return player.takeDamage(damage, room.monster)

    def attack(self, room, player):
        damage = player.getStrength() + random.randint(0, 3)
        damageplayer = self.calcDamage()
        if (self.hp - damage <= 0):
            room.killMonster()
            player.facesMonster = False
            if self.hasLoot:
                return self.handler.strMonster("killedLoot", self,
                                               player) + "\n" + player.addItem(
                                                   self.getLoot())
            else:

                return self.handler.strMonster("killed", self, player)

        elif player.hp - damageplayer <= 0:

            return "\n" + self.attackPlayer(room, player, damageplayer)
        else:

            self.takeDamage(damage, player)
            return self.handler.strMonsterDamage("getAttacked",self,damage,player) +"\n"+\
            self.handler.strMonsterDamage("returnHP",self,damage,player) +"\n"+self.attackPlayer(room,player,damageplayer)

    def flee(self, room, player):
        player.facesMonster = False
        damage = self.calcDamage()

        if damage < 5:
            return self.handler.strMonster(
                "flee", room.monster, player) + " " + self.handler.strMonster(
                    "fleeSuccess", room.monster, player)
        else:
            return self.handler.strMonster(
                "flee", room.monster, player) + " " + self.handler.strMonster(
                    "fleeFail", room.monster,
                    player) + "\n" + player.takeDamage(damage, room.monster)

    def spawn(self, room, player):
        if room.hasMonster:
            if not self.killed and player.facesMonster:
                response = "something went wrong"
                return response
            elif room.hasMonster and not self.killed:
                player.facesMonster = True
                damage = self.calcDamage()
                return self.handler.strMonsterDamage(
                    "spawn", self, damage, player) + "\n" + player.takeDamage(
                        damage, room.monster)
class Endboss(object):
    def __init__(self):

        self.handler = Stringhandler()
        self.bossList = []
        self.byteBoss = Bosslist.ByteBoss()
        self.hipsterBoss = Bosslist.HipsterBoss()
        self.boss = None

    def randomBoss(self, player):
        self.bossList.append(self.byteBoss)
        self.bossList.append(self.hipsterBoss)
        # self.bossList.append("")
        # self.bossList.append("")
        self.boss = random.choice(self.bossList)
        return self.boss

    def kill(self):
        self.boss.killed = True

    def takeDamage(self, damage, player):
        self.boss.hp -= damage

    def getHP(self):
        return self.boss.hp

    def calcDamage(self):
        damage = self.boss.strength + random.randint(0, 3)
        return damage

    def attackFromPlayer(self, player):
        damage = player.getStrength() + random.randint(0, 3)
        if (self.boss.hp - damage <= 0):
            self.kill()
            player.facesBoss = False
            player.victory = True
            if isinstance(self.boss, ByteBoss):
                return self.handler.strBoss("bDie", player, damage)
            elif isinstance(self.boss, HipsterBoss):
                return self.handler.strBoss("hDie", player, damage)
            else:
                return "Error 404: Boss not found"
        else:
            self.takeDamage(damage, player)

            if isinstance(self.boss, ByteBoss):
                print self.handler.strBoss(
                    "bHit", player,
                    damage) + "\n" + self.handler.strMonsterDamage(
                        "returnHP", self.boss, damage, player)
                return "\n" + self.attack(player)
            elif isinstance(self.boss, HipsterBoss):
                print self.handler.strBoss(
                    "hHit", player,
                    damage) + "\n" + self.handler.strMonsterDamage(
                        "returnHP", self.boss, damage, player) + "\n"
                return self.attack(player)

    def attack(self, player):
        damage = self.calcDamage()
        if isinstance(self.boss, ByteBoss):
            return player.takeDamage(damage, self.boss)
        elif isinstance(self.boss, HipsterBoss):
            return player.takeDamage(damage, self.boss)

    def spawn(self, player):
        player.facesBoss = True
        damage = self.calcDamage()
        if isinstance(self.boss, ByteBoss):
            return self.handler.strBoss("bSpawn", player, damage)
        elif isinstance(self.boss, HipsterBoss):
            return self.handler.strBoss("hSpawn", player, damage)