连连看
来源:互联网 发布:js判断数字为整数 编辑:程序博客网 时间:2024/05/01 22:11
历时三个星期,利用下班的时间,终于完成了连连看这个项目,总体来说不是很困难。
开发环境:
操作系统:windows xp
使用的库:Qt Creator2009.4
实现的功能有:
1、 图片数据的随机初始化
2、 图片数据合并到一个二进制文件
3、 两个图片的消去
4、 手动进行提示
5、 自动进行重排
6、 手动进行重排
7、 背景图片变化
8、 图片消去时进行画线
未实现的功能
1、背景音乐
2、深搜改为广搜
总体来说不算不错了。
下面是我的开发日记:
开发日记:
2009.11.15
进入连连看的开发,只是写了main引导和主界面的基本
2009.11.16
加入了中文转换
2009.11.17
功能实现界面实现基本功能,使其能够运行
2009.11.18
增加游戏时间控制
2009.11.19
数据初始化,图片的存储格式,简化图片处理方法,
以文件方式加载整个图像文件
2009.11.20
解决read无法读取数据,未解决
2009.11.21(星期六)
找到无法读取数据原因
需要读取的数据是放到releas下的,如果是以debug模式读取数据那么就要
把要读的数据放到debug下,呵呵,没有在window下做过,还真是晕到家了
怪不得以前读文件怎么都不成功呢
得到启示一:
赋值时是数据呢,还是指针。
imagecache::load_img中的*pBmp = *pImage;
经过上面两步现在正确读取出了图片,下面还要研究如何把多个图片放
入到一个二进制文件中
#########################################################
智能图片载入:
给出了三种固定的模式:简单、一般、困难,这三种模式的大小也
是固定了。要做的就是以智能的形式初始化图片存放到的数组位置。
1、是从图片库中选取多少种图片,每种图片的数量设置为相同,但最
后一种可以不同,因为要把整个矩形填满每种图片都相等是不可能 的。
2、要初始化的数据:
a、图片种类的个数
b、游戏时间
c、文字显示游戏模式
c、文字显示游戏提示次数
d、游戏重新排列初始化次数
e、现在属于某种模式的第几关
总结:
测试完成了图像数据的初始化。但是有太多相同的图片相临,图像随机
初始化的地方有待改进。
2009.11.22(星期天)
加入鼠标响应事件
给出一个数num,如何返回正确的x坐标与y坐标呢?x = (num)%row; y = (num)/row
在这里要明确具体的x和y具体代表的是什么
x如果是代表多少行呢,那么它代表的是height
y如果是代表多少列呢,那么它代表的是width
这里x和y是用来表示数组中的元素,这是它的功用,不能搞错。
图片3和32相同(已经改正)
在《c++ primer》里面没有讲到结构体?《c++ primer》值得拥有。
结构体指针没有分配内存空间,导致出现内存错误。如果是指针最好是立即
分配内存空间lastlogicarray = (BaseLogicarray *)malloc(sizeof(BaseLogicarray));
(《c++ primer》里面没讲?)
重新修改initData();修改区间由[0,max)为[1, max];
修改getX,getY函数
在数据初始化的时候,如果要把此数据放入到此位置,如果此位置非空
那么就去看下一个位置是否不为空,这样就避免了再一次的随机,否则
会有很高的延时(大约三秒钟,不可承受),为避免出现太多在一块的
还需要更好的初始化方法?由于图片过多,也可能出现这种情况不可避免
在initData()的第二部分加入了一条语句,运行起来不流畅,不过打印的
语句也还是很多啊?!
如何让产生的数据更为随机?现在的算法不是很好。
2009.11.23(星期一)
为了改变随机性不是很好,改变长宽高由原来的10:6,12:8,14:10
变为12:7,14:8,16:9但是每种图片的个数依然没有变为4个.初始化的
效果依然不是很好。初始化的随机可能依然不好,以后再做调整。
QImage objects can also be streamed and compared.
2009.11.24(星期二)
编写深度优先搜索实现路径搜索,进行测试去修改里面的错误
1、当两次点击为同一位置的判断没有
出现问题:
鼠标点击判断有问题,明天再做修改,并加入九关模式
2009.11.25(星期三)
1、整体阅读整个代码,查找错误。所有错误已经纠正
2、加入九关模式。
还要做的工作有:重新初始化整个布局
可以提示的次数
界面美化工作
2009.11.26(星期四)
测试九关模式,修改其中的错误,可以正确运行
2009.11.29(星期天)
加入需要重新初始化判断,提示
两个消去的图片之间画线
多变的背景颜色是因为还有一个图片,这个背景图片以后添加
现在要完成的就是那三个功能的实现
2009.11.30(星期一)
添加画线,并进行测试。
并不是自己喜欢码这些东西,主要是也没有什么东西可做。
没有电视,没有网络,没有游戏,生活之无趣
2009.12.1(星期二)
修改重新初始化之后原先被选中的依然被选中的问题。
修改画线后开始和结束的两个线段画到中点的问题(令人纠结)。
如何表示需要提示的图片呢?
学习得到的知识点:
QTimer::singleShot()是只执行一次的。
在平时使用的时候update是比repaint()好的,现在进行全面的修改进行测试
2009.12.4(星期五)
在添加最后一个提示功能的时候,出现了一个bug,始终没有搞懂qt creater是怎么调试的,
只有今天把公司的小笔记本带回来,用虚拟机调试一下才找到错误。在递归的时候
两个进行图片是否相同的比较时指针没有初始化的原因。
在windows下读取二进制文件时必须要加入O_BINARY,而在linux下时则无需加入,
这主要是不同的系统对文件的读写控制也不相同。
在tipmeplease这个函数中,虽然循环的次数是很少的但是还要进行深搜,所以时间的
代价也是很大的。要想办法解决这个问题。
当正确判断后速度是很快的,第一的遇到的就返回,这样就可以花很少的时间了。
时刻谨记数组坐标和像素位置之间的转换
2009.12.5(星期六)
添加提示为两个图片进行闪烁,也许还有更好的方法,以后再进行考虑
进行代码黑盒测试
bug: 1、重新初始化后只消去一个
2、在进行提示的时候出现路径打印
错误原因:在两个相连的图片消去的时候没有执行语句
QTimer::singleShot(100, this, SLOT(dontdrawline()));
3、在mousePressEvent里面,添加了语句if (!stillhavetwo()){reinitpic();}
出现了错误一直只画提示的线,其实并不想画提示的线。这是因为在
cantogetherdistory中把存储画线的数组coordiarray更新的原因。
去掉判断是否需要画线,在要画线的地方直接画线。<-这种方法不行,
因为要用到线的消去,必需要用到这种方法。其实没有直接画线的原因
2009.12.6(星期天)
是使用了update,不进行立即画线。因此这里要使用repaint。
update是有改变的时候再重新画,否则不会去画,所以有滞后,后节省资源
4、在判断有没有还可消去的图片的时候出现错误,即使有也判断不出来。
怎么会判断错误呢?
在canstillhavetwo的四重for 循环出现了一个错误,最里面的n的判断要根据
是否m与i在同一行,如果不在同一行那么n要从一开始判断
5、提示后,点击其中一个的时候消去了两个,这种现象只出现了一次,还
有待进一步验证。
改变使用相对坐标,相对于图片的大小,不使用绝对坐标,在以后可以较容易
移植到分辨率小的开发板上,对一些坐标进行预定义。所有的坐标均不定死
由于加入了太多的背景图片,导致了图片文件达到了20多M,在初始化的时候
要载入所有的图片资源,导致启动过慢,有点无法忍受
加入时间控制函数,有规定时间,和消去时的奖励时间,测试正确但是其合理
性有待进一步考虑。
依然有会出现提示下一对的出现,需要再测试去掉
项目算是基本完成了,可发布
如果有想玩下的请发邮件给我:lh661115@163.com
- 连连看
- 连连看.
- 连连看
- 连连看
- 连连看
- 连连看
- 连连看
- 连连看
- 连连看
- 连连看
- 连连看
- 连连看
- 连连看
- 连连看
- 连连看
- 连连看
- 连连看
- 连连看
- 用ioctl设置了网卡的ip地址和掩码后,如何激活?
- Java基础练习题 考试题 笔试题 面试题 (2)
- 为什么大学生这么难入IT
- 二维数组的动态分配及参数传递
- ActionScript3.0 Socket编程
- 连连看
- Java基础练习题 考试题 笔试题 面试题 (3)
- 厚颜无耻
- 07-Dec-2009
- Java基础练习题 考试题 笔试题 面试题 (4)
- Java基础练习题 考试题 笔试题 面试题 (5)
- 跨页选择项
- Java Mail and Spring Mail
- symbian 开发常见错误代码及原因总结