import tkinter as tk
import random
from tkinter import messagebox

# 迷宫参数
ROWS = 15
COLS = 15
CELL_SIZE = 40

class MazeGame:
    def __init__(self, root):
        self.root = root
        self.root.title("迷宫游戏")

        # 画布
        self.canvas = tk.Canvas(
            root,
            width=COLS * CELL_SIZE,
            height=ROWS * CELL_SIZE
        )
        self.canvas.pack()

        # 初始化迷宫
        self.maze = self.generate_maze()
        self.player_pos = [1, 1]      # 起点
        self.end_pos = [ROWS - 2, COLS - 2]

        self.draw_maze()
        self.draw_player()

        # 键盘事件
        self.root.bind("<Up>", lambda e: self.move(-1, 0))
        self.root.bind("<Down>", lambda e: self.move(1, 0))
        self.root.bind("<Left>", lambda e: self.move(0, -1))
        self.root.bind("<Right>", lambda e: self.move(0, 1))

    # 随机生成迷宫（简单版）
    def generate_maze(self):
        maze = [[1 for _ in range(COLS)] for _ in range(ROWS)]
        for i in range(1, ROWS - 1):
            for j in range(1, COLS - 1):
                if random.random() > 0.25:
                    maze[i][j] = 0
        maze[1][1] = 0
        maze[ROWS - 2][COLS - 2] = 0
        return maze

    # 绘制迷宫
    def draw_maze(self):
        self.canvas.delete("all")
        for i in range(ROWS):
            for j in range(COLS):
                x1 = j * CELL_SIZE
                y1 = i * CELL_SIZE
                x2 = x1 + CELL_SIZE
                y2 = y1 + CELL_SIZE

                color = "black" if self.maze[i][j] == 1 else "white"
                self.canvas.create_rectangle(x1, y1, x2, y2, fill=color)

        # 起点和终点
        self.draw_cell(self.end_pos, "red")

    # 绘制单个格子
    def draw_cell(self, pos, color):
        i, j = pos
        x1 = j * CELL_SIZE
        y1 = i * CELL_SIZE
        x2 = x1 + CELL_SIZE
        y2 = y1 + CELL_SIZE
        self.canvas.create_rectangle(x1, y1, x2, y2, fill=color)

    # 绘制玩家
    def draw_player(self):
        self.draw_cell(self.player_pos, "blue")

    # 玩家移动
    def move(self, dx, dy):
        new_x = self.player_pos[0] + dx
        new_y = self.player_pos[1] + dy

        if 0 <= new_x < ROWS and 0 <= new_y < COLS:
            if self.maze[new_x][new_y] == 0:
                self.player_pos = [new_x, new_y]
                self.draw_maze()
                self.draw_player()

                if self.player_pos == self.end_pos:
                    messagebox.showinfo("胜利", "恭喜你走出迷宫！")

if __name__ == "__main__":
    root = tk.Tk()
    game = MazeGame(root)
    root.mainloop()