本拼图游戏包含调节三档的难度, 除了默认的图片外,还能够选取相册中的图片或者直接拍下图片进行游戏等。
此文为博主原创技术总结, 转载注明出处:http://blog.csdn.net/luckydog2479/article/details/17713477
首先说一下使用的版本
Xcode版本:Version 5.0.2 (5A3005)
iPhone版本:iPhone4S 7.0.4(11B554a)
本文主要涉及内容为1.图片的分解,将一张图片按拼图需求分解为N*M个部分
2.图片文件的压缩,这里的压缩包含文件大小及像素等,由于设备的先进性,拍摄的照片文件过大,直接使用会导致内存不足,所以使用压缩比为1:5,并且将像素缩到320*(480-64)之内
3.排序,此处对拼图排序,在过程中规避了无解的情况,在下文中会详细提到
以下开始正文内容
1.图片分解部分,使用
CGImageRef CGImageCreateWithImageInRect(CGImageRef image, CGRect rect)
image为总图片,rect为分解出的图片像素,返回类型为 CGImageRef, 需要使用
+ (UIImage *)imageWithCGImage:(CGImageRef)cgImage;
转化为UIImage
2.图片文件压缩,在保存图片文件时,如果保存成JPG文件可以使用
NSData *UIImageJPEGRepresentation(UIImage *image,CGFloat compressionQuality);
compressionQuality 为图片压缩比例,为1的时候压缩最小,为0的时候压缩最大
3.拼图排序
关于排序这部分,还需要感谢 邪魔统夜 给出的灵感,逆推答案的确是一个办法,不会存在无解的情况,并且可以获取一条正确解(并不一定是最优解),在这里博主并没有使用逆推这个方法,而是使用逆序数的奇偶性来判断的
博主在之前对于拼图的认识并不是很丰富,很不擅长,并不知道拼图原来存在无解的情况
例如 2 * 2 的拼图,如下的情况,0为空白位的话,不能移动成第一行0,1,第二行2,3
1 | 0 |
3 | 2 |
参照http://blog.csdn.net/tailzhou/article/details/3002442
获取方法,只要将0位即空白位移到左上角,然后将其转为数列,然后判断奇偶性即可得知是否有解
拼图源码下载地址: http://download.csdn.net/detail/luckydog2479/6792501