def setup(self): """ Set up the game and initialize the variables. """ # Sprite lists self.player_list = arcadeplus.SpriteList() self.wall_list = arcadeplus.SpriteList() # Set up the player self.player_sprite = arcadeplus.Sprite(":resources:images/animated_characters/female_person/femalePerson_idle.png", SPRITE_SCALING) self.player_sprite.center_x = 50 self.player_sprite.center_y = 64 self.player_list.append(self.player_sprite) # -- Set up the walls # Create a row of boxes for x in range(173, 650, 64): wall = arcadeplus.Sprite(":resources:images/tiles/boxCrate_double.png", SPRITE_SCALING) wall.center_x = x wall.center_y = 200 self.wall_list.append(wall) # Create a column of boxes for y in range(273, 500, 64): wall = arcadeplus.Sprite(":resources:images/tiles/boxCrate_double.png", SPRITE_SCALING) wall.center_x = 465 wall.center_y = y self.wall_list.append(wall) self.physics_engine = arcadeplus.PhysicsEngineSimple(self.player_sprite, self.wall_list) # Set the background color arcadeplus.set_background_color(arcadeplus.color.AMAZON)
def __init__(self, width, height, title): super().__init__(width, height, title) file_path = os.path.dirname(os.path.abspath(__file__)) os.chdir(file_path) arcadeplus.set_background_color(arcadeplus.color.AMAZON) self.character_list = arcadeplus.SpriteList() self.character_sprite = arcadeplus.Sprite( ":resources:images/animated_characters/female_person/femalePerson_idle.png", CHARACTER_SCALING) self.character_sprite.center_x = 250 self.character_sprite.center_y = 250 self.character_sprite.change_x = 5 self.character_sprite.change_y = 5 self.character_list.append(self.character_sprite) self.wall_list = arcadeplus.SpriteList() sprite = arcadeplus.Sprite( ":resources:images/tiles/boxCrate_double.png", CHARACTER_SCALING) sprite.position = (330, 330) sprite.angle = 90 self.wall_list.append(sprite) sprite = arcadeplus.Sprite( ":resources:images/tiles/boxCrate_double.png", CHARACTER_SCALING) sprite.position = (170, 170) sprite.angle = 45 self.wall_list.append(sprite) self.physics_engine = arcadeplus.PhysicsEngineSimple( self.character_sprite, self.wall_list)
def on_update(self, delta_time): """ Movement and game logic """ # Call update on all sprites (The sprites don't do much in this # example though.) self.physics_engine.update() # Do some logic here to figure out what room we are in, and if we need to go # to a different room. if self.player_sprite.center_x > SCREEN_WIDTH and self.current_room == 0: self.current_room = 1 self.physics_engine = arcadeplus.PhysicsEngineSimple(self.player_sprite, self.rooms[self.current_room].wall_list) self.player_sprite.center_x = 0 elif self.player_sprite.center_x < 0 and self.current_room == 1: self.current_room = 0 self.physics_engine = arcadeplus.PhysicsEngineSimple(self.player_sprite, self.rooms[self.current_room].wall_list) self.player_sprite.center_x = SCREEN_WIDTH
def setup(self): """ Set up the game and initialize the variables. """ # Sprite lists self.player_list = arcadeplus.SpriteList() self.wall_list = arcadeplus.SpriteList() # Set up the player self.player_sprite = arcadeplus.Sprite( ":resources:images/animated_characters/female_person/femalePerson_idle.png", 0.4) self.player_sprite.center_x = 64 self.player_sprite.center_y = 270 self.player_list.append(self.player_sprite) # -- Set up several columns of walls for x in range(200, 1650, 210): for y in range(0, 1000, 64): # Randomly skip a box so the player can find a way through if random.randrange(5) > 0: wall = arcadeplus.Sprite( ":resources:images/tiles/boxCrate_double.png", SPRITE_SCALING) wall.center_x = x wall.center_y = y self.wall_list.append(wall) self.physics_engine = arcadeplus.PhysicsEngineSimple( self.player_sprite, self.wall_list) # Set the background color arcadeplus.set_background_color(arcadeplus.color.AMAZON) # Set the viewport boundaries # These numbers set where we have 'scrolled' to. self.view_left = 0 self.view_bottom = 0
def setup(self): """ Set up the game here. Call this function to restart the game. """ # Create the Sprite lists self.player_list = arcadeplus.SpriteList() self.wall_list = arcadeplus.SpriteList() self.coin_list = arcadeplus.SpriteList() # Set up the player, specifically placing it at these coordinates. image_source = ":resources:images/animated_characters/female_adventurer/femaleAdventurer_idle.png" self.player_sprite = arcadeplus.Sprite(image_source, CHARACTER_SCALING) self.player_sprite.center_x = 64 self.player_sprite.center_y = 128 self.player_list.append(self.player_sprite) # Create the ground # This shows using a loop to place multiple sprites horizontally for x in range(0, 1250, 64): wall = arcadeplus.Sprite(":resources:images/tiles/grassMid.png", TILE_SCALING) wall.center_x = x wall.center_y = 32 self.wall_list.append(wall) # Put some crates on the ground # This shows using a coordinate list to place sprites coordinate_list = [[512, 96], [256, 96], [768, 96]] for coordinate in coordinate_list: # Add a crate on the ground wall = arcadeplus.Sprite( ":resources:images/tiles/boxCrate_double.png", TILE_SCALING) wall.position = coordinate self.wall_list.append(wall) # Create the 'physics engine' self.physics_engine = arcadeplus.PhysicsEngineSimple( self.player_sprite, self.wall_list)
def setup(self): """ Set up the game and initialize the variables. """ # Set up the player self.player_sprite = arcadeplus.Sprite(":resources:images/animated_characters/female_person/femalePerson_idle.png", SPRITE_SCALING) self.player_sprite.center_x = 100 self.player_sprite.center_y = 100 self.player_list = arcadeplus.SpriteList() self.player_list.append(self.player_sprite) # Our list of rooms self.rooms = [] # Create the rooms. Extend the pattern for each room. room = setup_room_1() self.rooms.append(room) room = setup_room_2() self.rooms.append(room) # Our starting room number self.current_room = 0 # Create a physics engine for this room self.physics_engine = arcadeplus.PhysicsEngineSimple(self.player_sprite, self.rooms[self.current_room].wall_list)
def setup(self): """ Set up the game and initialize the variables. """ # Sprite lists self.player_list = arcadeplus.SpriteList() self.wall_list = arcadeplus.SpriteList() self.score = 0 # Create the maze maze = make_maze_depth_first(MAZE_WIDTH, MAZE_HEIGHT) # Create sprites based on 2D grid if not MERGE_SPRITES: # This is the simple-to-understand method. Each grid location # is a sprite. for row in range(MAZE_HEIGHT): for column in range(MAZE_WIDTH): if maze[row][column] == 1: wall = arcadeplus.Sprite( ":resources:images/tiles/grassCenter.png", SPRITE_SCALING) wall.center_x = column * SPRITE_SIZE + SPRITE_SIZE / 2 wall.center_y = row * SPRITE_SIZE + SPRITE_SIZE / 2 self.wall_list.append(wall) else: # This uses new arcadeplus 1.3.1 features, that allow me to create a # larger sprite with a repeating texture. So if there are multiple # cells in a row with a wall, we merge them into one sprite, with a # repeating texture for each cell. This reduces our sprite count. for row in range(MAZE_HEIGHT): column = 0 while column < len(maze): while column < len(maze) and maze[row][column] == 0: column += 1 start_column = column while column < len(maze) and maze[row][column] == 1: column += 1 end_column = column - 1 column_count = end_column - start_column + 1 column_mid = (start_column + end_column) / 2 wall = arcadeplus.Sprite( ":resources:images/tiles/grassCenter.png", SPRITE_SCALING, repeat_count_x=column_count) wall.center_x = column_mid * SPRITE_SIZE + SPRITE_SIZE / 2 wall.center_y = row * SPRITE_SIZE + SPRITE_SIZE / 2 wall.width = SPRITE_SIZE * column_count self.wall_list.append(wall) # Set up the player self.player_sprite = arcadeplus.Sprite( ":resources:images/animated_characters/female_person/femalePerson_idle.png", SPRITE_SCALING) self.player_list.append(self.player_sprite) # Randomly place the player. If we are in a wall, repeat until we aren't. placed = False while not placed: # Randomly position self.player_sprite.center_x = random.randrange(MAZE_WIDTH * SPRITE_SIZE) self.player_sprite.center_y = random.randrange(MAZE_HEIGHT * SPRITE_SIZE) # Are we in a wall? walls_hit = arcadeplus.check_for_collision_with_list( self.player_sprite, self.wall_list) if len(walls_hit) == 0: # Not in a wall! Success! placed = True self.physics_engine = arcadeplus.PhysicsEngineSimple( self.player_sprite, self.wall_list) # Set the background color arcadeplus.set_background_color(arcadeplus.color.AMAZON) # Set the viewport boundaries # These numbers set where we have 'scrolled' to. self.view_left = 0 self.view_bottom = 0 print(f"Total wall blocks: {len(self.wall_list)}")
def setup(self): self.wall_list = arcadeplus.SpriteList(use_spatial_hash=True) self.player_list = arcadeplus.SpriteList() # Create cave system using a 2D grid self.grid = create_grid(GRID_WIDTH, GRID_HEIGHT) initialize_grid(self.grid) for step in range(NUMBER_OF_STEPS): self.grid = do_simulation_step(self.grid) # Create sprites based on 2D grid if not MERGE_SPRITES: # This is the simple-to-understand method. Each grid location # is a sprite. for row in range(GRID_HEIGHT): for column in range(GRID_WIDTH): if self.grid[row][column] == 1: wall = arcadeplus.Sprite( ":resources:images/tiles/grassCenter.png", SPRITE_SCALING) wall.center_x = column * SPRITE_SIZE + SPRITE_SIZE / 2 wall.center_y = row * SPRITE_SIZE + SPRITE_SIZE / 2 self.wall_list.append(wall) else: # This uses new arcadeplus 1.3.1 features, that allow me to create a # larger sprite with a repeating texture. So if there are multiple # cells in a row with a wall, we merge them into one sprite, with a # repeating texture for each cell. This reduces our sprite count. for row in range(GRID_HEIGHT): column = 0 while column < GRID_WIDTH: while column < GRID_WIDTH and self.grid[row][column] == 0: column += 1 start_column = column while column < GRID_WIDTH and self.grid[row][column] == 1: column += 1 end_column = column - 1 column_count = end_column - start_column + 1 column_mid = (start_column + end_column) / 2 wall = arcadeplus.Sprite( ":resources:images/tiles/grassCenter.png", SPRITE_SCALING, repeat_count_x=column_count) wall.center_x = column_mid * SPRITE_SIZE + SPRITE_SIZE / 2 wall.center_y = row * SPRITE_SIZE + SPRITE_SIZE / 2 wall.width = SPRITE_SIZE * column_count self.wall_list.append(wall) # Set up the player self.player_sprite = arcadeplus.Sprite( ":resources:images/animated_characters/female_person/femalePerson_idle.png", SPRITE_SCALING) self.player_list.append(self.player_sprite) # Randomly place the player. If we are in a wall, repeat until we aren't. placed = False while not placed: # Randomly position max_x = GRID_WIDTH * SPRITE_SIZE max_y = GRID_HEIGHT * SPRITE_SIZE self.player_sprite.center_x = random.randrange(max_x) self.player_sprite.center_y = random.randrange(max_y) # Are we in a wall? walls_hit = arcadeplus.check_for_collision_with_list( self.player_sprite, self.wall_list) if len(walls_hit) == 0: # Not in a wall! Success! placed = True self.physics_engine = arcadeplus.PhysicsEngineSimple( self.player_sprite, self.wall_list)
def setup(self): """ Set up the game and initialize the variables. """ # Sprite lists self.all_sprites_list = arcadeplus.SpriteList() self.wall_list = arcadeplus.SpriteList() self.coin_list = arcadeplus.SpriteList() # Set up the player self.player_sprite = arcadeplus.Sprite( ":resources:images/animated_characters/female_person/femalePerson_idle.png", SPRITE_SCALING) self.player_sprite.center_x = 50 self.player_sprite.center_y = 64 # -- Set up the walls # Create a series of horizontal walls for y in range(0, 800, 200): for x in range(100, 700, 64): wall = arcadeplus.Sprite( ":resources:images/tiles/boxCrate_double.png", SPRITE_SCALING) wall.center_x = x wall.center_y = y self.wall_list.append(wall) # -- Randomly place coins where there are no walls # Create the coins for i in range(NUMBER_OF_COINS): # Create the coin instance # Coin image from kenney.nl coin = arcadeplus.Sprite(":resources:images/items/coinGold.png", SPRITE_SCALING_COIN) # --- IMPORTANT PART --- # Boolean variable if we successfully placed the coin coin_placed_successfully = False # Keep trying until success while not coin_placed_successfully: # Position the coin coin.center_x = random.randrange(SCREEN_WIDTH) coin.center_y = random.randrange(SCREEN_HEIGHT) # See if the coin is hitting a wall wall_hit_list = arcadeplus.check_for_collision_with_list( coin, self.wall_list) # See if the coin is hitting another coin coin_hit_list = arcadeplus.check_for_collision_with_list( coin, self.coin_list) if len(wall_hit_list) == 0 and len(coin_hit_list) == 0: # It is! coin_placed_successfully = True # Add the coin to the lists self.coin_list.append(coin) # --- END OF IMPORTANT PART --- self.physics_engine = arcadeplus.PhysicsEngineSimple( self.player_sprite, self.wall_list) # Set the background color arcadeplus.set_background_color(arcadeplus.color.AMAZON)