def test_init(self): axe = weapon.Weapon("Axe", 23, 0.2) self.assertEqual(axe.type, "Axe") self.assertEqual(axe.damage, 23) self.assertEqual(axe.critical_strike_percent, 0.2)
def get_weapon(self, json_rec: dict) -> list: dict_weapons = [] for weapon_system in json_rec["weapons"]: weapon_weapon = weapon.Weapon(weapon_system) dict_weapons.append(weapon_weapon) return dict_weapons
def test_incorrect_input(self): with self.assertRaises(ValueError): weapon.Weapon("Axe", 32, 22)
def test__init__(self): good_weapon = 'spitfire' w = weapon.Weapon(good_weapon) self.assertEqual(w.name, good_weapon) #let's test different types of valid weapons, the flag should stay False flag = False try: w1 = weapon.Weapon('spitfire') w2 = weapon.Weapon('spitfire2') w3 = weapon.Weapon('spitfire3') w4 = weapon.Weapon('blue_lazer') w5 = weapon.Weapon('master_lazer') w6 = weapon.Weapon('missle') w7 = weapon.Weapon('bomb') w8 = weapon.Weapon('waveBeam') w9 = weapon.Weapon('waveBeam2') w10 = weapon.Weapon('waveBeam3') w11 = weapon.Weapon('chargeShot') w12 = weapon.Weapon('chargeShot2') w13 = weapon.Weapon('chargeShot3') except RuntimeError as rte: flag = True finally: self.assertFalse(flag) #let's try to construct invalid weapons flag = False try: bad_w1 = weapon.Weapon('peashooter') bad_w2 = weapon.Weapon(4) bad_w3 = weapon.Weapon(None) bad_w4 = weapon.Weapon('spitfire', 'chargeShot') except RuntimeError as rte: flag = True finally: self.assertTrue(flag)
def setUp(self): self.axe = weapon.Weapon("Mighty Axe", 25, 0.2)
from time import gmtime, strftime, sleep, time from ctypes import windll, c_uint, Structure, c_long, byref from pywin32 import GetKeyState, GetAsyncKeyState import mouse import keyboard import weapon #Weapon_Tables Init nowep = weapon.Weapon("None") Pickaxe = weapon.Weapon("Pickaxe") AR = weapon.Weapon("AR") SCAR = weapon.Weapon("SCAR") BURST = weapon.Weapon("BURST") PUMP = weapon.Weapon("PUMP") TAC = weapon.Weapon("TAC") HEAVY = weapon.Weapon("HEAVY") SMG = weapon.Weapon("SMG") S_SMG = weapon.Weapon("S_SMG") TOMMYGUN = weapon.Weapon("TOMMYGUN") P90 = weapon.Weapon("P90") HR = weapon.Weapon("HR") BOLT = weapon.Weapon("BOLT") SAR = weapon.Weapon("SAR") ROCKET = weapon.Weapon("ROCKET") NADES = weapon.Weapon("NADES") HEAL = weapon.Weapon("HEAL") #Settings; #Debug: Debug = True #Debug Mode, used for Output of Debug Info.
def setUp(self): self.axe_weapon = weapon.Weapon("axe", 10, 1)
def setUp(self): self.magic_gun = weapon.Weapon("Gattling Gun", 15, 0.3)
def test_simulate_fight_when_one_is_without_weapons(self): axe = weapon.Weapon("The axe", 20, 0.6) self.arena.fight_hero.weapon = axe self.arena.simulate_fight() self.assertTrue(not self.arena.fight_orc.is_alive())
def setUp(self): self.some_person = entity.Entity("Person", 100) self.axe = weapon.Weapon("Axe", 25, 0.2)
def test_critical_strike_percent_not_in_range(self): with self.assertRaises(ValueError): weapon.Weapon("Mighty Axe", 25, 5)
from rounerPrinter import * import enemy import weapon import protagonist as protag from random import randint #1 = Gun; 2 = shield, 3 = laser coordinates = [0,0] shield = weapon.Weapon("Shield", 10, 1) laserGun = weapon.Weapon("Laser gun", 10, 2) gun = weapon.Weapon("Gun", 10, 3) mainPlayer = protag.Player(20, [0], weapon.Weapon("Default Weapon", 0, 0), 0) mainEnemy = enemy.Enemy("Robot", 15, [0], weapon.Weapon("Default Weapon", 0, 0), [0]) mainPlayer.inventory.append(gun) mainPlayer.inventory.append(laserGun) mainPlayer.inventory.append(shield) mainEnemy.inventory.append(gun) mainEnemy.inventory.append(laserGun) mainEnemy.inventory.append(shield) def walk(xCoord, yCoord): coordinates[1] = xCoord coordinates[2] = yCoord def chooseWeapons(): slowPrint("Would you like to: \n a) Shoot a laser \n b) Raise your shield \n c) Shoot a gun", 0.06)
def __init__(self, stats): self.stats = stats self.weapon = weapon.Weapon(stats['WEAPON']) self.armor = armor.Armor(stats['ARMOR']) self.skill = skill.Skill(stats['SKILL']) self.isbot = False
def setUp(self): self.hero_test = hero.Hero("Teddy", 500, "Bear") self.orc_test = orc.Orc("Grom", 100, 2) self.weapon_test = weapon.Weapon("Gorehowl", 25, 0.5) self.fight = fight.Fight(self.hero_test, self.orc_test)
def test_orc_attack(self): self.jamal_orc.equip_weapon(weapon.Weapon("mace", 20, 1)) self.assertEqual(self.jamal_orc.attack(), 80)
def main(self, lives_remaining, curr_score, currPlayerShip, currTime=0): '''Invokes main game state. Takes lives_remaining (lives remaining), curr_score (current score), currPlayerShip (a reference to the current player entity), and currTime (in seconds).''' ##Level Loader setup starting_events = self.loader.getEvents(0) ending_events = self.loader.getEndBehavior() player_score = curr_score player_lives = lives_remaining bg_filename = starting_events.get('background') if currPlayerShip: playerShip = currPlayerShip playerShip.rect.center = (SCREEN_WIDTH // 2, SCREEN_HEIGHT - 100) else: playerShip = starting_events.get('player') if playerShip: playerShip = playerShip[0] ##Check for end of level conditions if ending_events: endtime = ending_events.get('time') spawn_boss = ending_events.get('boss') boss_spawned = False else: endtime = -1 spawn_boss = False ##Background setup background = pygame.Surface(self.screen.get_size()) background = background.convert() bg, bg_rect = ASSET_MANAGER.getAsset( BACKGROUND_PATH.joinpath(bg_filename)) bg_size = bg.get_size() bg_w, bg_h = bg_size bg_x = 0 bg_y = 0 bg_x1 = 0 bg_y1 = -bg_h background.fill(BLACK) background.blit(bg, ORIGIN) column = pygame.Surface((COLUMN_WIDTH, SCREEN_HEIGHT)) column.fill(BLACK) inst_block = draw_instructions() #Initialize sprite groups player_sprites_invul = pygame.sprite.Group() player_sprites = pygame.sprite.GroupSingle(playerShip) player_bullet_sprites = pygame.sprite.Group() player_bomb_sprites = pygame.sprite.Group( ) #not sure if bombs should be on the lowest layer bomb_explosion_sprites = pygame.sprite.Group( ) # the bomb explosion should damage enemies on collision, so it is on the same layer as enemies enemy_sprites = pygame.sprite.Group() boss_sprites = pygame.sprite.GroupSingle() enemy_bullet_sprites = pygame.sprite.Group() items = pygame.sprite.Group() explosions = pygame.sprite.Group() chargeShot_Anim = pygame.sprite.GroupSingle() going = True self.clock.tick( ) ##need to dump this particular return value of tick() to give accurate time. time_since_start = currTime * 1000 #convert to milliseconds next_level = True invul_timer = 120 ##frames of invulnerability post-death regen_timer = 6 bomb_timer = 120 time_to_end = 9999 ## No levels this long, so effectively infinity. ##Clock time setup while going: ##check if there is a boss spawned (to figure out when to end the level post boss death) if boss_spawned and time_to_end == 9999: if len(boss_sprites) == 0: time_to_end = time_since_start // 1000 + 5 if time_since_start // 1000 == time_to_end: going = False ##Beginning of the loop checking for death and lives remaining. if len(player_sprites) == 0 and not playerShip.invul_flag: player_lives -= 1 if player_lives: self.death_loop() playerShip = Entity.Player( 'spitfire', MISC_SPRITES_PATH.joinpath('SweetShip.png'), "arrows") playerShip.invul_flag = True player_sprites_invul.add(playerShip) else: self.game_over(player_score) if self.hs_list.belongsOnList(player_score): name = self.add_to_hs( 'You\'ve set a high score! Enter your initials!') self.hs_list.add(name, player_score) #break (potentially cleaner than setting going to False) going = False next_level = False ##check if the invuln timer is complete if invul_timer == 0 and len(player_sprites_invul) != 0: playerShip.invul_flag = False player_sprites_invul.remove(playerShip) player_sprites.add(playerShip) invul_timer = 120 ##Look out for QUIT events (hitting the x in the corner of the window) or escape to quit. for event in pygame.event.get(): if event.type == QUIT: going = False next_level = False pygame.mouse.set_visible(True) ##We need the mouse here. elif event.type == KEYDOWN: if event.key == K_ESCAPE: # going = False # next_level = False pygame.mouse.set_visible( True) ##We need the mouse here. going, next_level = self.ask_to_save( playerShip.health, playerShip.shield, playerShip.weapon.name, playerShip.bombs_remaining, player_score, player_lives, time_since_start // 1000) if event.key == K_F12: self.__fs_toggle = not self.__fs_toggle if self.__fs_toggle: pygame.display.set_mode( WINDOW_OPTIONS_FULLSCREEN[0], WINDOW_OPTIONS_FULLSCREEN[1]) else: pygame.display.set_mode(WINDOW_OPTIONS_WINDOWED[0], WINDOW_OPTIONS_WINDOWED[1]) if event.key == K_PAUSE: self.pause_screen() if DEBUG: if event.key == K_F2 and len(player_sprites) == 0: playerShip = Entity.Player( 'spitfire', MISC_SPRITES_PATH.joinpath('SweetShip.png'), "arrows") player_sprites.add(playerShip) if event.key == K_F11: enemy_sprites.empty() enemy_bullet_sprites.empty() sec_running = time_since_start // 1000 #need seconds since start events = self.loader.getEvents(sec_running) enemies_to_add = [] boss_to_add = [] enemy_bullets_to_add = [] items_to_add = [] if events: enemies_to_add = events.get('enemy', []) boss_to_add = events.get('boss_sprite', []) enemy_bullets_to_add = events.get('bullets', []) items_to_add = events.get('items', []) if sec_running >= endtime and not spawn_boss: if len(enemy_sprites) == 0 and len(enemy_bullet_sprites) == 0: going = False if enemies_to_add: enemy_sprites.add(enemies_to_add) if boss_to_add: boss_spawned = True boss_sprites.add(boss_to_add) if enemy_bullets_to_add: enemy_bullet_sprites.add(enemy_bullets_to_add) if items_to_add: items.add(items_to_add) #chargeShot specific weapon firing if playerShip.weapon.name in playerShip.weapon.chargeShot_dic: if playerShip.weapon.chargeShot_charging_flag == True: keys = pygame.key.get_pressed() if not keys[pygame.K_SPACE]: playerShip.weapon.chargeShot_charging_flag = False playerShip.weapon.chargeShot_firing_flag = True if playerShip.weapon.name in playerShip.weapon.chargeShot_dic: if playerShip.weapon.chargeShot_firing_flag == True: if playerShip.weapon.chargeShot_counter >= 0: bullet = playerShip.fire() bullet.damage = playerShip.weapon.weapon_damage #print(bullet.damage) player_bullet_sprites.add(bullet) playerShip.weapon.chargeShot_counter -= 1 else: playerShip.weapon.chargeShot_firing_flag = False keys = pygame.key.get_pressed() addBullet = playerShip.control(keys, FRAMERATE) if addBullet: #special behavior for chargeShot if playerShip.weapon.name in playerShip.weapon.chargeShot_dic: #this is the chargeShot "charging" code if playerShip.weapon.chargeShot_firing_flag is False: playerShip.weapon.chargeShot_charging_flag = True if playerShip.weapon.chargeShot_counter <= playerShip.weapon.chargeShot_counter_max: playerShip.weapon.chargeShot_counter += playerShip.weapon.chargeShot_counter_rate #print(playerShip.weapon.name, playerShip.weapon.chargeShot_counter) if playerShip.weapon.chargeShot_anim_visible is False: playerShip.weapon.chargeShot_anim_visible = True new_charging = weapon.ChargingAnim( playerShip.rect.centerx, playerShip.rect.centery, playerShip) chargeShot_Anim.add(new_charging) #normal bullet behavior else: self.fire_spitfire.play() bullet = playerShip.fire() player_bullet_sprites.add(bullet) if playerShip.drop_bomb_flag is True: bomb = playerShip.drop_bomb() bomb.play_sound() playerShip.drop_bomb_flag = False player_bomb_sprites.add(bomb) playerShip.curr_bomb = bomb if playerShip.curr_bomb is not None and playerShip.curr_bomb.bomb_explode is True: new_explosion = bomb_explosion.BombExplosion( playerShip.curr_bomb.centerx, playerShip.curr_bomb.centery) new_explosion.play_sound() bomb_explosion_sprites.add(new_explosion) playerShip.curr_bomb.bomb_explode = False playerShip.curr_bomb = None ##Helper to call update() on each sprite in the group. # player_sprites.update() player_damage = playerShip.update() if player_damage: explosions.add(player_damage) player_bullet_sprites.update() player_bomb_sprites.update() for sprite in enemy_sprites: bullet = sprite.update() if bullet: enemy_bullet_sprites.add(bullet) for sprite in boss_sprites: damage, bullets = sprite.update(playerShip.rect.center) if damage: explosions.add(damage) if bullets: enemy_bullet_sprites.add(bullets) enemy_bullet_sprites.update() items.update() explosions.update() bomb_explosion_sprites.update() chargeShot_Anim.update() ##Collision/Out of Bounds detection. if player_sprites.sprite != None: collision = pygame.sprite.spritecollideany( player_sprites.sprite, enemy_bullet_sprites) if collision: self.explode.play() playerShip.take_damage(5) collision.kill() else: collision = pygame.sprite.spritecollideany( player_sprites.sprite, enemy_sprites) if collision: self.explode.play() playerShip.take_damage(1) else: collision = pygame.sprite.spritecollideany( player_sprites.sprite, boss_sprites) if collision: self.explode.play() playerShip.take_damage(1) if playerShip.health <= 0: chargeShot_Anim.empty() playerShip.kill() for sprite in items: collision = pygame.sprite.spritecollideany( sprite, player_sprites) if collision: sprite.visible = 0 player_score += sprite.value if sprite.checkWeapon(): upgrade = weapon.upgrade(sprite.weapon_name, playerShip.weapon.name) playerShip.weapon = weapon.Weapon(upgrade) if sprite.checkBomb(): playerShip.bombs_remaining += 1 if sprite.checkHealthPack(): if playerShip.health < playerShip.max_health: new_health = playerShip.health + playerShip.healthpack if new_health >= playerShip.max_health: playerShip.health = playerShip.max_health else: playerShip.health += playerShip.healthpack sprite.kill() else: collision = pygame.sprite.spritecollideany( sprite, player_sprites_invul) if collision: sprite.visible = 0 if sprite.checkWeapon(): upgrade = weapon.upgrade(sprite.weapon_name, playerShip.weapon.name) playerShip.weapon = weapon.Weapon(upgrade) sprite.kill() for sprite in enemy_sprites: collision = pygame.sprite.spritecollideany( sprite, player_bullet_sprites) if collision: sprite.take_damage( playerShip.weapon.getDamage(playerShip.weapon.name)) collision.visible = 0 collision.kill() else: collision = pygame.sprite.spritecollideany( sprite, bomb_explosion_sprites) if collision: sprite.take_damage(playerShip.weapon.getDamage('bomb')) if sprite.health <= 0: new_explosion = explosion.ExplosionSprite( sprite.rect.centerx, sprite.rect.centery) new_explosion.play_sound() explosions.add(new_explosion) player_score += sprite.value item_drop = sprite.getDrop() if item_drop is not None: items.add(item_drop) if sprite.visible == 0: sprite.kill() if boss_sprites.sprite != None: collision_dict = pygame.sprite.groupcollide( player_bullet_sprites, boss_sprites, True, False) for key in collision_dict: boss_sprites.sprite.take_damage(key.damage) collision = pygame.sprite.spritecollideany( boss_sprites.sprite, bomb_explosion_sprites) if collision: boss_sprites.sprite.take_damage(2) if boss_sprites.sprite.health <= 0: new_explosion = explosion.ExplosionSprite( sprite.rect.centerx, sprite.rect.centery) new_explosion.play_sound() explosions.add(new_explosion) player_score += boss_sprites.sprite.point_value boss_sprites.sprite.kill() #sprite cleanup for sprite in player_bullet_sprites: if sprite.visible == 0: sprite.kill() for sprite in enemy_bullet_sprites: if sprite.visible == 0: sprite.kill() for sprite in explosions: if sprite.visible == 0: sprite.kill() for sprite in player_bomb_sprites: if sprite.visible == 0: sprite.kill() for sprite in bomb_explosion_sprites: if sprite.visible == 0: sprite.kill() for sprite in items: if sprite.visible == 0: sprite.kill() for sprite in chargeShot_Anim: if sprite.visible == 0: sprite.kill() bg_y1 += 1 bg_y += 1 self.screen.blit(bg, (bg_x, bg_y)) self.screen.blit(bg, (bg_x1, bg_y1)) if bg_y > bg_h: bg_y = -bg_h if bg_y1 > bg_h: bg_y1 = -bg_h if boss_spawned and boss_sprites.sprite != None: boss_bar, boss_bar_rect = draw_boss_bar( COLUMN_WIDTH, 50, boss_sprites.sprite.health / boss_sprites.sprite.max_health, boss_sprites.sprite.shield / boss_sprites.sprite.max_shield, (COLUMN_WIDTH * 2, SCREEN_HEIGHT - 100)) if boss_spawned: self.screen.blit(boss_bar, boss_bar_rect) explosions.draw(self.screen) bomb_explosion_sprites.draw(self.screen) chargeShot_Anim.draw(self.screen) player_bullet_sprites.draw(self.screen) player_bomb_sprites.draw(self.screen) enemy_bullet_sprites.draw(self.screen) items.draw(self.screen) if playerShip.invul_flag and invul_timer // 6 % 2 == 0: ##allows visual feedback that the player is invulnerable player_sprites_invul.draw(self.screen) player_sprites.draw(self.screen) enemy_sprites.draw(self.screen) boss_sprites.draw(self.screen) c1 = self.screen.blit(column, ORIGIN) c2 = self.screen.blit(column, (SCREEN_WIDTH - COLUMN_WIDTH, 0)) text = draw_text("Score: " + str(player_score), WHITE) self.screen.blit(text, ORIGIN) self.screen.blit(inst_block, (0, text.get_rect().bottom)) if DEBUG: debug_text = draw_text( 'FPS: ' + str(round(self.clock.get_fps(), 2)), WHITE) debug_rect = self.screen.blit(debug_text, (0, SCREEN_HEIGHT - 100)) self.screen.blit(debug_text, debug_rect) mission_timer_text = draw_text( 'Mission Time: ' + str(sec_running), WHITE) mission_timer_rect = self.screen.blit(mission_timer_text, (0, SCREEN_HEIGHT - 150)) self.screen.blit(mission_timer_text, mission_timer_rect) armor_bar, armor_bar_rect = draw_vertical_bar( RED, 50, SCREEN_HEIGHT - 400, (playerShip.health / playerShip.max_health), (COLUMN_WIDTH * 4 + 10, 200)) shield_bar, shield_bar_rect = draw_vertical_bar( BLUE, 50, SCREEN_HEIGHT - 400, (playerShip.shield / playerShip.max_shield), (COLUMN_WIDTH * 4 + 70, 200)) lives_left, lives_left_rect = draw_player_lives( player_lives, (COLUMN_WIDTH * 4 + 10, 10)) bombs_left, bombs_left_rect = draw_bombs_remaining( playerShip.bombs_remaining, (COLUMN_WIDTH * 4 + 40, 100)) self.screen.blit(lives_left, lives_left_rect) self.screen.blit(bombs_left, bombs_left_rect) self.screen.blit(armor_bar, armor_bar_rect) self.screen.blit(shield_bar, shield_bar_rect) pygame.display.flip() time_since_start += self.clock.tick_busy_loop(FRAMERATE) if playerShip.invul_flag: invul_timer -= 1 regen_timer -= 1 if regen_timer == 0: playerShip.regen() regen_timer = 6 if playerShip.bomb_wait == True: bomb_timer -= 1 if bomb_timer == 0: playerShip.bomb_wait = False bomb_timer = 120 if next_level: self.level_complete() return player_lives, player_score, next_level, playerShip