示例#1
0
 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)
示例#2
0
 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
示例#3
0
 def test_incorrect_input(self):
     with self.assertRaises(ValueError):
         weapon.Weapon("Axe", 32, 22)
示例#4
0
    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)
示例#6
0
文件: bit2.py 项目: grobocop12/SKARB
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.
示例#7
0
 def setUp(self):
     self.axe_weapon = weapon.Weapon("axe", 10, 1)
示例#8
0
 def setUp(self):
     self.magic_gun = weapon.Weapon("Gattling Gun", 15, 0.3)
示例#9
0
 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())
示例#10
0
 def setUp(self):
     self.some_person = entity.Entity("Person", 100)
     self.axe = weapon.Weapon("Axe", 25, 0.2)
示例#11
0
 def test_critical_strike_percent_not_in_range(self):
     with self.assertRaises(ValueError):
         weapon.Weapon("Mighty Axe", 25, 5)
示例#12
0
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)
示例#13
0
 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
示例#14
0
 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)
示例#15
0
 def test_orc_attack(self):
     self.jamal_orc.equip_weapon(weapon.Weapon("mace", 20, 1))
     self.assertEqual(self.jamal_orc.attack(), 80)
示例#16
0
文件: GUI.py 项目: Cnorine1/GameShazy
    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