连连看

来源:互联网 发布: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

 

 

原创粉丝点击