From 1032891929f38157721087dcd99ac951b7c1088a Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Mon, 25 Nov 2019 22:56:50 +0100 Subject: [PATCH] shuffle pieces and check for win --- game/src/Taquin.gd | 46 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/game/src/Taquin.gd b/game/src/Taquin.gd index 35beae2..402fe11 100644 --- a/game/src/Taquin.gd +++ b/game/src/Taquin.gd @@ -11,23 +11,28 @@ export var height: int = 512 var pieces: Array = [] var missing_piece: Vector2 +var rng = RandomNumberGenerator.new() func _draw() -> void: draw_rect(Rect2(0, 0, width, height), Color.blue) + +func position_for_index(index: Vector2, size: int) -> Vector2: + var padding_w = (width - (size * columns)) / (columns + 1) + var padding_h = (height - (size * rows)) / (rows + 1) + return Vector2(padding_w + index.x * (size + padding_w), padding_h + index.y * (size + padding_h)) + func _ready() -> void: + rng.randomize() + for c in range(columns): var pieces_row: Array = [] for r in range(rows): - var piece = Piece.instance() - var padding_w = (width - (piece.size * columns)) / (columns + 1) - var padding_h = (height - (piece.size * rows)) / (rows + 1) - var initial_position = Vector2(padding_w + c * (piece.size + padding_w), padding_h + r * (piece.size + padding_h)) + piece.position = position_for_index(Vector2(c, r), piece.size) piece.set_number(1 + c + r * columns) - piece.translate(initial_position) - + if r == rows - 1 && c == columns - 1: piece.visible = false missing_piece.x = c @@ -38,15 +43,17 @@ func _ready() -> void: pieces.append(pieces_row) + shuffle(10) + func _input(event): if event.is_action_pressed("ui_up"): - move_piece(Direction.UP) - if event.is_action_pressed("ui_down"): move_piece(Direction.DOWN) + if event.is_action_pressed("ui_down"): + move_piece(Direction.UP) if event.is_action_pressed("ui_left"): - move_piece(Direction.LEFT) - if event.is_action_pressed("ui_right"): move_piece(Direction.RIGHT) + if event.is_action_pressed("ui_right"): + move_piece(Direction.LEFT) enum Direction { UP, DOWN, LEFT, RIGHT } @@ -74,7 +81,11 @@ func move_piece(direction) -> bool: swap(missing_piece, destination) missing_piece = destination + update() + if check_solved(): + print("solved") + return true func swap(src: Vector2, dst: Vector2) -> void: @@ -82,4 +93,17 @@ func swap(src: Vector2, dst: Vector2) -> void: pieces[src.x][src.y] = pieces[dst.x][dst.y] pieces[dst.x][dst.y] = tmp pieces[src.x][src.y].position = position_for_index(src, tmp.size) - pieces[dst.x][dst.y].position = position_for_index(dst, tmp.size) \ No newline at end of file + pieces[dst.x][dst.y].position = position_for_index(dst, tmp.size) + +func shuffle(count: int) -> void: + while count > 0: + count -= 1 + var direction = rng.randi_range(Direction.UP, Direction.RIGHT) + move_piece(direction) + +func check_solved() -> bool: + for c in range(columns): + for r in range(rows): + if pieces[c][r].number != 1 + c + r * columns: + return false + return true \ No newline at end of file