1引 言
1.1游戏介绍
连连看来源于街机游戏《四川麻将》和《中国龙》,
是给一堆图案中的相同图案进行配对的简单游戏
在2003年一个叫做朱俊的网友将这种形式搬到了PC上
立刻成为办公一族的新宠并迅速传遍了世界各地。
饱受工作压力的人们没有太多的时间进行复杂的游戏,
而对于这种动动鼠标就能过关的游戏情有独钟。
之后村子的连连看风靡版,阿达的连连看奥运版,
连连看反恐版还有敏敏连连看水晶连连看等遍地开花
造就了一个连连看的新世界。
连连看游戏有多种地图样式和道具系统、大大加强了游戏的可玩性,
是一款老少皆宜的休闲佳品。
1.2目的
网络小游戏制作的目的是满足了人们休闲的需要,
在紧张工作之余休闲类的小游戏能够给人带来最大程度的放松
也可以增进人们之间的交流沟通
通过游戏还可以认识更多的朋友
也可以到达跨省、跨市甚至跨国间人们互相娱乐的目的。
另外也通过本程序将三年来所学的专业知识和其他方面的知识融入到实际应用中。
1.3主要问题
开始制作游戏时,
主要要解决的问题有以下几个方面:
如何设置整个游戏的界面;如何控制连连看游戏中随机图片的生成且每种图片必须为偶数个;游戏开始后,
判断鼠标两次点击的图片能否消去即图片是否相同且图片之间路径的判断。
2 系统需求分析
《连连看系统》本系统提供了连连看游戏的进入,
过关记录以及游戏的退去。
整个游戏程序包括了进入记录,图片消去和过关结果三个阶段,
在处理鼠标响应事件中伴随着3D绘图。
程序通过调试运行,实现了设计目标,能够同时满足连连看游戏玩家的需要。
2.1关键技术介绍
VC++应用程序开发工具,
使目前最为广泛的、易学易用的面向对象的开发工具。
VC++语言提供了简单的语言运行环境,利用这些代码可用于设计界面和实现各种功能,
也简化了界面设计过程从而有效的提高了应用程序的运行效率和可靠性。
故而,实现本系统VC++是一个相对较好的选择。
2.2 可行性分析
(1)技术可行性分析
技术上的可行性分析主要分析现有技术条件能否顺利完成开发工作,
硬件、软件配置能否满足开发者的需要各类技术人员的数量
水平来源等。
连连看系统的工作主要是在开发者和玩家之间架起一座桥梁,
能相互沟通信息和处理信息。
这一特点非常适合计算机特点,通过网络Internet技术,
发挥计算机的信息传输速度快、准确度高的优势。
计算机硬件和软件技术的飞速发展,为系统的建设提供了技术条件。
(2)社会可行性分析
社会可行性有时也称为操作可行性,
主要论证新系统在玩家在游戏过程中的感受与反馈信息。
在当前信息技术飞速发展的大环境下,计算机技术和软件技术的更新使得游戏更加的易掌握。
2.3 功能需求分析
关于连连看的功能描述如下:
运行游戏并进行初始化工作,
将整个游戏区域分成纵向和横向扩展的若干个小方块
并且这些小方块是由多种动物图案成对地分布于游戏区域的不同位置。
玩家可以通过选取相同的两个物件来对它们进行消除的操作,
直到将游戏区域中的所有方块对都被消除后为胜利。
游戏的整体运行效果如图2.1。
图2.1 连连看运行界面图
2.4 性能需求分析
(1)硬件环境
* 处理器:
Inter CR300或是更高。
* 内存:
128MB(建议 196MB)。
* 硬盘空间:
20MB。
(2)软件环境
* 操作系统:
Windows 98 或是Windows 2000/Windows NT Server 4.0。
3 系统设计
3.1系统功能设计
连连看系统的设计流程图如图3.1所示。
图3.1 设计流程图
3.2系统功能模块总设计
这个游戏的主要类是游戏模式类,
类名为CLinkToLinkDlg。
这个类主要对包括图案方块的销毁判断,
游戏胜利判断以及整个游戏用户交换功能的实现。
它的图如下:
CLinkToLinkDlg m_mem3DBkDC :CDC
m_mem3DBkBmp :CBitmap
m_memAnimalDC :CDC
m_memAnimalBmp :CBitmap
m_MemDC :CDC
m_memBitmap : CBitmap
m_map : int
m_nRow : int
m_nCol : int
m_nX1 : int
m_nY1 : int GameDraw(CDC * pDC) : void
StartNewGame() : void
IsLink(int x1,int y1,int x2,int y2) : BOOL
IsWin(void) : BOOL
X1_Link_X2(int x,int y1,int y2) : BOOL
Y1_Link_Y2(int x1,int x2,int y) : BOOL
OneCornerLink(int x1,int y1,int x2,int y2) : BOOL
TwoCornerLink(int x1,int y1,int x2,int y2) : BOOL
YThrough(int x,int y,BOOL bAdd) : BOOL
XThrough(int x,int y,BOOL bAdd) : BOOL
LineX(int x,int y1,int y2) : BOOL
LineY(int x1,int x2,int y) : BOOL
4 系统详细设计与实现
4.1游戏地图设计
对于整个游戏区域,
可以把它看作一个是由若干个小方块构成的地图
而且每一个小方块放置着不同的动物图案可将其称之为图案小方块。
这些图案小方块零散地分布在地图的不同位置区域,
并且每一个图案小方块都有与其对应的完全一样的另外一个小方块
如图4-1所示。
图4-1 游戏地图设计图
如图4.1所示,
整个游戏游戏区域被抽象成一个有坐标位置属性的平面
平面上零散地分布着若干个小方块并且这些小方块的物种起码是成对出现的。
经过前面的描述和分析后,可以把游戏区域地图用一个数组m_map来表示。
m_map是把地图设计成一个动态分配的int整形一维数组,
对地图中的行列数的表达用一个转换法则即可。
可以在LinkToLinkDlg类对象定义中添加地图核心数据的成员变量,
具体如下:
//地图位置相关属性组
int*m_map; //动态地图数据头指针(一维数组)
intm_nRow; //地图的行数(虚拟)
intm_nCol; //地图的列数(虚拟)
上面的成员变量中定义了一个整形指针标量m_map
用于记录动态分配出来的一维数组地图空间的首地址。
对于地图区域中的某个小方块的类型,可以用一个整形的ID来进行识别。
这里为标识地图的行列位置分别添加m_nRow和m_nCol变量。
现在,地图的数据结构已经设计好。
下面对游戏进行初始化。
由于方块需要成对地出现,因此在做地图的初始化时,
不仅仅是对动物种类做简单的随机取数然后将该随机选取出来的物件放到地图区域中去就了事
而是需要成对地对物种进行成对选取就是说地图中的小方块必须是偶数个。
前面提到过,把地图数组设置成动态分配方式,
目的是让其数据空间可以根据行列数的需求动态地获取
而对于实际不同大小比例的地图可以预先定义几组关于行列数的宏来实现。
当需要创建时,根据宏值的不同分配不同大小的地图空间即可。
接下来在LinkToLinkDlg类的构造函数对地图数据进行相关的初始化:
#define ROWCOUNT 8//行数
#define COLCOUNT 12//列数
CLinkToLinkDlg::CLinkToLinkDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLinkToLinkDlg::IDD, pParent)
{......
//初始化行列数
m_nRow=ROWCOUNT;
m_nCol=COLCOUNT;
//根据行列数动态分配内核数据数组空间
m_map=new int[m_nRow*m_nCol];
}
CLinkToLinkDlg::~CLinkToLinkDlg()
{
//释放动态数组空间
delete[] m_map;
}
在LinkToLinkDlg类对象的实现中,
定义了一些关于地图行列数的宏如ROWCOUNT和COLCOUNT
并且在LinkToLinkDlg类对象的构造函数中进行了行列的真实确认赋值
并根据当前行列数的大小对地图数据空间进行动态创建。
因为地图数据是用new在堆栈动态创建的,
所以在销毁该对象时要将这些内存空间释放
如代码所示在LinkToLinkDlg类对象的析构函数中调用delete将m_map指向的所有空间都释放掉。
4.2初始化工作
接下来,再分配好的空间中放上适当的图案方块物件,
对数据进行初始化。
即需要对地图空间内的数据进行成对性的随机布局,
因此可以将该功能的实现封装在StartNewGame( )函数里
上一篇:
VC设计简单的聊天室毕业论文设计
下一篇:
近三年来思想工作小结(德能勤绩廉)