AppResidencia/empareja-las-sombras/node_2d.gd

127 lines
4.1 KiB
GDScript

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!")