extends Node2D @onready var game_board_container = $GameBoardContainer @onready var number_holder = $Holder @onready var game_board = $GameBoardContainer/GameBoard var difficulty = 1 # 1: Fácil, 2: Medio, 3: Difícil var board_size = Vector2i(5, 5) var game_numbers = [] var number_tiles = [] var correct_matches = {} func _ready(): setup_game() func setup_game(): game_board.get_node("GridContainer").columns = board_size.x game_numbers = generate_unique_numbers(board_size.x * board_size.y) game_numbers.shuffle() create_board_labels() create_number_tiles() func generate_unique_numbers(count: int) -> Array[int]: var numbers: Array[int] = [] for i in range(1, count + 1): numbers.append(i) return numbers func create_board_labels(): var animal_images = get_all_animal_shadow_images() animal_images.shuffle() var board_slots_count = game_numbers.size() var fixed_cell_size = Vector2(152, 176) # Establece un tamaño fijo de 152x176 para cada celda for i in range(board_slots_count): var image_path = animal_images[i % animal_images.size()] var texture = load(image_path) var sprite = Sprite2D.new() sprite.texture = texture sprite.scale = Vector2(fixed_cell_size.x / sprite.texture.get_width(), fixed_cell_size.y / sprite.texture.get_height()) sprite.position = Vector2(fixed_cell_size.x / 2, fixed_cell_size.y / 2) var cell = Node2D.new() cell.position = Vector2(i % board_size.x * fixed_cell_size.x, int(i / board_size.x) * fixed_cell_size.y) var border = Line2D.new() border.add_point(Vector2(0, 0)) border.add_point(Vector2(fixed_cell_size.x, 0)) border.add_point(Vector2(fixed_cell_size.x, fixed_cell_size.y)) border.add_point(Vector2(0, fixed_cell_size.y)) border.add_point(Vector2(0, 0)) border.width = 4 border.default_color = Color(1, 0, 0) cell.add_child(border) cell.add_child(sprite) var animal_name = image_path.get_file().replace("_sombra.png", "") cell.set("target_animal", animal_name) cell.set("is_target", true) cell.set("is_occupied", false) cell.name = "BoardCell_" + str(i) game_board.get_node("GridContainer").add_child(cell) var static_body = StaticBody2D.new() cell.add_child(static_body) var collision_shape = CollisionShape2D.new() var rectangle_shape = RectangleShape2D.new() rectangle_shape.size = fixed_cell_size collision_shape.shape = rectangle_shape static_body.add_child(collision_shape) correct_matches[str(i)] = animal_name func get_all_animal_shadow_images() -> Array[String]: var dir = DirAccess.open("res://images") var images: Array[String] = [] if dir: dir.list_dir_begin() var file_name = dir.get_next() while file_name != "": if file_name.ends_with("_sombra.png"): images.append("res://images/" + file_name) file_name = dir.get_next() dir.list_dir_end() else: print("¡No se pudo abrir el directorio de imágenes!") return images func create_number_tiles(): var shuffled_numbers = game_numbers.duplicate() shuffled_numbers.shuffle() var tiles_container = $TilesContainer for i in range(shuffled_numbers.size()): var tile = Label.new() tile.text = str(shuffled_numbers[i]) tile.name = "NumberTile_" + str(shuffled_numbers[i]) tile.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER tile.vertical_alignment = VERTICAL_ALIGNMENT_CENTER tile.custom_minimum_size = Vector2(152, 176) tile.add_theme_font_size_override("font_size", 40) tile.add_theme_stylebox_override("normal", StyleBoxFlat.new()) tile.get_theme_stylebox("normal").bg_color = Color(0.8, 0.8, 1.0) tile.script = preload("res://number_tile.gd") tiles_container.add_child(tile) number_tiles.append(tile) var area = Area2D.new() tile.add_child(area) var collision_shape = CollisionShape2D.new() var rectangle_shape = RectangleShape2D.new() rectangle_shape.size = tile.get_rect().size collision_shape.shape = rectangle_shape area.add_child(collision_shape) func check_win(): var all_matched = true for child in game_board.get_children(): if child is NumberTile and child.correct_slot == null: all_matched = false break if all_matched: print("¡Has ganado!")