Beispiel #1
0
def win_fight(hero, enemy):
    print(
        "Zwycięstwo,", enemy.name,
        "został pokonany! Sława i doświadczenie są Twoje,\
        \n...a może jeszcze jakiś łup bitewny?")

    # check if there are some treasures in enemy inventory:
    if len(enemy.treasure_dict) > 0:
        mod_display.pause()
        print("\nTak!\n")
        add_remove_items_dict = enemy.treasure_dict
        # display treasures from enemy inventory:
        mod_display.display_looted_items(add_remove_items_dict)
        mod_hero.inventory_update(hero, add_remove_items_dict)
        mod_display.pause()
    mod_display.clear_screen()
    print("Może coś jeszcze?", end=''), mod_display.dot_loop()
    looted_gold = mod_enemy.enemy_gold_reward(enemy)
    if looted_gold > 0:
        print("\n\nzdobyto", looted_gold, "sztuk złota\n")
        hero.gold += looted_gold
    # and some random generated items:
    mod_items.treasure_generator(
        maxloops=enemy.maxdrop, maxitem_lvl=enemy.maxdrop_lvl,
        item_gen=None, hero=hero
        )
    mod_display.display_info_about_next_map_portal(hero=hero)

    return hero
Beispiel #2
0
def priority_test(hero, enemy=None):
    '''
    who's attacker, who's defender
    '''
    mod_display.clear_screen()
    mod_display.display_enemy_vs_hero(hero, enemy=enemy, attacker=None)
    # zwinność, percepcja i inteligencja have influence on this test:
    hero_test_stats = (
        int(hero.attrib_dict["zwinność"]) +
        int(hero.attrib_dict["percepcja"]) +
        int(hero.attrib_dict["inteligencja"]))
    enem_test_stats = (
        int(enemy.attrib_dict["zwinność"]) +
        int(enemy.attrib_dict["percepcja"]) +
        int(enemy.attrib_dict["inteligencja"]))
    print("\nKto uzyskał inicjatywę? (test inicjatywy)\n")

    while True:
        test_var1 = hero_test_stats + enem_test_stats
        test_var2 = random.randint(1, test_var1) 
        print('\r\r'+hero.name+":", hero_test_stats)
        print('\r\r'+enemy.name+":", test_var2)
        if hero_test_stats > test_var2:
            print("\nRezultat:", end=''), mod_display.dot_loop()
            print("\n\natakuje", hero.name+'!')
            attacker = hero
            break

        elif hero_test_stats < test_var2:
            print("\nRezultat:", end=''), mod_display.dot_loop()
            print("\n\natakuje", enemy.name+'!')
            attacker = enemy
            break

    mod_display.pause()
    mod_display.clear_screen()

    return attacker
Beispiel #3
0
def event_fight(hero, enemy):
    '''
    event == fight with random enemy
    '''
    # random generate enemy (using filters):
    enemy = mod_enemy.summon_enemy(
        name=None, loc=hero.location, lvl=None, gen=None
        )
    print("\n\nZaraz, zaraz... Coś się dzieje!\n"), time.sleep(.3)
    print("Twój przeciwnik to", end=''), mod_display.dot_loop()
    print(' ', enemy.name.upper()+'!', '\n')
    mod_display.pause()
    mod_display.clear_screen()
    # pętla walki:
    combat_end = 0
    while combat_end == 0 and hero.actual_life > 0 and enemy.actual_life > 0:
        # initiative test:
        attacker = priority_test(hero, enemy=enemy)
        attacker_change = 0
        # if attacker_change == 1,
        # loop is break and we repeat initiative test

        while True:
            mod_display.display_enemy_vs_hero(
                hero, enemy=enemy, attacker=attacker
                )
            attacker_change = fight(hero, enemy, attacker)
            mod_display.pause()
            mod_display.clear_screen()
            if hero.actual_life < 1:
                combat_end = 1
                hero.actual_life = 0
                break

            elif enemy.actual_life < 1:
                win_fight(hero, enemy)
                combat_end = 1
                break

            elif attacker_change == 1:
                break

    return hero
Beispiel #4
0
def counterattack(enemy=None, hero=None, attacker=None, attack=None):
    '''
    part of the fight mechanic (part of fight function) 
    '''
    mod_display.display_enemy_vs_hero(
        hero, enemy=enemy, attacker=attacker
        )

    # define attacker and defender:
    if attacker == hero:
        defender = enemy
    elif attacker == enemy:
        defender = hero

    print("\nkontratak!", end='')
    mod_display.dot_loop()
    counterattack_result = 0
    print(
        '\n'+defender.name, " kontratakuje: rzuca",
        str(defender.attrib_dict[str(defender.combat_attribute)]),
        "razy kością K4:"
        )
    damage = random.randint(defender.dmg_list[0], defender.dmg_list[1])
    for i in range(int(defender.attrib_dict[str(defender.combat_attribute)])):
        counterattack_var = random.randint(1, 4)
        print(
            (str(counterattack_var)), "      ", sep='', end='', flush=True
            ), time.sleep(0.3)
        counterattack_result += counterattack_var
    print("\n\nRezultat:", end=''), mod_display.dot_loop()
    print(
        '\n\n'+defender.name+':', counterattack_result, '+',
        defender.attack, "(atak):", counterattack_result
        + defender.attack
        )
    print(attacker.name+':', attack), time.sleep(0.3)
    if attack < counterattack_result+defender.attack:
        if damage > attacker.actual_life:
            damage = attacker.actual_life
        attacker.actual_life -= damage
        print(
            defender.name, "zadał obrażenia:", attacker.name,
            "stracił", damage, "pkt. życia"
            )
        time.sleep(0.3)
        if defender == hero:
            hero.actualExp += damage
            print(hero.name+", zdobyto doświadczenie:", damage)

            return hero.actualExp

        if defender.actual_life < 0:
            defender.actual_life = 0
            combat_end = 1  # break fight loop

            return combat_end

    else:
        print('\n'+attacker.name, "obronił się!")
        attacker_change = 1

        return attacker_change
Beispiel #5
0
def event_fight_spec_enemy(enemy=None, hero=None):
    '''
    event == fight with special (quest) enemy
    '''

    # random generate enemy (using filters):
    enemy = mod_enemy.summon_enemy(name=enemy)
    if enemy.name not in hero.enemy_killed:
        print("\n\nZaraz, zaraz... Coś się dzieje!\n"), time.sleep(.3)
        print(
            "Szykuj się do walki. Twój przeciwnik to", end=''
            ), mod_display.dot_loop()

        print(' ', enemy.name.upper()+'!', '\n')
        mod_display.pause()
        mod_display.clear_screen()
        # fight loop:
        combat_end = 0
        while (
            combat_end == 0 and
            hero.actual_life > 0 and
            enemy.actual_life > 0
        ):
            # initiative test:
            attacker = priority_test(hero, enemy=enemy)
            # if attacker_change == 1:
            # loop is break and repeat initiative test
            attacker_change = 0
            while True:
                mod_display.display_enemy_vs_hero(
                    hero, enemy=enemy, attacker=attacker
                    )
                attacker_change = fight(hero, enemy, attacker)
                mod_display.pause()
                mod_display.clear_screen()
                if hero.actual_life < 1:
                    hero.actual_life = 0
                    combat_end = 1
                    break
         
                elif enemy.actual_life < 1:
                    # enemy is dead:
                    enemy.actual_life = 0
                    hero.quest_condition_list.append(enemy.quest_condition)
                    if enemy.genre == "quest":  # quest enemies are unique
                        # block enemy for future:
                        hero.enemy_killed.append(enemy.name)
                    # if it is quest enemy (is either enemy and quest npc):
                    try:
                        # import npc by enemy name (if it is quest enemy):
                        npc = mod_npc.npc_settings(
                            name=enemy.name, loc=None, gen=None
                            )
                        # info in hero attribute, that quest is completed:
                        hero.quest_completed_list.append(npc.quest_name)
                        # update quest info to display:
                        if npc.quest_name not in hero.quest_info.keys():
                            hero.quest_info.update(
                                {npc.quest_name: [enemy.quest_info]}
                                ) 
                        else:
                            hero.quest_info[npc.quest_name][0] += (
                                '\n'+str(enemy.quest_info))
                        # check if there is special reward for quest
                        # (teleport to next level (map))
                        # if True: return updated hero.new_location
                        # (signal to display info about portal)
                        check_if_portal(hero, npc=npc)
                    except:
                        pass  # I just want to ignore potential error

                    if enemy.quest_info:
                        # display statment about quest
                        # (element of enemy quest list):
                        print(enemy.quest_info)

                    win_fight(hero, enemy)
                    combat_end = 1  # combat_end == 1: break fight loop
                    break

                elif attacker_change == 1:
                    break

    return hero
Beispiel #6
0
def fight(hero, enemy, attacker):
    '''
    fight mechanic = hit
    '''

    # define attacker and defender:
    if attacker == hero:
        defender = enemy
    elif attacker == enemy:
        defender = hero

    attacker_change = 0

    attack_result = 0
    defend_result = 0
    print(
        '\n'+attacker.name, "atakuje: rzuca",
        attacker.attrib_dict[str(attacker.combat_attribute)],
        "razy kością K4:"
        )
    for i in range(int(attacker.attrib_dict[str(attacker.combat_attribute)])):
        attack_var = random.randint(1, 4)
        print(
            (str(attack_var)), "      ", sep='', end='', flush=True
            ), time.sleep(0.3)
        attack_result += attack_var
    time.sleep(0.3)
    print(
        '\n'+defender.name, "broni się: rzuca",
        str(defender.attrib_dict["zwinność"]), "razy kością K4:"
        )
    for i in range(int(defender.attrib_dict["zwinność"])):
        defend_var = random.randint(1, 4)
        print(
            (str(attack_var)), "      ", sep='', end='', flush=True
            ), time.sleep(0.3)
        defend_result += defend_var
        
    print("\n\nRezultat:", end=''), mod_display.dot_loop()
    print(
        '\n\n'+attacker.name+':', attack_result, '+',
        attacker.attack, "(atak):", attack_result+attacker.attack
        )
    print(
        defender.name+':', defend_result, '+',
        defender.defend, "(obrona):", defend_result+defender.defend
        )
    if attack_result+attacker.attack <= defend_result+defender.defend:
        print('\n'+defender.name, "obronił się!")
        mod_display.pause()
        attacker_change = 1
        attack = int(attack_result+attacker.attack)
        counterattack(enemy=enemy, hero=hero, attacker=attacker, attack=attack)

        return attacker_change

    else:
        damage = random.randint(attacker.dmg_list[0], attacker.dmg_list[1])
        if damage > defender.actual_life:
            damage = defender.actual_life
        print(
            '\n'+attacker.name, "zadał obrażenia:",
            defender.name, "stracił", damage, "pkt. życia"
            )
        time.sleep(0.3)      
        defender.actual_life -= damage
        if attacker == hero:
            hero.actualExp += damage
            print(hero.name+", zdobyto doświadczenie:", damage)
        if defender.actual_life < 0:
            defender.actual_life = 0
            combat_end = 1
            time.sleep(0.3)

            return combat_end