QT版连连看制作的实验报告

一. 游戏概述
 
  1.1游戏简介
  游戏连连看顾名思义就是出相关联的东西,这个连连看在网上基本是用在小游戏中,就是出相同的两样东西,在一定的规则之内可以做为相关联处理。连连看的发展经历了从桌面游戏、在线游戏、社交游戏三个过程。
  游戏连连看是源自台湾的桌面小游戏,自从流入大陆以来风靡一时,也吸引众多程序员开发出多种版本的连连看。这其中,顾方编写的阿达连连看以其精良的制作广受好评,这也成为顾方阿达系列软件的核心产品。并于2004年,取得了国家版权局的计算机软件著作权登记证书。
  随着Flash应用的流行,网上出现了多种在线Flash版本连连看。如水晶连连看果蔬连连看等,流行的水晶连连看以华丽界面吸引了一大批的女性玩家。
  2008年,随着社交网络的普及和开放平台的兴起,连连看被引入了社交网络。连连看与个人空间相结合,被快速的传播,成为一款热门的社交游戏,其中以开发者JoneveyManyou开放平台上推出的宠物连连看最为流行
   
1.2游戏功能
本次设计连连看主要是在原连连看对战的基础上设计挑战模式,具体的功能如下所述:
游戏运行界面简单美观,操作简单,运行稳定;
能够根据不同的等级模式播放不同的游戏背景音乐,包括操作方向键、消行时的声音,音量由玩家操作控制;
设计不同的游戏难度,当玩家达到一定的积分,可以进入相关难度的等级;
玩家可直接操作界面上的相关按钮来控制游戏的开始、暂停、设置、退出等功能。
二. 需求分析
2.1开发的需求
    2.1.1 C++
    C/C++的哲学就不一样了,同一份程序代码,只要在该平台重新Compile成该平台的执行档,就能在该平台执行,若文字模式下的程序,的确可以跨平台,程序完全不需修改,但GUI盛行以后,由于各GUILibrary都不一样且没有标准,所以GUI程序并没办法跨平台Compile,因为各平台都有专属的 Library。但是C/C++优势就是执行速度快,若能解决GUI Library的问题,则跨平台即可解决。
除了GUI Library需要统一外,还得看该Library设计的好不好才行,Linux GUI我没写过就不说了,若在Windows平台,BorlandC++ Builder使用Delphi电动刻字笔VCL LibraryMicrosoftVisual C++可以用MFC.NET Framework,首先来看BorlandC++ Builder,它使用标准的ANSI C++语言开发,利用VCL写出来的程序也算蛮漂亮的,执行速度很快,比较麻烦的是C++ Builder当初为了缩短上市时间,并没有设计自己的Library,而是藉用DelphiLibrary,导致C++ BuilderCompile时,是先用DelphiCompilerVCL compileobject file后,再用C++ Builder将你写的C++程序compileobject file,最后再用Linker将所有的o
bject file link起来,由于这都是IDE在做,对程序设计师似乎影响不大,但VCL由于是DelphiLibrary,所以若想深入研究预分散母胶粒VCLsource code时,则必须学DelphiPascal才行,否则看不懂VCL source code,这也是很多人对C++ Builder却步的原因。
再来看MicrosoftVisual C++MFC用的是完整的ANSI C++语言,所以语言部分不是问题,但若你看过用MFC写的程序,你一定会惊讶为什么这么复杂,程序代码非常冗长不好看,且MFC是有名的难学,若 Visual C++搭配.NET Framrwork,则无法使用ANSI C++,得用其.NET平台版本的C++/CLI,相信这点很多人就有意见了,不过.NET Framework由于设计的不错,所以写出来的程序相当精简漂亮,感觉和C++ Builder差不多,不过无论是C++ BuilderVisual C++开发的GUI,所开发出来的程序都无法跨平台,当然也无法跨平台Compile
 
2.1.2 QT
1QT的介绍
    Qt 是一个多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt 是完全面向对象的很容易扩展,并且允许真正地组件编程。
自从 1996 年早些时候,Qt 进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。可信的密封黏胶条Qt 也是流行的Linux 桌面环境KDE 的基础,KDE 是所有主要的Linux 发行版的一个标准组件。Qt 的特点有:可移植性、易用性、执行速度快等特点。
2QT的优势
XML 支持。
大量的开发文档
支持 2D/3D 图形渲染,支持 OpenGL
优良的跨平台特性,Qt支持下列操作系统: Microsoft Windows 95/98 Microsoft Windows NT Linux Solaris SunOS HP-UX Digital UNIX (OSF/1 Tru64) Irix FreeBSD BSD/OS SCO AIX OS390QNX 等等。
面向对象,Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件 之间的协同工作变得十分简单。
丰富的 APIQt包括多达250个以上的 C++ 类,还提供基于模板的 collectionsserializationfile I/O devicedirectory management date/time 类。甚至还包括正则表达式的处理 功能。
高分子布鞋2.2 游戏功能需求
  本次设计是在传统的连连看上设计实现对战的连连看,玩家通过达到一定的积分来获得继续闯关的机会,还有机会开启神秘的应藏关,以此来增加游戏的可玩性。
游戏的基本规则:程序随机产生任意成对的图片,当定点击开始游戏时,电脑根据时间参数随机生成固定的成对图片,游戏再次开始,玩家可通过鼠标上的左键,自由的点两张图片。如果点击两次时,两张图片相同,且满足程序的算法则这两张图片可消去。消去图片后,游戏可给玩家加分,若在规定的时间内,玩家没有消掉所有的图片则游戏失败。由于
是闯关模式,达到一定分数的玩家可以继续挑战新的游戏,游戏的难度会相应增加,并且还增加了新玩法。具体的游戏功能如下:
游戏界面需求:设计良好的游戏界面可以让玩家充分感受到游戏带来的娱乐性,游戏的背景取自网上中的图片,体现了游戏的挑战性。 
鼠标处理事件需求:通过点击主窗体中相应的按钮,可以实现游戏的开始、暂停、结束,通过点击选项设置中相应的按钮,可设置声音的大小及方向键↓的功能。显示需求:当两次点击的图片相同且满足算法可以消去,当达到一定分数的时候,游戏会进入下一关,并有障碍了。
游戏闯关设计需求:随着游戏的难度不同,玩法会发生改变,需要在游戏中设置障碍,蒙手游戏。如果玩家能到达并完成最后一关,则玩家挑战成功,游戏结束。
最后游戏效果如下:
三. 游戏总体设计
  3.1 总体设计
整体设计思想:进入游戏后,有三个按钮可供玩家选择:开始游戏,游戏设置,退出游戏,
在进入相应子菜单后也可返回到主菜单,每个菜单的具体设计将在后面介绍,以下是总体的游戏流程图。
    3.2游戏核心模块的设计
    3.2.1连连看所要求的是:
1.两个目标是相同的;
2.两个目标之间连接线的折点不超过两个。(连接线由x轴和y轴的平行线组成) 那么分析一下连接的情况可以看到,一般分三种情况:(1)直线相连;(2)一个折点;(3)两个折点。
可以发现,如果有折点,每个折点必定有且至少有一个坐标(x或者y)是和其中一个目标点是相同的,也就是说,折点必定在两个目标点所在的x方向或y方向的直线上。
所以设计思路就是:
假设目标点 p1 , p2 ,如果有两个折点分别为z1 , z2 频偏那么,所要进行的是
如果验证p1 , p2 直线连线,则连接成立
搜索以p1,p2x,y方向四条直线(可能某两条直线会重合)上的有限点,每次取两点作为z1,z2 ,验证p1z1/z1z2/z2p2 是否都能直线相连 ,是则连接成立
3.2.2 连连看消去算法实现
在检验两张图片能否消掉的时候,我们要让两张图片同时满足两个条件才行,就是两者配对并且连线成功。分3种情况:(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。这样就会有三条路经。若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了)
1)相邻 
2 若不相邻的先在第一个按钮的同行一个空按钮。1).到后看第二个按钮横向到这个空按钮所在的列是否有按钮。2).没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。3).没有的话,再从与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。没有的话路经就通了,可以消了.
    3)若2失败后,再在第一个按钮的同列一个空按钮。1).到后看第二个按钮竖向到
这个空按钮所在的行是否有按钮 2).没有的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。3).没有的话,再从与第一个按钮同列的那个空按钮横向到与第二个按钮同列看是否有按钮。没有的话路经就通了,可以消了。
      若以上三步都失败,说明这两个按钮不可以消去。
四. 具体方案
4.1视图层设计
4.1.1图形的产生
加载图块图片资源,调用图片库用函数DrawArea::loadPixmap()来实现。
函数如下设计:
void DrawArea::loadPixmap()
{
        background.load(":/background/background.png");
        background=background.scaled(size());
        QPixmap 景区拍照pix(":/pattern/pattern.png");
        int num=pix.height()/PIX_SIZE;
      for(int i=1;i<num;++i){
                qreal y=PIX_SIZE*i;
                QPixmap py(0,y,PIX_SIZE,PIX_SIZE);
                pixmap.push_back(p);
        }
}
4.1.2 判段消掉图片
如果两个图片一样,我们进行消块,并进行加分操作。消块操作如下:
    if(hitTimer)
              killTimer(hitTimer);

本文发布于:2024-09-23 13:25:31,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/169436.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:游戏   图片   按钮   设计   程序
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议