Solution requires placing, rotating, or organizing tiles or objects in physical space according to a rule set.
Falling pieces are placed and stacked into a grid according to a rule set.
Placement puzzles are a grid array plus a validity rule plus a goal check. The grid is data; a TileMapLayer is just one way to draw it.
Hold the board as a 2D array of cell states. Every placement, rotation, or move is a write to this grid — the source of truth.
var grid := [] # grid[y][x] = piece_id or 0
func place(x, y, piece):
if grid[y][x] == 0: grid[y][x] = pieceA convenient renderer/input surface for the grid: world coordinates map to cells via local_to_map, so clicks land on the right array index.
var cell = $Board.local_to_map(get_local_mouse_position())
place(cell.x, cell.y, current_piece)After each placement, run the win check against the target configuration and emit solved (or line_cleared) on a match.
signal solved
func check():
if grid_matches(target): solved.emit()In short: Grid array; validity check on each placement; win condition checks target configuration
11 catalogued game(s) use this mechanic, spanning 1983–1999.
▶ Explore Spatial Arrangement interactively — see every game + the Godot system