예제 #1
0
    def test_loseGameReturnsTrueWhenThereIsAnOpponentInGame(self):
        file = open('gunid', 'r+')
        file.truncate()
        file.write(
            "# User Identification File.\n# Change gunid and username.\n# Rename file to gunid.\ngunid=3\nusername=Benjamin\n"
        )
        file.close()
        gun = Gun()
        gun.readIDFile()

        file = open('gunid', 'r+')
        file.truncate()
        file.write(
            "# User Identification File.\n# Change gunid and username.\n# Rename file to gunid.\ngunid=4\nusername=Thomas\n"
        )
        file.close()
        gun2 = Gun()
        gun2.readIDFile()

        mydb = connect.connect()
        cursor = mydb.cursor()
        sql = "INSERT INTO Games (current_state, winner, game_date) VALUES (2, 0, (NOW() - INTERVAL 4 HOUR + INTERVAL 11 MINUTE - INTERVAL 22 SECOND))"
        cursor.execute(sql)
        mydb.commit()

        gun.joinGame()
        gun2.joinGame()

        self.assertTrue(gun2.loseGame())

        mydb.close()
예제 #2
0
    def test_attack_by_gun(self):
        # setup
        knight = self.create_knight(Gun())  # parameterized creation method

        # exercise
        pain = knight.attack_power()

        # verify
        self.assertEqual(pain, Gun().attack_power())
예제 #3
0
def fve_gun(exp, nom, plt):
    from fit import Opt
    from gun import magic
    from gun import Gun
    
    fig = plt.figure('fve_gun',figsize=fig_y_size(9))    
    p2f = magic.newton2dyne*magic.area/1e11
    opt = Opt(
        nom.eos,
        {'gun':nom.gun,'stick':nom.stick},
        {'gun':exp.vt,'stick':exp.stick_data})
    cs,costs = opt.fit(max_iter=5)
    print('costs={0}'.format(costs))
    opt_gun = Gun(opt.eos)
    nom.gun.eos = nom.eos # Restore nominal eos after optimization
    t2vs = [Gun(eos).fit_t2v() for eos in [opt.eos.new_c(c) for c in cs]]
    e = [exp.v - t2v(exp.t) for t2v in t2vs[1:]]

    data = {'nominal':(
        (exp.x, nom.eos(exp.x)*p2f, 'f'),
        (exp.x, nom.gun.x_dot(exp.x)/magic.cm2km, 'v'))}
    data['experimental']=(
        (exp.x, exp.eos(exp.x)*p2f, 'f'),
        (exp.x, exp.gun.x_dot(exp.x)/magic.cm2km, 'v'))
    data['fit']=(
        (exp.x, opt.eos(exp.x)*p2f, 'f'),
        (exp.x, opt_gun.x_dot(exp.x)/magic.cm2km, 'v'))
    
    cm = r'$x/(\rm{cm})$'
    mu_sec = r'$t/(\mu\rm{sec})$'
    f_key = r'$f/({\rm dyn}\cdot 10^{11})$'
    v_key = r'$v/(\rm{km/s})$'
    e_key = r'$\epsilon_k/(\rm{m/s})$'
    ax_d = {
        'f':{'ax':fig.add_subplot(3,1,1), 'l_x':cm,
             'l_y':f_key, 'loc':'upper right'},
        'v':{'ax':fig.add_subplot(3,1,2), 'l_x':cm,
            'l_y':v_key, 'loc':'lower right'},
        'e':{'ax':fig.add_subplot(3,1,3), 'l_x':mu_sec,
             'l_y':e_key, 'loc':'upper right'}
    }
    for mod,xyn in data.items():
        for x,y,name in xyn:
            if mod == 'experimental':
                ax_d[name]['ax'].plot(x,y,'r-.',label=r'$\rm %s$'%mod)
            else:
                ax_d[name]['ax'].plot(x,y,label=r'$\rm %s$'%mod)
    for i in range(len(e)):
        ax_d['e']['ax'].plot(exp.t*1e6,e[i]/100,label=r'$\epsilon_%d$'%(i+1))
    for name,d in ax_d.items():
        d['ax'].legend(loc=ax_d[name]['loc'])
        d['ax'].set_xlabel(d['l_x'])
        d['ax'].set_ylabel(r'$%s$'%name)
        if 'l_y' in d:
            d['ax'].set_ylabel(d['l_y'])
    
    return fig
예제 #4
0
    def __init__(self, name="Queen of the Skies"):
        self.name = name
        self.missions_completed = 0
        self.status = BOMBER_SAFE

        self.crew = {
            BOMBARDIER: Crew(BOMBARDIER),
            NAVIGATOR: Crew(NAVIGATOR),
            PILOT: Crew(PILOT),
            COPILOT: Crew(COPILOT),
            ENGINEER: Crew(ENGINEER),
            RADIO_OPERATOR: Crew(RADIO_OPERATOR),
            BALL_GUNNER: Crew(BALL_GUNNER),
            PORT_WAIST_GUNNER: Crew(PORT_WAIST_GUNNER),
            STBD_WAIST_GUNNER: Crew(STBD_WAIST_GUNNER),
            TAIL_GUNNER: Crew(TAIL_GUNNER)
        }

        self.guns = {
            NOSE: Gun(NOSE, self.crew[BOMBARDIER], 15),
            PORT_CHEEK: Gun(PORT_CHEEK, self.crew[NAVIGATOR], 10),
            STBD_CHEEK: Gun(STBD_CHEEK, self.crew[NAVIGATOR], 10),
            TOP_TURRET: Gun(TOP_TURRET, self.crew[ENGINEER], 16),
            RADIO: Gun(RADIO, self.crew[RADIO_OPERATOR], 10),
            BALL_TURRET: Gun(BALL_TURRET, self.crew[BALL_GUNNER], 20),
            PORT_WAIST: Gun(PORT_WAIST, self.crew[PORT_WAIST_GUNNER], 20),
            STBD_WAIST: Gun(STBD_WAIST, self.crew[STBD_WAIST_GUNNER], 20),
            TAIL_TURRET: Gun(TAIL_TURRET, self.crew[TAIL_GUNNER], 23),
        }

        self.damage = []
예제 #5
0
    def test_loseGameCorrectlyUpdatesWinnerStats(self):
        file = open('gunid', 'r+')
        file.truncate()
        file.write(
            "# User Identification File.\n# Change gunid and username.\n# Rename file to gunid.\ngunid=3\nusername=Benjamin\n"
        )
        file.close()
        gun = Gun()
        gun.readIDFile()

        file = open('gunid', 'r+')
        file.truncate()
        file.write(
            "# User Identification File.\n# Change gunid and username.\n# Rename file to gunid.\ngunid=4\nusername=Thomas\n"
        )
        file.close()
        gun2 = Gun()
        gun2.readIDFile()

        mydb = connect.connect()
        cursor = mydb.cursor()
        sql = "INSERT INTO Games (current_state, winner, game_date) VALUES (2, 0, (NOW() - INTERVAL 4 HOUR + INTERVAL 11 MINUTE - INTERVAL 22 SECOND))"
        cursor.execute(sql)
        mydb.commit()

        sql = "SELECT * FROM Guns WHERE gun=3"
        cursor.execute(sql)
        myresult = cursor.fetchall()
        oldGunWins = myresult[0][1]

        sql = "SELECT * FROM Players WHERE username='******'"
        cursor.execute(sql)
        myresult = cursor.fetchall()
        oldPlayerWins = myresult[0][1]

        gun.joinGame()
        gun2.joinGame()
        gun2.loseGame()

        sql = "SELECT * FROM Guns WHERE gun=3"
        cursor.execute(sql)
        myresult = cursor.fetchall()
        newGunWins = myresult[0][1]

        sql = "SELECT * FROM Players WHERE username='******'"
        cursor.execute(sql)
        myresult = cursor.fetchall()
        newPlayerWins = myresult[0][1]

        self.assertEqual((oldGunWins + 1), newGunWins)
        self.assertEqual((oldPlayerWins + 1), newPlayerWins)

        mydb.close()
예제 #6
0
def game():
    pygame.init()       #Initialize Pygame
    pygame.mixer.pre_init(44100, -16, 2, 2048)  # Reduce Lagging for the Music
    pygame.mixer.init()     #Initialize Mixer for Background Music
    pygame.mixer.music.load('bgm.wav')      #Load the BGM File
    pygame.mixer.music.play(-1)     #Play the BGM Infinitely
    screen=pygame.display.set_mode((500,650))       #Set the Pygame Window
    pygame.display.set_caption("STARHEAD EXTERMINATOR")     #Set the Window Caption

    #Call All the Classes
    txt = "DONT SHOOT THE GREEN ONE"
    button = Button(screen,txt)
    stats = Stats()
    gun = Gun(screen)
    enemy = Enemy(screen,stats)
    host = Hostage(screen,stats)
    score = Score(screen, stats)
    enemies = Group()
    hostage = Group()
    #Start the Game Loop
    while True:
        gf.firstscreen(screen,button,stats,gun,enemies,hostage,score)      #First Display of the Game 
        if stats.game_active:       #Start when the Player Click the Button
            gf.gametrue(screen,stats,gun,enemies,hostage,score)     #Update and Behaviour of Objects in the Game
        gf.update_screen(screen,gun,enemies,hostage,button,stats)       #Update the Screen and Flip
예제 #7
0
 def test_readIDFileReturnsFalseFromPoorlyFormattedFile(self):
     file = open('gunid', 'r+')
     file.truncate()
     file.write("not a good file")
     file.close()
     gun = Gun()
     self.assertFalse(gun.readIDFile())
예제 #8
0
    def test_joinGameCorrectlyAddsUserIntoGame(self):
        file = open('gunid', 'r+')
        file.truncate()
        file.write(
            "# User Identification File.\n# Change gunid and username.\n# Rename file to gunid.\ngunid=3\nusername=Benjamin\n"
        )
        file.close()
        gun = Gun()
        gun.readIDFile()

        mydb = connect.connect()
        cursor = mydb.cursor()
        sql = "INSERT INTO Games (current_state, winner, game_date) VALUES (1, 0, (NOW() - INTERVAL 4 HOUR + INTERVAL 11 MINUTE - INTERVAL 22 SECOND))"
        cursor.execute(sql)
        mydb.commit()

        gun.joinGame()

        sql = "SELECT * FROM (Games INNER JOIN Game_Users ON Games.id = Game_Users.game_id) WHERE Games.current_state = 1"
        cursor.execute(sql)
        myresult = cursor.fetchall()
        self.assertEqual(len(myresult), 1)  #only one row added to database
        self.assertEqual(myresult[0][5], 3)  #gunid is 3
        self.assertEqual(myresult[0][6], "Benjamin")  #username is Benjamin

        sql = "UPDATE Games SET current_state=0 WHERE current_state=1"
        cursor.execute(sql)
        mydb.commit()

        mydb.close()
예제 #9
0
    def test_fireShotCorrectlyIncrementsGunShotsFiredInDatabase(self):
        file = open('gunid', 'r+')
        file.truncate()
        file.write(
            "# User Identification File.\n# Change gunid and username.\n# Rename file to gunid.\ngunid=3\nusername=Benjamin\n"
        )
        file.close()
        gun = Gun()
        gun.readIDFile()

        mydb = connect.connect()
        cursor = mydb.cursor()
        sql = ("SELECT * FROM Guns " "WHERE gun='{}'").format(gun.id)
        cursor.execute(sql)
        myresult = cursor.fetchall()
        oldShots = myresult[0][3]

        gun.fireShot()

        sql = ("SELECT * FROM Guns " "WHERE gun='{}'").format(gun.id)
        cursor.execute(sql)
        myresult = cursor.fetchall()
        newShots = myresult[0][3]

        mydb.close()
        self.assertEqual((oldShots + 1), newShots)
예제 #10
0
    def init(self):
        self.bgColor = (11, 102, 35)
        Player.init()
        self.player = Player(self.width / 2, self.height / 2)
        self.playerGroup = pygame.sprite.Group(self.player)

        Gun.init()
        self.guns = pygame.sprite.Group()
        for i in range(3):
            x = random.randint(0, self.width)
            y = random.randint(0, self.height)
            self.guns.add(Gun(x, y))

        objectGenerator.init()
        self.objectSet = pygame.sprite.Group()
        self.objectCoor = [(0,0)]
        self.test = objectGenerator(0, 0)
        while len(self.objectCoor) < 8:
            x = random.randint(0, self.width)
            y = random.randint(0, self.height)
            if not self.isTouching(x, y):
                self.objectCoor.append((x,y))
                self.objectSet.add(objectGenerator(x, y))

        self.bullets = pygame.sprite.Group()

        self.roads = set()
        number = random.randint(1, 2)
        for i in range(number):
            self.roads.add(self.selectRoads())
예제 #11
0
파일: enemy.py 프로젝트: bdevorem/tanks
	def __init__(self, gs=None, center=None, angle=None, target=None, interval = None):
		"""
		Enemy class: sort of a hybrid between the user
		tank and the pellets. It is a tank, and the gun
		follows the user at all time. But it changes directions
		when it hits another enemy or a wall
		"""
		pygame.sprite.Sprite.__init__(self)
		self.gs = gs

		self.angle = angle
		self.target = target		
		self.center = center

		self.image = pygame.image.load("imgs/tank3.png")
		self.orig_image = pygame.image.load("imgs/tank3.png")
		self.image = pygame.transform.scale(self.image, (40, 40))
		self.orig_image = pygame.transform.scale(self.orig_image, (40, 40))
		self.rect = self.image.get_rect()
		self.rect.center = self.center
		self.dx = math.cos(self.angle)*2
		self.dy = math.sin(self.angle)*-2
		self.exploded = False
		self.tofire = False
		self.gun = Gun(self.rect.center, self.gs)

		#random interval at which to fire at user
		self.fire_interval = interval
		self.fire_timer = 0
예제 #12
0
    def __init__(self,
                 motor_range,
                 steppers,
                 friendly_mode=True,
                 trigger_pin=None,
                 micro_pins=None,
                 micro_pos=None,
                 show_video=False):
        global has_motors

        self.friendly_mode = friendly_mode
        self.micro_pins = micro_pins
        self.micro_pos = micro_pos
        self.motor_range = motor_range

        self.stepper_x = steppers[0]
        self.stepper_y = steppers[1]

        self.override_motion = False

        atexit.register(self.__turn_off_motors)

        if has_motors:
            self.gun = Gun(trigger_pin, self.stepper_x, self.stepper_y,
                           friendly_mode)
        else:
            self.gun = dummy.Gun(self.stepper_x, self.stepper_y, friendly_mode)
        self.motion_sensor = MotionSensor(self.__on_motion,
                                          self.__on_no_motion,
                                          show_video=show_video)
예제 #13
0
파일: tank_obj.py 프로젝트: bdevorem/tanks
	def __init__(self, center, gs=None):
		pygame.sprite.Sprite.__init__(self)

		self.gs = gs
		self.image = pygame.image.load("imgs/tank1.png")
		self.orig_image = pygame.image.load("imgs/tank1.png")
		# tank is a tad smaller than gun bc collision detecting
		self.image = pygame.transform.scale(self.image, (40, 40))
		self.orig_image = pygame.transform.scale(self.orig_image, (40, 40))
		self.rect = self.image.get_rect()
		self.rect.center = center
		self.fire_x = 0
		self.fire_y = 0
		self.fire_timer = 0
		self.tofire = False
		self.mx = 0
		self.my = 0
		self.life = True

		#attach gun, has to be a different part in order
		# to move around seemlessly (as opposed to a weird
		# rotating square)
		self.gun = Gun(self.rect.center, self.gs)
		self.hold = False
		self.key = 0
예제 #14
0
파일: states.py 프로젝트: sbacchu/duckhunt
 def __init__(self):
     global registry
     self.registry = registry
     self.timer = int(time.time())
     self.notices = set()
     self.gun = Gun(self.registry)
     self.hitDucks = [False for i in range(10)]
     self.hitDuckIndex = 0
예제 #15
0
 def test_validateReturnsTrueWhenInputIsProperlyFormatted(self):
     file = open('gunid', 'r+')
     file.truncate()
     file.write(
         "# User Identification File.\n# Change gunid and username.\n# Rename file to gunid.\ngunid=3\nusername=Benjamin\n"
     )
     file.close()
     gun = Gun()
     self.assertTrue(gun.readIDFile())
예제 #16
0
 def test_validateReturnsFalseWhenPlayerIsNotRegistered(self):
     file = open('gunid', 'r+')
     file.truncate()
     file.write(
         "# User Identification File.\n# Change gunid and username.\n# Rename file to gunid.\ngunid=3\nusername=None\n"
     )
     file.close()
     gun = Gun()
     self.assertFalse(gun.readIDFile())
예제 #17
0
 def test_validateReturnsFalseWhenIdIs0(self):
     file = open('gunid', 'r+')
     file.truncate()
     file.write(
         "# User Identification File.\n# Change gunid and username.\n# Rename file to gunid.\ngunid=0\nusername=Benjamin\n"
     )
     file.close()
     gun = Gun()
     self.assertFalse(gun.readIDFile())
예제 #18
0
파일: game.py 프로젝트: 0Knowledge/pylaga
 def start(self):
     self.clear_vars()
     self.player = Player(self.player_list, self.token_list,
                          Gun(self.list_allie_shots, Bullet))
     self.player_list.add(self.player)
     self.player.set_pos(globalvars.x, globalvars.y)
     self.health.link_sprite(self.player)
     self.inputmanager = self.parent.inputmanager
     self.register_inputs()
     self.loop()
예제 #19
0
 def test_checkGameReturnsFalseWhenThereIsNoActiveGame(self):
     file = open('gunid', 'r+')
     file.truncate()
     file.write(
         "# User Identification File.\n# Change gunid and username.\n# Rename file to gunid.\ngunid=3\nusername=Benjamin\n"
     )
     file.close()
     gun = Gun()
     gun.readIDFile()
     self.assertFalse(gun.checkGame())
예제 #20
0
 def test_readIDFileAssignsCorrectValuesFromProperlyFormattedFile(self):
     file = open('gunid', 'r+')
     file.truncate()
     file.write(
         "# User Identification File.\n# Change gunid and username.\n# Rename file to gunid.\ngunid=3\nusername=Benjamin\n"
     )
     file.close()
     gun = Gun()
     gun.readIDFile()
     self.assertEqual(gun.id, 3)
     self.assertEqual(gun.username, "Benjamin")
예제 #21
0
 def __init__(self):
     """ Constructor for the Trigger class.
     Postconditions: The gunid and user name will be assigned to 
     a "gun" (to hardware).
 """
     self.TRIGGER = 19
     GPIO.setmode(GPIO.BCM)
     GPIO.setup(self.TRIGGER, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
     self.gun = Gun()
     self.gun.readIDFile()
     self.shotID = "Shot" + str(self.gun.id).zfill(2)
예제 #22
0
def main():
    bullets = [Bullet(), Bullet(), Bullet(), Bullet(), Bullet()]
    box = Box(bullets, 5)
    gun = Gun(box)
    per = Person(gun)

    #开枪
    per.fire()
    per.fire()
    per.fire()
    per.fire()
    per.fire()
    per.changeBox(5)
    per.fire()
예제 #23
0
    def __init__(self):
        super().__init__(title="Game",
                         width=15 * 64,
                         height=9 * 64,
                         fullscreen=False)

        # Load background image
        self.background_sprite = arcade.Sprite("assets/background.png",
                                               center_x=self.width / 2,
                                               center_y=self.height / 2)
        self.static_sprites = arcade.SpriteList(is_static=True)
        self.static_sprites.append(self.background_sprite)

        # Create game objects
        self.test_gun = Gun(300, 200)
        self.bullets = []
        self.player = Player(50, 50)
예제 #24
0
 def __init__(self, i, x, y, s, t=0):
     self.identity = i
     self.x = x
     self.y = y
     self.size = s
     self.t_num = t
     self.box = pygame.Rect((self.x, self.y), (self.size, self.size))
     self.level = 1
     self.__c_mod = 1.0  # gets smaller
     self.coolness = 0  # 0 means ready to shoot
     self.__r_mod = 1.0  # gets bigger
     self.__p_mod = 1.0  # gets bigger
     self.__s_mod = 1.0  # gets bigger
     self.gun = Gun((self.x, self.y), s, t, tower_colors[self.t_num],
                    self.level)
     self.upgrade_cost = 10
     self.follow_mouse = False
     self.show_r = False
     self.font = pygame.font.SysFont('Century Gothic', 12)
예제 #25
0
    def __init__(self, setting: settings):
        self.velocity = pygame.Vector2(0, 0)
        self.sprite_sheet = spriteSheet(setting.ship_filename, 5, 4)
        self.position = Vector2(
            setting.screen_width / 2 - self.sprite_sheet.cell_width / 2,
            setting.screen_height - self.sprite_sheet.cell_height)
        self.rect = pygame.Rect(self.position.x, self.position.y,
                                self.sprite_sheet.cell_width,
                                self.sprite_sheet.cell_height)

        self.ship_speed = setting.ship_speed
        self.life = setting.ship_life
        self.setting = setting
        self.gun = Gun(setting)
        self.moving_right = False
        self.moving_left = False
        self.score = score(0, Vector2())
        pygame.font.init()
        self.font = pygame.font.SysFont('Comic Sans', 24, True)
예제 #26
0
    def __init__(self):
        """Initialize the game and create game resources."""
        pygame.init()
        self.settings = Settings()

        self.screen = pygame.display.set_mode(
            (self.settings.screen_width, self.settings.screen_height))
        pygame.display.set_caption("Hit the Target")
        # self.screen_rect = self.screen.get_rect()

        # Create an instance to store game statistics.
        self.stats = GameStats(self)

        self.target = Target(self)
        self.gun = Gun(self)
        self.bullets = pygame.sprite.Group()

        # Make the Play button.
        self.play_button = Button(self, "Play")
예제 #27
0
파일: teammate.py 프로젝트: bdevorem/tanks
    def __init__(self, center, gs=None):
        pygame.sprite.Sprite.__init__(self)

        self.gs = gs
        self.image = pygame.image.load("imgs/tank2.png")
        self.orig_image = pygame.image.load("imgs/tank2.png")
        # tank is a tad smaller than gun bc collision detecting
        self.image = pygame.transform.scale(self.image, (40, 40))
        self.orig_image = pygame.transform.scale(self.orig_image, (40, 40))
        self.rect = self.image.get_rect()
        self.rect.center = center
        self.fire_x = 0
        self.fire_y = 0
        self.fire_timer = 0
        self.tofire = False
        self.mx = 0
        self.my = 0
        self.gun = Gun(self.rect.center, self.gs)
        self.hold = False
        self.key = 0
예제 #28
0
    def __init__(self, setting: settings, shoot_sound):
        self.shoot_sound = shoot_sound
        self.fleet = list()
        self.move_speed = setting.alien_speed
        self.creep_speed = setting.creep_speed
        self.gun = Gun(setting)
        self.setting = setting
        self.saucer = Saucer(setting, Vector2(-64, 64 * 2))

        for i in range(10):
            self.fleet.append(Squid(setting, pygame.Vector2(70 * i, 70)))
        for i in range(10):
            self.fleet.append(Squid(setting, pygame.Vector2(70 * i, 70 * 2)))
        for i in range(10):
            self.fleet.append(Jelly(setting, pygame.Vector2(70 * i, 70 * 3)))
        for i in range(10):
            self.fleet.append(Jelly(setting, pygame.Vector2(70 * i, 70 * 4)))
        for i in range(10):
            self.fleet.append(Crab(setting, pygame.Vector2(70 * i, 70 * 5)))
        for i in range(10):
            self.fleet.append(Crab(setting, pygame.Vector2(70 * i, 70 * 6)))
예제 #29
0
    def test_checkGameReturnsTrueWhenThereIsAJoiningGame(self):
        file = open('gunid', 'r+')
        file.truncate()
        file.write(
            "# User Identification File.\n# Change gunid and username.\n# Rename file to gunid.\ngunid=3\nusername=Benjamin\n"
        )
        file.close()
        gun = Gun()
        gun.readIDFile()

        mydb = connect.connect()
        cursor = mydb.cursor()
        sql = "INSERT INTO Games (current_state, winner, game_date) VALUES (1, 0, (NOW() - INTERVAL 4 HOUR + INTERVAL 11 MINUTE - INTERVAL 22 SECOND))"
        cursor.execute(sql)
        mydb.commit()

        self.assertTrue(gun.checkGame())

        sql = "UPDATE Games SET current_state=0 WHERE current_state=1"
        cursor.execute(sql)
        mydb.commit()

        mydb.close()
예제 #30
0
파일: player.py 프로젝트: Kerssinen/Punity
    def __init__(self, texture, speed):
        super().__init__()
        self.sr = SpriteRenderer(self, texture)
        self.rb = Rigidbody(self)

        self.event_listener = EventListener(self, self.explode)
        self.event = GameEvent(self)

        self.add_components([self.rb, self.sr, self.event_listener])

        self.gun = Gun()
        self.gun.transform.set_parent(self.transform)
        self.gun.transform.local_position = pygame.math.Vector2(0, -32)
        self.instantiate(self.gun)

        self.speed = speed

        self.transform.size = pygame.math.Vector2(3,3)
        self.cooldown = 0.5
        self.cooldown_timer = 0

        self.vel = pygame.math.Vector2(0,0)
        self.acc = 100
        self.dec = 0.8