import arcade CELL = 25 HEIGHT = 600 WIDTH = 900 TITLE = "OGS Memory" class Context: def __init__(self): self.images = [ ["res/tiles.png", 0, 0, 75, 100], ["res/tiles.png", 75, 0, 75, 100], ["res/tiles.png", 150, 0, 75, 100], ] self.positions = [ [9, 1], [14, 1], [19, 1], [24, 1], [9, 7], [14, 7], [19, 7], [24, 7], [9, 13], [14, 13], [19, 13], [24, 13], [9, 19], [14, 19], [19, 19], [24, 19], ] self.textures = None self.deselected_tiles = None self.selected_tiles = None class Window(arcade.Window): def __init__(self): super().__init__(WIDTH, HEIGHT, TITLE) arcade.set_background_color(arcade.color.WHITE) self.all_sprites = arcade.SpriteList() self.c = Context() c = self.c c.textures = load_textures(c.images) c.deselected_tiles = create_deselected_tiles(c.positions, c.textures) for t in c.deselected_tiles: self.all_sprites.append(t) c.selected_tiles = create_selected_tiles(c.positions, c.textures) for t in c.selected_tiles: self.all_sprites.append(t) def on_draw(self): arcade.start_render() self.all_sprites.draw() def on_mouse_press(self, x, y, button, key_modifiers): print("click", x, y) sprites = arcade.get_sprites_at_point([x, y], self.all_sprites) id = sprites[0].guid print("selected id: ", id) #print("deselected_tiles: ", self.c.deselected_tiles) #print("selected_tiles: ", self.c.selected_tiles) self.c.deselected_tiles[id].visible = False self.c.selected_tiles[id].visible = True def on_update(self, delta): self.all_sprites.update_animation() def load_textures(images): ts = [] for (id, img) in enumerate(images): tex = arcade.load_texture(img[0], x = img[1], y = img[2], width = img[3], height = img[4]) ts.append(tex) return ts def create_deselected_tiles(positions, textures): tiles = [] for (id, p) in enumerate(positions): tile = arcade.AnimatedTimeBasedSprite() tiles.append(tile) tile.guid = id tile.texture = textures[0] # Animation between two textures. a1 = arcade.sprite.AnimationKeyframe(0, 700, textures[0]) a2 = arcade.sprite.AnimationKeyframe(1, 700, textures[1]) tile.frames.append(a1) tile.frames.append(a2) # Position. tile.center_x = CELL * 2 + p[0] * CELL tile.center_y = HEIGHT - CELL * 2 - p[1] * CELL return tiles def create_selected_tiles(positions, textures): tiles = [] for (id, p) in enumerate(positions): tile = arcade.Sprite() tiles.append(tile) tile.guid = id tile.texture = textures[2] # Position. tile.center_x = CELL * 2 + p[0] * CELL tile.center_y = HEIGHT - CELL * 2 - p[1] * CELL # Invisible by default. tile.visible = False return tiles