Beispiel #1
0
class SpriteGame(arcade.Window):

    player : object
    
    def __init__(self, width=800, height=660, title="SpriteGame"):
        super().__init__(width,height,title)
        self.WINDOW_H = height
        self.WINDOW_W = width

        self.ddx = 0
        self.ddy = 0
        self.dx = 0
        self.dy = 0


    def setup(self):
        path = os.path.abspath(__file__)
        directory = os.path.dirname(path)
        spritefile = directory + '/static/ship_blue.png'
        self.player = Sprite(filename=spritefile, scale=0.6)
        self.player.center_x = self.WINDOW_W/2
        self.player.center_y = self.WINDOW_H/2

        self.speed = 0
        self.force = 0
        self.rotation = 0
        self.dangle = 0


        

    def run(self):
        arcade.run()


    def on_key_press(self, key, modifiers):

        if key == arcade.key.W:
            self.force += 10
        if key == arcade.key.S:
            self.force += -5
        if key == arcade.key.A:
            self.dangle += 10
        if key == arcade.key.D:
            self.dangle += -10

    def on_key_release(self, key, modifiers):

        if key == arcade.key.W:
            self.force -= 10
        if key == arcade.key.S:
            self.force -= -5
        if key == arcade.key.A:
            self.dangle -= 10
        if key == arcade.key.D:
            self.dangle -= -10





    def on_update(self, deltatime):
        # 0 - 360          
        self.rotation += self.dangle        
        ddx = -math.sin(math.radians(self.rotation))
        ddy = math.cos(math.radians(self.rotation))

        self.dx = arcade.lerp(self.dx, ddx, 0.05)
        self.dy = arcade.lerp(self.dy, ddy, 0.05)

        self.speed = arcade.lerp(self.speed, self.force, 0.05)
        
        self.player.change_x = self.dx * self.speed
        self.player.change_y = self.dy * self.speed
        self.player.angle = self.rotation
        self.player.update()


    def on_draw(self):

        arcade.start_render()

        self.player.draw()
class Game(arcade.Window):
    """
    
    """
    def __init__(self, width, height):
        """
        Sets up the initial conditions of the game
        :param width: Screen width
        :param height: Screen height
        """
        super().__init__(width, height)

        self.score = 0

        self.player = Sprite(filename="demo_player.jpeg")
        self.player.center_x = SCREEN_WIDTH // 2
        self.player.center_y = SCREEN_HEIGHT // 3
        self.player.change_x = 3

        self.bullets = []

        arcade.set_background_color(arcade.color.BLACK_LEATHER_JACKET)

    def on_draw(self):
        """
        Called automatically by the arcade framework.
        Handles the responsiblity of drawing all elements.
        """

        # clear the screen to begin drawing
        arcade.start_render()
        self.draw_score()
        self.player.draw()
        for bullet in self.bullets:
            bullet.draw()

    def draw_score(self):
        """
        Puts the current score on the screen
        """

        score_text = "Score: {}".format(self.score)
        start_x = 10
        start_y = SCREEN_HEIGHT - 20

        arcade.draw_rectangle_filled(50, start_y + 5, 90, 20, (0, 0, 0, 150))
        arcade.draw_text(score_text,
                         start_x=start_x,
                         start_y=start_y,
                         font_size=12,
                         color=arcade.color.WHITE)

    def update(self, delta_time):
        """
        Update each object in the game.
        :param delta_time: tells us how much time has actually elapsed
        """

        # Check to see if keys are being held, and then
        # take appropriate action
        self.check_keys()
        self.player.update()
        for bullet in self.bullets:
            bullet.update()



        if ((self.player.center_x > SCREEN_WIDTH and self.player.change_x > 0) or \
            (self.player.center_x < 0 and self.player.change_x < 0)):
            self.player.change_x *= -1

    def check_keys(self):
        """
        Checks to see if the user is holding down an
        arrow key, and if so, takes appropriate action.
        """
        pass

    def on_key_press(self, key, key_modifiers):
        """
        Called when a key is pressed. Sets the state of
        holding an arrow key.
        :param key: The key that was pressed
        :param key_modifiers: Things like shift, ctrl, etc
        """

        if key == arcade.key.LEFT or key == arcade.key.DOWN:
            self.player.change_x = -3

        if key == arcade.key.RIGHT or key == arcade.key.UP:
            self.player.change_x = 3

        if key == arcade.key.W or key == arcade.key.D:
            pass

        if key == arcade.key.S or key == arcade.key.A:
            pass

        if key == arcade.key.SPACE:
            bullet = Sprite(filename="game_piece_red.png", \
                center_x=self.player.center_x, center_y=self.player.center_y)
            bullet.change_y = 30
            bullet.scale = .25
            self.bullets.append(bullet)

    def on_key_release(self, key, key_modifiers):
        """
        Called when a key is released. Sets the state of
        the arrow key as being not held anymore.
        :param key: The key that was pressed
        :param key_modifiers: Things like shift, ctrl, etc
        """
        if key == arcade.key.LEFT or key == arcade.key.DOWN:
            pass

        if key == arcade.key.RIGHT or key == arcade.key.UP:
            pass

        if key == arcade.key.W or key == arcade.key.D:
            pass

        if key == arcade.key.S or key == arcade.key.A:
            pass