from raylibpy import * import math # Grid setup ROWS = 3 COLS = 3 TILE_SIZE = 120 MARGIN = 20 SWIPE_MIN_DISTANCE = 30.0 # Minimum distance to detect swipe # Board: 0 means empty tile, others are numbered board = [] def init_board(): global board board = [i + 1 for i in range(ROWS * COLS - 1)] + [0] # 1..8 + 0 empty def idx_row(idx): return idx // COLS def idx_col(idx): return idx % COLS def draw_board(): for i, value in enumerate(board): r, c = idx_row(i), idx_col(i) x = MARGIN + c * TILE_SIZE y = MARGIN + r * TILE_SIZE if value == 0: draw_rectangle(x, y, TILE_SIZE - 4, TILE_SIZE - 4, DARKGRAY) else: draw_rectangle(x, y, TILE_SIZE - 4, TILE_SIZE - 4, LIGHTGRAY) draw_text(str(value), x + TILE_SIZE // 2 - 10, y + TILE_SIZE // 2 - 12, 24, BLACK) def find_empty(): return board.index(0) def move_empty(direction): empty = find_empty() er, ec = idx_row(empty), idx_col(empty) tr, tc = er, ec if direction == 0: tr = er - 1 # up elif direction == 1: tr = er + 1 # down elif direction == 2: tc = ec - 1 # left elif direction == 3: tc = ec + 1 # right if tr < 0 or tr >= ROWS or tc < 0 or tc >= COLS: return # out of bounds target = tr * COLS + tc board[empty], board[target] = board[target], board[empty] def main(): screenW = MARGIN * 2 + COLS * TILE_SIZE screenH = MARGIN * 2 + ROWS * TILE_SIZE init_window(screenW, screenH, b"Puzzle Swipe Test (Python)") set_target_fps(60) init_board() # Swipe variables touch_start = Vector2(0, 0) touch_end = Vector2(0, 0) touching = False while not window_should_close(): # Detect touch or mouse drag if is_mouse_button_pressed(MOUSE_LEFT_BUTTON): touching = True touch_start = get_mouse_position() if touching and is_mouse_button_released(MOUSE_LEFT_BUTTON): touching = False touch_end = get_mouse_position() dx = touch_end.x - touch_start.x dy = touch_end.y - touch_start.y dist = math.sqrt(dx * dx + dy * dy) if dist >= SWIPE_MIN_DISTANCE: # Determine swipe direction if abs(dx) > abs(dy): if dx > 0: move_empty(3) # right else: move_empty(2) # left else: if dy > 0: move_empty(1) # down else: move_empty(0) # up begin_drawing() clear_background(RAYWHITE) draw_text(b"Swipe or drag to move empty tile", 10, 10, 18, DARKGRAY) draw_board() end_drawing() close_window() if __name__ == "__main__": main()