Untitled
unknown
plain_text
5 months ago
3.3 kB
9
Indexable
import pygame import random import time # Initialize pygame pygame.init() # Set up screen dimensions and colors WIDTH, HEIGHT = 400, 400 WHITE = (255, 255, 255) BLACK = (0, 0, 0) GRAY = (200, 200, 200) GREEN = (0, 255, 0) FONT = pygame.font.SysFont('Arial', 30) # Define grid properties GRID_SIZE = 4 # 4x4 grid (15-puzzle) TILE_SIZE = WIDTH // GRID_SIZE FPS = 30 # Frames per second # Create the screen object screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Sliding Puzzle Game") # Generate the initial puzzle grid def generate_puzzle(): numbers = list(range(1, GRID_SIZE**2)) numbers.append(None) # Empty space random.shuffle(numbers) return [numbers[i:i + GRID_SIZE] for i in range(0, len(numbers), GRID_SIZE)] # Draw the grid and tiles def draw_grid(grid): screen.fill(WHITE) for y in range(GRID_SIZE): for x in range(GRID_SIZE): number = grid[y][x] rect = pygame.Rect(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE) pygame.draw.rect(screen, GRAY, rect) pygame.draw.rect(screen, BLACK, rect, 3) if number: text = FONT.render(str(number), True, BLACK) text_rect = text.get_rect(center=rect.center) screen.blit(text, text_rect) else: pygame.draw.rect(screen, WHITE, rect) # Find the empty space (None) def find_empty_space(grid): for y in range(GRID_SIZE): for x in range(GRID_SIZE): if grid[y][x] is None: return x, y return None # Check if the puzzle is solved def is_solved(grid): num = 1 for y in range(GRID_SIZE): for x in range(GRID_SIZE): if y == GRID_SIZE - 1 and x == GRID_SIZE - 1: if grid[y][x] is not None: return False elif grid[y][x] != num: return False num += 1 return True # Handle tile movement (swap with empty space) def move_tile(grid, x, y): empty_x, empty_y = find_empty_space(grid) # Check if the move is valid (tiles are adjacent) if (abs(x - empty_x) == 1 and y == empty_y) or (abs(y - empty_y) == 1 and x == empty_x): # Swap the tile with the empty space grid[empty_y][empty_x], grid[y][x] = grid[y][x], grid[empty_y][empty_x] # Main game loop def main(): grid = generate_puzzle() clock = pygame.time.Clock() running = True start_time = time.time() while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.MOUSEBUTTONDOWN: mouse_x, mouse_y = pygame.mouse.get_pos() grid_x = mouse_x // TILE_SIZE grid_y = mouse_y // TILE_SIZE move_tile(grid, grid_x, grid_y) draw_grid(grid) # Check if the puzzle is solved if is_solved(grid): elapsed_time = time.time() - start_time solved_text = FONT.render(f"Solved! Time: {int(elapsed_time)}s", True, GREEN) screen.blit(solved_text, (10, HEIGHT - 40)) pygame.display.flip() clock.tick(FPS) pygame.quit() if __name__ == "__main__": main()
Editor is loading...
Leave a Comment