python实现图片切割及拼图游戏

摘要

本程序分为两个部分,都是由python编写而成的。一是图片切割程序,即传入图片的地址,图片的输入目录,程序会按指定的行列进行切割(采用3行3列,分成9张图片用于第二部分游戏的实现)。二是拼图游戏程序,游戏界面的正上方是一个拼图步数统计,界面左边是两个组件,上方是重新开始按钮,下方是拼图的完整原图作为拼图参考,界面右边是拼图游戏的主体,一个正方形再分成3行3列9个小正方块,用于存放8张切割好的图片,一个空白块,空白快用于实现四周小图片的移动。游戏成功会有弹窗提示游戏结束。

引言

背景

自从20世纪90年代初Python语言诞生至今, Python已经成为最受欢迎的程序设计语言之一。自从2004年以后,python的使用率呈线性增长。它被TIOBE编程语言排行榜评为2010年度语言。
拼图游戏是广受欢迎的一种智力游戏,它不仅可以帮助家长锻炼儿童的动手动脑能力,还可帮助扩展儿童的思维,加强还原能力,提高记忆力;同时也可促进家长与孩子之间的互动。

意义

本程序主要意义有扩展思维,加强还原能力,提高记忆力,也可以用来打发时间

实现功能

图片分割

输入指定的图片地址,输入输出的保存目录,输入行列数,程序将指定图片按照指定行列数进行切割,并保存到指定目录。

拼图游戏

第一个程序切割好的3*3=9张小图像块会在运行程序时载入(如果不用第一个程序分割图片,则需要自己准备9张指定大小的小图片按照指定名字放置在指定位置下)。

运行程序会有拼图游戏的界面。如 图1—拼图界面 所示。
右上角是拼图游戏的标题。

步数用于统计用户拼图的步数,每次图像移动后步数+1,点击重新开始可重置步数。

重新开始按钮可以重置游戏,包括重新打乱拼图和重置步数。

鼠标点击的图像块四周存在空白块,则移动图像块,并且步数+1,所有块移动到指定的位置则游戏结束,弹出“你成功了”弹窗。

图1-拼图界面:
在这里插入图片描述

系统结构

图片切割

图片裁剪基本原理如 图2—图片切割原理 所示:

图2—图片切割原理:
在这里插入图片描述

图片切割流程图如 图3—图片切割流程图 所示:

图3—图片切割流程图 :
在这里插入图片描述

拼图游戏

拼图显示原理如 图4—拼图显示流程图 所示:

图4—拼图显示流程图:
在这里插入图片描述
鼠标点击移动拼图块原理如 图5—拼图块移动原理 所示:

图5—拼图块移动原理:
在这里插入图片描述
拼图游戏实现流程图如 图6—游戏流程图 所示:

图6—游戏流程图 :

居中并且带尺寸的图片:
在这里插入图片描述
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

实现代码

图片分割

from PIL import Image 
def splitimage(sre,rownum,colnum,dstpath):
    img=Image.open(src)
    w,h=img.size #图片大小
    if rownum<=h and colnum<=w:
        print('original image info:%sx%s,%s,%s'%(w,h,
                                                 img.format,img.mode))
        print('开始处理图片切割,请稍候-')
        s=os.path.split(src)
        if dstpath=='':#没有输入路径
            dstpath=s[0]#使用源图片所在目录s[0]
        fn=s[1].split('.')#s[1]是源图片文件名
        basename=fn[0]#主文件名
        ext=fn[-1]#扩展名
        num=0
        rowheight = h//rownum
        colwidth = w//colnum 
        for r in range(rownum):
            for c in range(colnum):
                box=(c*colwidth,r*rowheight,(c+1)*colwidth,(r+1)*rowheight)
                img.crop(box).save(os.path.join(dstpath,basename+''+str(num)+
  • 10
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值