def generate_level(level):
    x = 0
    y = 0
    new_player = None
    for y in range(len(level)):
        for x in range(len(level[y])):
            if level[y][x] == '.':
                pass
            elif level[y][x] == '#':
                Tile('wall', x, y)
            elif level[y][x] == 'p':
                portal = Portal('portal', x, y)
                portals.add(portal)
            elif level[y][x] == 'b':
                beer = Beer('beer', x, y)
                beer_group.add(beer)
                all_sprites.add(beer)
            elif level[y][x] == '@':
                new_player = Player(PLATFORM_WIDTH * x + PLATFORM_WIDTH // 2, PLATFORM_HEIGHT * y, all_sprites)
                ll = list(level[y])
                ll[x] = '.'
                level[y] = ll
                all_sprites.add(new_player)
            elif level[y][x] == 'e':
                new_enemy = Enemy(PLATFORM_WIDTH * x, PLATFORM_HEIGHT * y, random.randrange(2, 5), bullets_group, all_sprites, None)
                enemy_group.add(new_enemy)
                entity_group.add(new_enemy)

    for en in enemy_group:
        en.hero = new_player

    # вернем игрока, а также размер поля в клетках
    return new_player, enemy_group, x, y
Ejemplo n.º 2
0
    def spawn(self, clk, rnd):
        """
        Spawnt die Gegner 
        :param : clock, Runde
        :return: None
        """
        if (rnd % 7 == 0):
            if (self.rate_change):
                self.rate = self.rate * 0.75
                self.rate_change = False
        else:
            self.rate_change = True

        to_spawn = int(
            8 * self.en_scaling**(rnd - 1))  # Scaling wie viele to_spawn
        health = int(10 *
                     self.health_scaling**(rnd - 1))  # Scaling wie viel Leben

        if ((clk %
             int(self.rate)) == 0):  # Spawn an enemy every rate iteration
            if (self.enemies_spawned < to_spawn):  # did I spawn all enemy
                self.spawning = True
                self.enemies_spawned += 1
                self.enemies.append(Enemy(126, 4, self.path, health))
            else:
                self.spawning = False
Ejemplo n.º 3
0
def enemy_spawn(enemy_type, spawn):
    if spawn:
        enemies.append(Enemy(enemy_type, resolution, fps, level.image.get_height()))
    else:
        for enemy in enemies:
            enemy.update()
            all_sprites.add(enemy)
Ejemplo n.º 4
0
 def story_continue(self, player):
   index=0
   enemylist=[]
   name=None
   atkType=None
   hp=None
   patk=None
   pdef=None
   matk=None
   mdef=None
   spd=None
   for dialogue in self.story:
     if dialogue=="Initiate Battle":
       i=index 
       while True:
         i+=1
         dialogue=self.story[i]
         if dialogue=="end":
           break
         for x, term in enumerate(dialogue):
           if x==0:
             name=term
           elif x==1:
             atkType=term
           elif x==2:
             hp=term
           elif x==3:
             patk=term
           elif x==4:
             pdef=term
           elif x==5:
             matk=term
           elif x==6:
             mdef=term
           elif x==7:
             spd=term
         enemylist.append(Enemy(name, atkType, hp, patk, pdef, matk, mdef, spd))
       battle_loop(player, enemylist)
       if player.currenthp<=0:
         break
     elif type(dialogue)==type("") and dialogue!="end":
       print(dialogue)
       time.sleep(1)
     index+=1
   if player.currenthp>0:
     self.cleared=True
Ejemplo n.º 5
0
def generate_level(level):
    new_player, x, y = None, None, None
    for y in range(len(level)):
        for x in range(len(level[y])):
            if level[y][x] == '.':
                pass
            elif level[y][x] == '#':
                Tile('wall', x, y)
            elif level[y][x] == '@':
                new_player = Player(PLATFORM_WIDTH * (x - 1),
                                    PLATFORM_HEIGHT * y)
                ll = list(level[y])
                ll[x] = '.'
                level[y] = ll
            elif level[y][x] == 'e':
                new_enemy = Enemy(PLATFORM_WIDTH * (x - 1),
                                  PLATFORM_HEIGHT * y)
                enemy_group.add(new_enemy)
    # вернем игрока, а также размер поля в клетках
    return new_player, x, y
Ejemplo n.º 6
0
	def loadLevel(self, filename, enemies):
		file = open(filename, "r")
		for line in file:
			if len(line) < 2:
				# Empty
				pass
			elif line[0] == "!":
				# Comment line
				pass
			elif line[0].isdigit():
				# Enemy definition line
				code = line[0]
				leftExtent = int(line[1])
				rightExtent = int(line[2])
				speed = int(line[3])
				enemySpriteType = line[4]
				enemies[code] = Enemy(code, leftExtent, rightExtent, speed, enemySpriteType)
			else:
				self.levelTiles.append(line)
				if len(line) > self.level_width:
					self.level_width = len(line)

		self.level_height = len(self.levelTiles)
		self.level_x_offset = self.start_level_x_offset
Ejemplo n.º 7
0
 def setUp(self):
     self.enemy = Enemy()
     self.enemy1 = Enemy(0, 0, 0)
     self.enemy2 = Enemy(0, 200, 0)
Ejemplo n.º 8
0
class testEnemies(unittest.TestCase):
    def setUp(self):
        self.enemy = Enemy()
        self.enemy1 = Enemy(0, 0, 0)
        self.enemy2 = Enemy(0, 200, 0)

    def test_is_alive(self):
        self.assertTrue(self.enemy.is_alive())
        self.assertFalse(self.enemy1.is_alive())

    def test_can_cast(self):
        self.assertTrue(self.enemy.can_cast())
        self.assertFalse(self.enemy1.can_cast())

    def test_get_health(self):
        self.assertEqual(self.enemy.get_health(), 100)
        self.assertEqual(self.enemy1.get_health(), 0)

    def test_get_mana(self):
        self.assertEqual(self.enemy.get_mana(), 100)
        self.assertEqual(self.enemy1.get_mana(), 0)

    def test_take_healing(self):
        self.assertTrue(self.enemy.take_healing(10))
        self.assertFalse(self.enemy1.take_healing(10))

    def test_take_mana(self):
        self.assertEqual(self.enemy.take_mana(100), 100)
        self.assertEqual(self.enemy2.take_mana(1), 200)
Ejemplo n.º 9
0
class Game:

    level = 0
    hero_select = 0
    diceroll = DiceRoll()

    print('Welcome Adventurer to the Land of Blank \n'
          'To begin your adventure you must first select your starting level and class! \n'
          'The higher level you choose the more difficult the game will be \n')
    while level == ((level < 1) and (level > 16)):
        level = input('Select the Level(Between 1 and 15) to begin your adventure: ')
        if (level < '1') and (level > '16'):
            print('\nIncorrect input, please try again\n')
        else:
            level = int(level)              # Type cast to int to pass to Heroes()
            break
    champion = Heroes(level)
    print('There are 3 classes available \n'
          'Choose wisely \n'
          '1. Wizard \n'
          '2. Warrior \n'
          '3. Archer \n')
    while hero_select != (1 | 2 | 3):
        hero_select = input('Select a Hero Class by entering a number: ')
        if hero_select is '1':
            champion.wizard()
            break
        elif hero_select is '2':
            champion.warrior()
            break
        elif hero_select is '3':
            champion.archer()
            break
        else:
            print('\nIncorrect input, please try again\n')

# -----------------------------------------------------------------------------------------------------------

    print("\nThe Following is a list of your Hero's stats")
    print(str(Heroes.life) + ' Hit Points')
    print(str(Heroes.ranged_damage) + ' Damage versus Ranged')
    print(str(Heroes.spell_damage) + ' Damage with spells')
    print(str(Heroes.melee_damage) + ' Damage with a melee weapon')
    print(str(Heroes.armor) + ' Armor')
    print('---------------------------------')
    print("\nLet the Adventure Begin\n")

# -----------------------------------------------------------------------------------------------------------

    # Insert Condition statement whether our Adventurer runs into an enemy

# -----------------------------------------------------------------------------------------------------------

    # Create Random Enemy Minion Based on Location and Level
    map_Location = 'Black Forest'
    randEnemy1 = RandomEnemy()
    randEnemy1_Name = randEnemy1.generator(level, 'Minion')
    print("As you walk through the %s you encounter a %s" % (map_Location, randEnemy1_Name))
    randEnemy1_attack_damage = randEnemy1.assign_attack_damage(randEnemy1_Name, 'Minion')
    randEnemy1_health = randEnemy1.assign_health(randEnemy1_Name, 'Minion')

# -----------------------------------------------------------------------------------------------------------

    Minion1 = Enemy(randEnemy1_Name, randEnemy1_attack_damage, randEnemy1_health)
    Minion1.enemy_stats()
    print("\nWhat would you like to do\n"
          "Attack With Melee weapon\n"
          "Attack With Ranged weapon\n"
          "Attack with Spell\n")
    Minion1.enemy_damaged_health(Heroes.melee_damage)
    print("\nGnoll swings at you and hits you for " + str(Minion1.attack_damage))
    Heroes.life -= Minion1.attack_damage
    print("You have " + str(Heroes.life) + " Hit points left")
Ejemplo n.º 10
0
def main():
    startscreen()
    pause_cover = get_pause_screen()

    # Loops while user plays; can span over multiple games
    while True:
        prestige = 0

        turret = Turret(screen, s)
        enemies = []
        boss = Boss(screen, s)
        frame = 1  # Causes an issue with boss spawn: 0 % anything = 0
        banner = Banner(screen, s, small, med, turret, Enemy, boss)
        prestige_banner = Prestige_Banner(screen, small, turret, banner, s,
                                          prestige)

        paused = False

        # Main Game Loop
        while True:
            clock.tick(
                fps if not prestige_banner.buttons[7].slowmo else int(fps / 2))

            # Main event handler
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()

                elif event.type == pygame.MOUSEBUTTONDOWN:
                    # Changes mouse pos relative to banner pos
                    prestige_banner.onClick([
                        i - s[1] if p % 2 else i
                        for p, i in enumerate(pygame.mouse.get_pos())
                    ], turret, enemies, boss)
                    banner.click([
                        i - s[0] if not p % 2 else i
                        for p, i in enumerate(pygame.mouse.get_pos())
                    ], enemies)

                    # If not clicking on banner and left clicked
                    if event.button == 1 and not paused:
                        turret.shoot(pygame.mouse.get_pos(), enemies,
                                     prestige_banner.buttons[2].targeted,
                                     prestige_banner.buttons[5].shotgun,
                                     prestige_banner.buttons[8].auto)

                elif event.type == pygame.KEYDOWN:
                    # Refills rounds (conditions are verified in function)
                    if event.key == pygame.K_r:
                        turret.reload()

                    # Toggles pause screen
                    elif event.key == pygame.K_ESCAPE:
                        paused = not paused

            # Updates
            pygame.display.set_caption(
                f"Turret Defence v8 by NIP    ||||    Difficulty: {message}    ||||    Prestige: {prestige_banner.prestige}"
            )
            enemies, boss = turret.collide(
                enemies, boss, prestige_banner.buttons[4].gold_rush,
                prestige_banner.buttons[1].instakill)
            prestige_banner.update()

            # Deletes bullets which are off-screen, and enemies with negative health
            turret.clean()
            enemies = [i for i in enemies if i.health > 0]

            # Drawing
            background()
            turret.draw()
            banner.update(clock.get_fps())
            boss.draw()
            banner.draw()
            prestige_banner.draw()

            for e in enemies:
                e.draw()

                if not paused:
                    e.animate()

            if not paused:
                # Animation and spawning
                turret.animate()

                # Enemies only spawn when boss is dead
                if not boss.alive:
                    enemies = Enemy(screen, s,
                                    banner).spawn(enemies, frame, fps, boss,
                                                  prestige_banner.prestige)

                boss.respawn(frame)
                turret.regen(frame, fps)
                boss.animate()

                frame += 1
            else:
                screen.blit(pause_cover, (0, 0))

            pygame.display.flip()

            # If game has ended
            if turret.check_end() or prestige_banner.prestige >= 10:
                break

        endscreen(turret, enemies, boss, banner, prestige_banner)
Ejemplo n.º 11
0
def battle_loop(player, enemylist):
    '''
  The battle system for the game.

  Includes all the possible abilities the player could use.
  Parameters
  ----------
  player: Player()
    The player of the game.

  enemylist: list
    The list of all enemies to defeat.
    
  Returns
  -------
  None
  '''
    print("Enemies appear!")
    time.sleep(1)
    for enemy in enemylist:
        print(enemy.name)
    time.sleep(1)
    #make a copy to be used to calculated exp and gold at the end if victorious
    copy = enemylist.copy()
    combatants = enemylist
    #While player is not defeated and not all enemies are down, keep the battle going.
    Turn = 1
    while player.currenthp > 0 and len(combatants) > 0:
        #sift the player into the list to be sorted
        combatants.append(player)
        #Sort the combatants by speed, from slowest to quickest
        combatants.sort()
        #Reverse it so that it's in order from quickest to slowest
        combatants = combatants[::-1]
        #set a copy of the list
        battle_order = combatants.copy()
        #reset the combatants to include only the enemies
        print(battle_order)
        combatants = enemylist
        combatants.remove(player)
        print("Turn " + str(Turn))
        Turn += 1
        #resets player's turn confirmation
        player.moved = False
        for combatant in battle_order:
            print(combatant.name)
            if type(combatant) == type(
                    Enemy("Test Dummy")) and combatant in combatants:
                combatant.attack(player)
                if player.currenthp <= 0:
                    break
            elif player.moved == False:
                battle_menu(player, combatants, battle_order)
                player.moved = True
    if player.chosenOne is True:
        player.currentatk = player.patk + player.weapon.pdmg + player.secondWeapon.pdmg
        player.currentdef = player.pdef + player.armor.pdef
        player.currentmatk = player.matk + player.weapon.mdmg + player.secondWeapon.mdmg
        player.currentmdef = player.mdef + player.armor.pdef
        player.currentspd = player.spd + player.armor.spd + player.weapon.spd
    else:
        player.currentatk = player.patk + player.weapon.pdmg + player.armor.pdmg
        player.currentdef = player.pdef + player.weapon.pdef + player.armor.pdef
        player.currentmatk = player.matk + player.weapon.mdmg + player.armor.mdmg
        player.currentmdef = player.mdef + player.weapon.pdef + player.armor.pdef
        player.currentspd = player.spd + player.armor.spd + player.weapon.spd + player.armor.spd
    if player.currenthp <= 0:
        print("You were defeated...")
        player.location = player.recentTown
        player.gold = int(player.gold / 2)
        player.currenthp = player.maxhp
        player.currentmp = player.maxmp
    else:
        print("You were victorious!")
        total = 0
        for enemy in copy:
            total += enemy.spd
        average = int(total / len(copy))
        print("Acquired " + str(average) + " gold.")
        player.gold += average