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