前言
利用python,通过将一幅图片分割成若干拼块并将它们顺序随机打乱来编写拼图小游戏。
一、拼图游戏介绍
拼图游戏是将一幅图片分割成若干拼块,并将它们顺序随机打乱,当所有拼块都放回原位置时就完成了拼图(即游戏结束)。
游戏设计拼图为3*3,拼块随机打乱,玩家通过鼠标单击空白块四周来交换它们的位置,直到所有的拼块回到原位置。游戏运行界面如下图所示。
图1 游戏运行界面
二、游戏设计思路
首先将图片分割成3*3的拼块,并且按照顺序编号,动态生成一个大小为3*3的列表board,存放数字0-8,每个数字代表一个拼块,其中8号拼块不显示。
图2 拼块编号打乱示意图
游戏开始时,随机打乱数组board,例如board[0][0]是2号拼块,则在左上角显示编号是2的拼块。根据玩家用鼠标单击拼块与空白拼块的位置来交换board数组对应的元素,最后通过判断元素的排列顺序来判断是否已完成游戏。
三、程序设计步骤
3.1 Python处理图片切割
使用PIL库Image模块中的crop()方法可以从一幅图像中裁剪指定区域,该区域使用四元组来指定,四元组的坐标是(左,上,右,下)。在PIL中指定坐标系的左上角坐标为(0,0)。具体实现过程如下:
from PIL import Image
img=Image.open(r’C:\......\*.jpg’)
box=(100,100,400,400)
region=img.crop(box)
region.save(‘*.jpg’) #保存裁剪后的图片
游戏需要将图片切割成3*3图片块,在上面基础上指定不同区域进行裁剪、保存。为了更加通用,编写splitimage(src,rownum,colnum,dstpath)函数,实现将指定的src图片文件分割成rownum*colnum数量的小图片块。具体操作如下:
import os
from PIL import Image
#定义图片切割函数
def splitimage(src,rownum,colnum,dstpath):
img=Image.open(src)
w,h=img.size
if rownum<=h and colnum<=w:
print("原始图片信息:%sx%s,%s,%s"% (w,h,img.format,img.mode))
print("开始处理图片切割,请稍后......")
s=os.path.split(src)#Split a pathname.
if dstpath=="": #没有输入路径
dstpath=s[0] #使用源