编写一个python代码,利用Gui的 tkinter库设计一个4*4的华容道游戏。将桌面上的一张图片 ,分为十六小块,去掉最右下角的一块,每个方块上显示1小块图片,共15个方块上有图片 ,通过数字华容道的规则,顺序无误后拼成完整图片,图片存储在桌面。
时间: 2024-05-10 19:14:07 浏览: 66
非常感谢您的问题!根据您的要求,我为您编写了一个Python代码,利用tkinter库实现了一个4x4的华容道游戏,将桌面上的一张图片分为十六个小块,去掉最右下角的一块,每个方块上显示1小块图片,共15个方块上有图片。以下是代码:
```python
import tkinter as tk
from PIL import ImageTk, Image
import random
class PuzzleGame:
def __init__(self, master):
self.master = master
self.master.title("Puzzle Game")
self.master.geometry("400x400")
self.image = Image.open("image.png")
self.image = self.image.resize((400, 400))
self.tiles = []
self.tiles_pos = []
self.gap_pos = 15
self.moves = 0
self.image_tiles()
self.shuffle_tiles()
self.display_tiles()
def image_tiles(self):
for i in range(0, 400, 100):
for j in range(0, 400, 100):
tile = ImageTk.PhotoImage(self.image.crop((j, i, j+100, i+100)))
self.tiles.append(tile)
def shuffle_tiles(self):
random.shuffle(self.tiles)
for i in range(15):
self.tiles_pos.append(i)
def display_tiles(self):
for i in range(15):
tile_label = tk.Label(self.master, image=self.tiles[i])
tile_label.grid(row=i//4, column=i%4)
tile_label.bind("<Button-1>", self.move_tile)
self.gap_label = tk.Label(self.master, bg="white")
self.gap_label.grid(row=3, column=3)
def move_tile(self, event):
tile_index = self.tiles.index(event.widget.cget("image"))
tile_pos = self.tiles_pos[tile_index]
gap_row, gap_col = divmod(self.gap_pos, 4)
tile_row, tile_col = divmod(tile_pos, 4)
if gap_row == tile_row and abs(gap_col - tile_col) == 1 or \
gap_col == tile_col and abs(gap_row - tile_row) == 1:
self.tiles_pos[self.tiles_pos.index(self.gap_pos)] = tile_pos
self.tiles_pos[tile_index] = self.gap_pos
self.gap_pos = tile_pos
self.gap_label.grid(row=gap_row, column=gap_col)
event.widget.grid(row=tile_row, column=tile_col)
self.moves += 1
self.check_win()
def check_win(self):
for i in range(15):
if self.tiles_pos[i] != i:
return
tk.messagebox.showinfo("Congratulations!", "You won the game in " + str(self.moves) + " moves!")
self.master.destroy()
if __name__ == "__main__":
root = tk.Tk()
game = PuzzleGame(root)
root.mainloop()
```
请将代码保存在名为`puzzle_game.py`的文件中,并将桌面上的图片命名为`image.png`,然后在终端中运行以下命令来运行游戏:
```bash
python puzzle_game.py
```
希望这个代码能够帮到你,如果你有任何问题,请随时问我!
阅读全文