游戏介绍: 拼图游戏将一幅图片分割咸若干拼块并将它们随机打乱顺序,当将所有拼块都放回原位置时,就完成了拼图(游戏结束)。本人物拼图游戏为3行3列,拼块以随机顺序排列,玩家用鼠标单击空白块四周的交换它们位置,直到所有拼块都回到原位置。拼图游戏运行界面

程序设计思路 :

游戏程序首先将图片分割成相应3行3列的拼块,并按顺序编号。动态地生成一个\为3x3的列表board,用于存放数字0一8,其中,每个数字代表一个拼块,8号拼块不显示。

游戏开始时,随机打乱这个数组board,如board[0l[0]是5号拼块,则在左上角显示编号是5的拼块。根据玩家用鼠标单击的拼块和空白块所在位置,来交换该board数组对应的元素,最后通过元素排列顺序来判断是否已经完成游戏。

游戏逻辑的实现 :

1.定义常量及加载图片

2.图像块(拼块)类

3 . 初始化游戏

4 . 绘制游戏界面的各个元素

5 . 鼠标事件

6.判断输赢

7.重置游戏

8.“重新开始”按钮的单击事件

一. 定义常量及加载图片

fori inrange(9):

filename="ka"+str(i)+".png"Pics.append(PhotoImage(file=filename))

二.  图像块(拼块)类

classSquare:

def__init__(self,orderID):

self.orderID=orderID

defdraw(self,canvas,board_pos):

img=Pics[self.orderID]

canvas.create_image(board_pos,image=img)

三.  初始化游戏

board=[[0,1,2],[3,4,5],[6,7,8]]

definit_board():

L=list(range(8))

L.append(None)

random.shuffle(L)

fori inrange(ROWS):

forj inrange(COLS):

idx=i*ROWS+j

orderID=L[idx]

iforderID is None:

board[i][j]=Noneelse:

board[i][j]=Square(orderID)

四. 绘制游戏界面的各个元素

defdrawBoard(canvas):

canvas.create_polygon((0,0,WIDTH,0,WIDTH,HEIGHT,0,HEIGHT),width=1,outline="Black",fill="green")

fori inrange(ROWS):

forj inrange(COLS):

ifboard[i][j] is not None:

board[i][j].draw(canvas,(IMAGE_WIDTH*(j+0.5),IMAGE_HEIGHT*(i+0.5)))

五.  鼠标事件

defmouseclick(pos):

globalsteps

r=int(pos.y//IMAGE_HEIGHT)

c=int(pos.x//IMAGE_WIDTH)

print(r,c)

ifr<3andc<3:

ifboard[r][c] is None:

returnelse:

current_square=board[r][c]

ifr-1>=0andboard[r-1][c] is None:

board[r][c]=Noneboard[r-1][c]=current_square

steps+=1elifc+1<=2andboard[r][c+1] is None:

board[r][c]=Noneboard[r][c+1]=current_square

steps+=1elifr+1<=2andboard[r+1][c] is None:

board[r][c]=Noneboard[r+1][c]=current_square

steps+=1elifc-1>=0andboard[r][c-1] is None:

board[r][c]=Noneboard[r][c-1]=current_square

steps+=1Label1["text"]=str(steps)

cv.delete("all")

drawBoard(cv)

六  判断输赢

defwin():

fori inrange(ROWS):

forj inrange(COLS):

ifboard[i][j] is not None andboard[i][j].orderID!=i*ROWS+j:

return False

七 . 重置游戏

defcallBack2():

print("重新开始")

play_game()

cv.delete("all")

drawBoard(cv)

八 . 重新开始”按钮的单击事件

cv=Canvas(root,bg="white",width=WIDTH,height=HEIGHT)

b1=Button(root,text="重新开始",command=callBack2,width=20)

Label1=Label(root,text="0",fg="red",width=20)

Label1.pack()

cv.bind("",mouseclick)

参考代码:

fromtkinter import*

fromtkinter.messagebox import*

importrandom

root=Tk("拼图游戏")

root.title("拼图")

Pics=[]

fori inrange(9):

filename="ka"+str(i)+".png"Pics.append(PhotoImage(file=filename))

WIDTH=720HEIGHT=720

IMAGE_WIDTH=WIDTH//3IMAGE_HEIGHT=HEIGHT//3

ROWS=3COLS=3

steps=0

board=[[0,1,2],[3,4,5],[6,7,8]]

classSquare:

def__init__(self,orderID):

self.orderID=orderID

defdraw(self,canvas,board_pos):

img=Pics[self.orderID]

canvas.create_image(board_pos,image=img)

definit_board():

L=list(range(8))

L.append(None)

random.shuffle(L)

fori inrange(ROWS):

forj inrange(COLS):

idx=i*ROWS+j

orderID=L[idx]

iforderID is None:

board[i][j]=Noneelse:

board[i][j]=Square(orderID)

defplay_game():

globalsteps

steps=0init_board()

defdrawBoard(canvas):

canvas.create_polygon((0,0,WIDTH,0,WIDTH,HEIGHT,0,HEIGHT),width=1,outline="Black",fill="green")

fori inrange(ROWS):

forj inrange(COLS):

ifboard[i][j] is not None:

board[i][j].draw(canvas,(IMAGE_WIDTH*(j+0.5),IMAGE_HEIGHT*(i+0.5)))

defmouseclick(pos):

globalsteps

r=int(pos.y//IMAGE_HEIGHT)

c=int(pos.x//IMAGE_WIDTH)

print(r,c)

ifr<3andc<3:

ifboard[r][c] is None:

returnelse:

current_square=board[r][c]

ifr-1>=0andboard[r-1][c] is None:

board[r][c]=Noneboard[r-1][c]=current_square

steps+=1elifc+1<=2andboard[r][c+1] is None:

board[r][c]=Noneboard[r][c+1]=current_square

steps+=1elifr+1<=2andboard[r+1][c] is None:

board[r][c]=Noneboard[r+1][c]=current_square

steps+=1elifc-1>=0andboard[r][c-1] is None:

board[r][c]=Noneboard[r][c-1]=current_square

steps+=1Label1["text"]=str(steps)

cv.delete("all")

drawBoard(cv)

ifwin():

showinfo(title="恭喜",message="你成功了!")

defwin():

fori inrange(ROWS):

forj inrange(COLS):

ifboard[i][j] is not None andboard[i][j].orderID!=i*ROWS+j:

return Falsereturn True

defcallBack2():

print("重新开始")

play_game()

cv.delete("all")

drawBoard(cv)

cv=Canvas(root,bg="white",width=WIDTH,height=HEIGHT)

b1=Button(root,text="重新开始",command=callBack2,width=20)

Label1=Label(root,text="0",fg="red",width=20)

Label1.pack()

cv.bind("",mouseclick)

cv.pack()

b1.pack()

play_game()

drawBoard(cv)

root.mainloop()

运行界面:

python制作图片拼图游戏下载_Python图像处理——人物拼图游戏相关推荐

  1. python自动拼图_Python图像处理——人物拼图游戏

    开发工具:pycharm 游戏介绍: 拼图游戏将一幅图片分割咸若干拼块并将它们随机打乱顺序,当将所有拼块都放回原位置时,就完成了拼图(游戏结束).本人物拼图游戏为3行3列,拼块以随机顺序排列,玩家用鼠 ...

  2. python去除图片上的文字_Python图像处理之识别图像中的文字(实例讲解)

    ①安装PIL:pip install Pillow(之前的博客中有写过) ②安装pytesser3:pip install pytesser3 ③安装pytesseract:pip install p ...

  3. python编的俄罗斯方块游戏下载_python写的俄罗斯方块游戏

    python写的俄罗斯方块游戏 功能包括:记录所花费时间;消去的总行数;总分;排行榜,最高记录查看等. 排行榜中包含一系列的统计功能,如单位时间消去的行数,单位时间得分等. from Tkinter ...

  4. python写五子棋游戏下载_python实现简单五子棋游戏

    本文实例为大家分享了python实现简单五子棋游戏的具体代码,供大家参考,具体内容如下 from graphics import * from math import * import numpy a ...

  5. 用python实现五子棋游戏下载_python实现五子棋小游戏

    import numpy as np import pygame import sys import traceback import copy from pygame.locals import * ...

  6. python图片转pdf文件_用python 制作图片转pdf工具

    这篇文章主要介绍了用python 制作图片转pdf工具的思路及代码,非常详细,有需要的小伙伴参考下 最近因为想要看漫画,无奈下载的漫画是jpg的格式,网上的转换器还没一个好用的,于是乎就打算用pyth ...

  7. python写图片爬取软件_python制作微博图片爬取工具

    有小半个月没有发博客了,因为一直在研究python的GUI,买了一本书学习了一些基础,用我所学做了我的第一款GUI--微博图片爬取工具.本软件源代码已经放在了博客中,另外软件已经打包好上传到网盘中以供 ...

  8. python图片修复软件下载_python实现的jpg格式图片修复代码

    最近为客户修复损坏的jpg写的,效果还可以,但不保证适用任何情况. 如果你有损坏照片,不妨试一试,如果可以使用给我留个言哦. 复制代码 代码如下: # -*- coding: utf8 -*- # ! ...

  9. python图片修复软件下载_python 实现图片修复(可用于去水印)

    在现实的生活中,我们可能会遇到一些美好的或是珍贵的图片被噪声干扰,比如旧照片的折痕,比如镜头上的灰尘或污渍,更或者是某些我们想为我所用但有讨厌水印,那么有没有一种办法可以消除这些噪声呢? 答案是肯定的 ...

最新文章

  1. 五年程序员败在阿里三面,还是Java底层原理的问题啊!
  2. 【PHPWord】图片
  3. Java 反射 使用总结
  4. Python学习笔记之Windows下通过pip安装Django详细介绍
  5. leaving target processor paused”错误怎么解决
  6. Part Six 地理定位API
  7. SLAM学习笔记-------------(六)非线性优化
  8. cmos逻辑门传输延迟时间_组合逻辑电路详解、实现及其应用
  9. win10一共几个版本,有什么区别?win10版本区别
  10. 线性方法求欧拉数-POJ2478
  11. DirectShow Filter的开发实践
  12. 输入年月判断这个月有多少天
  13. Kettle读取按行分割的文件
  14. 网络最大流模板(标号法)
  15. OSChina 元宵节乱弹 ——青龙偃月刀都实名了
  16. 【光学】基于matlab多光束干涉光场分布仿真【含Matlab源码 2072期】
  17. 日本计算机博士回国就业情况,海归就业创业调查 海归博士就业真实现状
  18. HTML5获取图片原图尺寸
  19. 中国天气城市代码编号
  20. 王者战力查询,安卓苹果都行

热门文章

  1. git 常用操作集锦
  2. PLC电路的稳态特性matlab,基于matlab的线性电路正弦稳态特性分析.doc
  3. linux sudo yum命令详解,每天一个Linux命令之sudo命令详解
  4. 王争数据结构与算法之美开篇问题整理
  5. Elasticsearch:导入本地数据和使用Kibana管理数据(楼主亲测,真实有效)
  6. SDNUOJ 1213.金额的中文大写
  7. 图片右轮播第一张和最后一张无缝衔接
  8. 小鸡拿着蚯蚓闯关的java游戏,饥饿蚯蚓大闯关游戏下载
  9. 双11海尔冰箱·冷柜:全网销额再创纪录居行业第一
  10. Mina中的stake delegation