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
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
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)
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
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
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
def setUp(self): self.enemy = Enemy() self.enemy1 = Enemy(0, 0, 0) self.enemy2 = Enemy(0, 200, 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)
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")
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)
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