Untitled
unknown
plain_text
a year ago
3.3 kB
13
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