下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 vc连连看毕业论文.doc

vc连连看毕业论文.doc.doc

vc连连看毕业论文.doc

王梅迪
2017-10-14 0人阅读 举报 0 0 暂无简介

简介:本文档为《vc连连看毕业论文.docdoc》,可适用于综合领域

vc连连看毕业论文doc东华理工大学学士学位论文EASTCHINAINSTITUTEOFTECHNOLOGY姓名:刘琛学号:年级:级院系:信息科学与工程系专业:计算机科学与技术指导教师:刘自强年月日摘要当今社会休闲型游戏越来越得到人们的喜爱我所做的毕业设计实例“连连看游戏的设计与实现”是近几年来网络上非常流行的一种二维休闲游戏它对电脑配置要求不高娱乐性强易于上手。此次毕业设计所使用的语言为VC语言开发环境为VC。主要应用到微软提供的MFC框架的多文档程序和微软提供的API函数接口来实现。这些接口为游戏的制作提供了便捷的条件本系统的主要特点就是运用MFC框架和API技术进行界面的绘制鼠标的操作声音的播放以及积分榜的显示等功能。这次通过连连看的设计开发将对理解MFC框架技术以及WindowsAPI技术在游戏方面的应用起到很大的帮助作用同时为掌握VC编程技术及二维休闲游戏设计的一般方法打下坚实的基础。本文阐述了实例“连连看”的设计思想和实现。全文分为七章。第一章对选题的背景及项目的功能进行了简要叙述。第二章介绍了开发本系统所使用的C语言、MFC框架技术和API接口技术。第三章介绍了系统的需求分析。第四章是概要设计。第五章则对游戏的各功能模块及实现算法等详细设计进行了介绍。第六章对程序运行与调试中经历的问题和学到的编程及游戏设计经验进行总结。第七章是结束语。关键词:游戏连连看二维游戏MFCAPIAbstractToday'ssociety,Casualgamesgetmoreandmorepopularamongpeople,Ididgraduatedesignexample,"DesignandImplementationLianliankangame"isverypopularinrecentyearsthenetworkofatwodimensionalcasualgamesItslessdemandingcomputerconfiguration,Entertaining,EasytoflyThelanguageusedingraduatedesignlanguagefortheVC,DevelopmentenvironmentfortheVCMainlyappliedtotheMicrosoftMFCframeworkprovidesmoredocumentationproceduresandMicrosoft'sAPIfunctionstointerfaceThegameinterfaceoffersconvenientconditionsforproduction,ThemainfeaturesofthissystemistouseMFCframeworkandAPItechnologytointerfacemapping,mouseoperations,soundplayback,anddisplayfunctionsstandingsThedesignanddevelopmentbyLianliankanMFCframeworkwillunderstandthetechnologyandtheWindowsAPIapplicationoftechnologyinthegamesplayedveryhelpful,VCprogrammingforbothmasterandtwodimensionalrecreationofthegeneralmethodofgamedesignandlayasolidfoundationInthispaper,examplesof"Lianliankan"ThedesignandimplementationPaperisdividedintosevenchaptersChapterIoftheprojectbackgroundandprojectabriefdescriptionofthefunctionThesecondchapterdescribesthedevelopmentofthissystemusesClanguage,MFCframeworkofthetechnologyandAPIinterfacetechnologyThethirdchapterdescribesthesystemrequirementsanalysisChapterIVisasummaryofthedesignThefifthchapterofthegame'svariousfunctionmodulesandthedetaileddesignalgorithmwasintroducedChapterVIoftheprogramisrunninganddebuggingtheproblemsexperiencedandlearnedprogrammingandgamedesignexperiencesummaryChapterVIIistheconclusionKeyword:GamesLianliankantwodimensionalgameMFCAPI引言目前网络上有很多连连看游戏玩法简单娱乐性也很高。连连看不仅能增强思维能力提高智力而且富含哲理有助于修身养性。通过对连连看的设计与开发了解和掌握游戏开发的原理与方法。现在小游戏、网页游戏越来越受网民欢迎处理完的方法简单外(不像其他游戏还需要注册下载繁琐过程)很多游戏不乏经典。连连看游戏就是典型了!不管你走到那个游戏网站连连看游戏总是排在受玩家欢迎排名的前位休闲、趣味、益智是连连看玩不厌的精华且不分男女老少、工薪白领是一款适合大众的经典休闲小游戏。游戏产业作为现代电脑电子技术的产物正在一起独特的魅力在全世界的娱乐领域占据主流位置我们再承认广大娱乐网民的选择空间狭小的同事也必须明确的一点就是游戏本身所具有的强大的吸引力游戏的吸引力主要在于它在让玩家打发时间的同时可以让人实现在现实生活中不能实现的理想得到在现实中不能得到的东西而且游戏产业促动高技术不断的升级作为经济增长的一大支撑点已经成为了经济腾飞的“第四产业”。本系统主要研究使用MicrosoftVisualC以Windows窗体程序对五子棋游戏进行开发与设计让大家了解用MicrosoftVisualC开发WINDOWS小游戏的过程。开发工具和应用平台MicrosoftVisualC的介绍C语言是一种高效率的计算机程序设计语言,而VisualC则是在它的基础上开发出的一套功能强大的程序设计工具。对于游戏程序VisualC可以说是最佳的开发工具。第一VisualC具有优异的运行速度。第二VisualC可以直接访问内存。VisualC自诞生以来一直是Windows环境下最主要的应用开发系统之一。VisualC不仅是C语言的集成开发环境而且与Win紧密相连所以利用VisualC开发系统可以完成各种各样的应用程序的开发从底层软件直到上层直接面向用户的软件。而且VisualC强大的调试功能也为大型复杂软件的开发提供了有效的排错手段。VisualC是一个很好的可视化编程工具使用VisualC环境来开发基于Windows的应用程序大大缩短了开发时间而且它的界面更友好便于程序员操作。开发环境是程序员同VisualC的交互界面通过它程序员可以访问C源代码编辑器、资源编辑器使用内部调试器还可以创建项目文件。所谓API就是应用程序编程接口(ApplicationProgrammingInterface),WindowsAPI是Windows系统和Windows应用程序间的标准程序接口。API为应用程序提供系统的各种特殊函数及数据结构定义Windows应用程序可以利用上千个标准API函数调用系统功能。在VisualC中使用WindowsAPI是相当容易的,只要在项目中设定所要使用的函数库并引用正确的头文件就可以使用WindowsAPI中的函数与数据类型。根据WindowsAPI函数完成的功能,可将其分为三类。()窗口管理函数:实现窗口函数的创建、移动和修改功能。()图形设备函数(GDI):实现与设备无关的图形操作功能。()系统服务函数:实现与操作系统有关的多种功能。用WindowsAPI函数来编写应用程序的顺序结构为:调用WinMain函数开始执行定义窗口类初始化窗口类窗口的实例化通过消息循环获取消息并将消息发送给消息处理函数做出相应的操作。Windows编程的特点所有的Windows程序都具有类似的结构和相同的“外观”所以用户不用花很多的时间来学习新程序的用法。具有这种一致的用户界面是使用Windows内部子模序来创建的。所有的菜单、对话框、滚动条等都具有同样的键盘的鼠标接口Windows自己处理这项工作而不是交给应用程序完成。Windows编程有以下几个特点:()事件驱动的程序设计()消息循环与输入()图形输出()用户界面对象()资源共享编写一个典型的Windows应用程序一般需要:()CCPP源程序文件()HHPP头文件()资源文件包含了应用程序所使用的全部资源定义通常以RC为后缀名。资源是应用程序所能够使用的一类预定义工具中的一个对象包括:字符串资源、加速键表、对话框、菜单、位图、光标、工具条、图标、版本信息和用户自定义资源等。Windows消息机制:Windows是一个消息驱动的操作系统。一个消息由一个消息名称(UINT类型)和两个参数(WPARAMLPARAM)构成。当用户进行了输入或者是窗口的状态发生改变时系统会发送消息到某一个窗口。例如当鼠标左键单击之后会有WMLBUTTONDOWN消息发送。用户也可以定义自己的消息名称也可以利用自定义消息来发送通知和传送数据。一个消息必须由一个窗口接收。在窗口的消息处理函数中可以对消息进行分析对自己感兴趣的消息进行处理。如果希望在窗口中进行图形输出就必须对WMPAINT进行处理。为了应付那些没有被响应的消息Windows为窗口编写了默认的窗口消息处理函数窗口过程将负责处理那些程序中没有处理的消息。正因为有了这个默认窗口过程程序员才可以利用Windows的窗口进行开发而不必过多关注窗口各种消息的处理。提到消息就必须说到窗口句柄系统通过窗口句柄在整个操作系统中唯一标识一个窗口。发送消息时必须指定一个窗口句柄表明该消息由那个窗口接收。而每个窗口都会有自己的窗口消息处理函数用户的输入会被正确的处理。在Windows操作系统中维护着一个或者多个消息队列所有产生的消息都会被放入到队列中。系统在队列中每次取出一条消息根据消息的接收句柄而将该消息发送给拥有该窗口的消息循环。每一个运行的程序都有自己的消息循环在循环中得到属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。窗口函数定义了应用程序对接收到的不同消息的响应其中包括了应用程序对各种可能接收到的消息的处理过程是消息处理分支控制语句的集合。通常窗口函数由一个或多个switch语句组成。每条case语句对应一种消息当应用程序接收到一个消息时相应的case语句被激活并执行相应的响应程序模块。窗口函数是应用程序处理接收到的消息的函数。其中包含了应用程序对各种可能接收到的消息的处理过程。在本系统中一共用到了WMPAINT、WMLBUTTONDOWN、WMLBUTTONUP、WMDESTROY四种消息:LRESULTCALLBACKWndProc(HWNDhWnd,UINTiMessage,UINTwParam,LONGlParam)switch(iMessage){caseWMPAINT:…………breakcaseWMLBUTTONDOWN:…………case、WMLBUTTONUP:…………caseWMDESTROY:…………default:return(DefWindowProc(hWnd,iMessage,wParam,lParam))}WMLBUTTONDOWN是在玩家在鼠标单击左键后产生的这时通过GetCursorPos(pt)函数来判断鼠标是否处在落棋的合法点(包括按钮上)如果是合法的落棋点就返回棋子状态数据等参数这时WMPAINT函数在收到这些消息后就开始按照得到的参数来重绘棋盘用户在松开鼠标后又产生WMLBUTTONUP消息电脑在通过选择最佳落棋点之后又返回给WMPAINT这样就产生了消息循环直到接收到WMQUIT消息才退出程序PostQuitMessage函数的作用就是向应用程序发出WMQUIT消息请求退出。DefWindowProc函数是系统默认的处理过程以保证所有发送到该窗口的消息均得以处理。C语言简介《连连看》游戏的代码实现需要大量使用指针来直接访问内存因此使用C语言是极为合适的这也是游戏业界的共识。,、C的特点:C语言是在C语言的基础是扩展而成的所以两种语言的基本语法和语义是相同。C中加入了面向对程序设计(OOP)的特征。下面的三个主要性质刻划OOP语言的特点:)、封装性:把一个数据结构同工作的函数(行为或方法)组合在一起。封装*是借助于一种新的结构和数据类型机制――类来实现。)、继承性:建立一个新的派生类它从一个或多个先前定义的基类中继承函数和数据而且可能重新定义或加进新的数据行为这样就建立了类的层次。)、多态性:给行为取一个名字或符号它共享一个类的层次在这个层次中的每个类都用适合自己的方式实现这个行为。,、使用c的原因:a)功能功能有个两方面算法速度和机器代码效率。一个算法可以定义为数据通过系统的概念化的路径它描述一些点在这些点上数据能够被用作并可转换产生某个结果。例如一个算法定义为获取一个字符串计算字符串中的字符个数并作为结果返回的过程。算法与语言是独立的所以在编程之前必须设计算法编写一个快速程序的第一个步骤是设计良好的算法能以最少的工作步骤得出问题的答案。第二个步是选择语言这也影响程序的速度。从*能的角度考虑用汇编语言编写程序是最佳的选择它是计算机能理解的自然语言。但是几乎没有人用汇编语言编写完整的程序因为这样做极其乏味。另一个最佳的选择是c语言。然而由vc提供的所有工具都产生c而不是c。使用vc的向导可以生成大量的使用代*而不必人工地编写代*。从编写程序的难易程度和程序的*能综合考虑c是最佳的选择。。对于vbscript和java等语言代*在运行时由程序解释而且c*能良好因为它被编译为机器代码每次运行程序时都要将代码转换为机器码这样做效率比较低不仅仅是已编译过的c程序运行得较快而且微软c编译器已存在多年。这意味着微软的编译器程序员已经把许多优点集中到编译器上以致于它能产生非常高效的机器码。因为c是编译语言而且非常自然比vb更接近机器代码所以由c编译器产生的代码一定比vb的编译代码效率更高。b)错误处理一个好的程序与一个伟大的程序的区别就是其是否具有良好的错误处理支持。实际上如果在实现中首先进行错误处理而不是在最后才进行那么整个程序的开发和测试过程会更加完美。但是错误处理只能与语言所支持的内容相一致。VBscript具有基本的错误处理支持功能。在默认情况下不能捕获VBscript中的错误。每次怀疑产生错误时要调用onerrorresumenext功能并检查error对象。而c中的错误处理比较好这是因为有“异常处理”本章的后面部分将详细介绍。c)最小的依赖性正如上面所说c是一种编译语言即c代码在执行之前已转换为机器码。只要此代码不依赖于外部的动态链接库(DLL)c就可以在不需要安装额外程序的情况下移动到运行同样操作系统的其他机器和微处理器上而移动java程序时需要先安装java运行期库。d)与库接口紧密由于c和c已经存在许多年了现在有许多可利用的代码及第三方函数库及类库如C标准库、C标准库、DX库等虽然并非只有C才能使用DX库但最适合的语言非C莫属。系统需求分析系统需求连连看作为一款休闲益智游戏它最大的优点在于游戏规则家喻户晓简单上手快趣味性强所以受广大用户青睐在各大提供棋牌类游戏的平台都可以看到玩连连看游戏的人很多。休闲益智游戏中等级并不是最重要的追求目标通过对游戏规则的熟悉能很快上手掌握其操作方式也更适合男女老幼全家共同娱乐花费时间简短速战速决在短时间内感受到游戏的乐趣完全享受气氛轻松活跃的游戏过程。此种娱乐方式既不耽误时间也能轻松调剂娱乐充分适合现代人们的娱乐需求。更主要的是开发了人的智力成为年轻一代最流行的游戏据统计连连看游戏的玩家中学生占了接近三分之一的比例对学生的智力健康成长起一定作用正所谓休闲娱乐两不误。功能需求要求系统界面简洁操作方便把连连看游戏规则中最基本的规则体现出来比如暂停、洗牌、提示等。要求客户端通过连接服务端并进行账号密码验证后方可登陆。要求服务端监控要求画面清晰至少能对四个游戏玩家的游戏界面进行监控。要求实现客户端点到点的聊天功能。系统运行环境WinXWinMEWinNTWinWinXPWin游戏的概要设计游戏的简介游戏的主要功能客户端:界面设计:实现对整个游戏的界面设计登陆功能:玩家输入帐号、密码后登陆到服务器进行游戏游戏设置功能:玩家可以设定不同模式、不同难度的游戏还可以设置游戏的音量和音效消牌功能:在游戏中消除当前点击的两张满足消图条件的图片发牌功能:游戏开始时对游戏中的图片进行初始化排列分布洗牌功能实现游戏中所剩的图片的随机交换提醒功能:在游戏中显示给玩家两张满足消图条件的图片聊天功能:玩家能够和自己的玩友进行在线聊天数据保存功能:保存玩家、游戏的基本数据信息客户端网络协议设计:设计适合本游戏的客户端对服务端交互的网络通信协议服务端:监控功能:能够实现对在线玩家的游戏状况进行监控广播功能:能够对所有在线玩家发送广播信息服务端网络协议设计:设计适合本游戏的服务端对客户端交互的网络通信协议游戏的总体描述游戏规则运行游戏并进行初始化工作将整个游戏区域分成纵向和横向扩展的若干个小方块并且这些小方块是由多种图案成对地分布于游戏区域的不同位置。玩家可以将个相同图案的对子连接起来连接线不多于根直线就可以成功将对子消除直到将游戏区域中的所有方块对都被消除后为胜利(其中联机游戏的判断输赢的条件是:谁先讲将游戏区域中的所有方块对都被消除后谁胜出若所有所有玩家都没有在规定的时间里消完所有的小方块没有胜出者。)。。游戏操作第一次使用鼠标点击棋盘中的棋子该棋子此时为“被选中”以特殊方式显示再次以鼠标点击其他棋子若该棋子与被选中的棋子图案相同且把第一个棋子到第二个棋子连起来中间的直线不超过根则消掉这一对棋子否则第一颗棋子恢复成未被选中状态而第二颗棋子变成被选中状态游戏流程点击第一选择对子。点击第二选择对子。如果个对子符合连接条件对子消除。如过不符合对子连接条件切换到第二选择对子。总体结构设计LINKUp棋登主聊监子陆界天控操功面功功能能能作显功示能功能洗提暂消登注棋菜图牌示停牌录册子单片显显及示示说明运行设计客户端逻辑流程开始游戏选择图片包背景图片背景音乐游戏难度游戏开始消除砖块NN暂停Y重列提示游戏中断YYNN继续重新排列提示消除模块YN无可消除砖块时间用完YYN游戏结束系统数据结构设计物理数据结构设计在游戏文件目录下的DAT文件存储用户信息储存用户信息包括个属性:RegisterName注册姓名Password用户密码Score总分ChartNum排名文件内的结构为:玩家账号Player:RegisterName:***********Password:*******TotalScore:***RankNum:**储存图片信息和排行榜的文件为INI储存图片信息的文件包括的属性:PicturePath小图地址BPicturePath大图地址PictureName图片名称BPictureIntroduce图片的介绍信息储存图片文件的物理结构PicturesInformationsorderPicturePath=图片路径PictureName=***BPicturePath=图片路径BPictureIntroduce=order储存玩家排名的INI文件物理结构储存排行榜文件的属性:ChartNum排名号TotalScore总得分GameName用户名GameTime完成游戏时间MainSectionPaneText=排行榜orderChartNum=TotalScore=GamerName=GameTime=游戏的详细设计系统设计说明类的设计根据连连看游戏的特点及分析游戏的流程结构将为系统设计以下类:()绘图基类:CCanvas()窗体控制类:CWinController()窗体类:CWinClass()例外类:CWinException()构建窗体类:CWinMaker()视图类:CWinView()位图类:CRasterBmp()模层类:CMode()棋子类:CChessMan()Ini文件类:CIni类图如下:窗体控制类(CWinController)根据连连看游戏的特点和实际设计的需要本文档将控制类的成员和方法定义如下:数据成员:INTmcxClint记录当前客户区域水平坐标INTmcyClint记录当前客户区域垂直坐标HWNDmhWndl当前窗口句柄HINSTANCEmhinstCWinModelmmodel窗口模型类的实例化对象CWinViewmview视图类的实例化对象TCHARmpicPath图片地址暂停按钮CMyBitmapButtonmbtPause,mbtArrange,洗牌按钮mbtOffer提示按钮INTmMENUID菜单ID函数成员CWinController(HWNDhWnd,LPCREATESTRUCTpCreate)构造函数CWinController(HWNDhWnd,HINSTANCEhInst,TCHAR*lpszFileName)virtual~CWinController()析构函数VOIDCommand(HWNDhWnd,WPARAMwParam,LPARAMlParam)处理命令消息VOIDClose(VOID)VOIDPaint(HWNDhWnd)画图VOIDLoadBmp(HWNDhWnd)加载图片VOIDLoadBackground(HWNDhWnd)加载背景图片VOIDDrawRect(HWNDhWnd)画矩形VOIDLoadMusic(intnMusic)加载音乐VOIDSetRecord(HWNDhWnd,INTScore,charUserName)设置分数VOIDInitialCtrls()初始化按钮控件控制基类数据成员HWNDmhWnd窗口句柄函数成员:virtualVOIDDisable(VOID)控件无效virtualVOIDEnable(VOID)控件有效virtualVOIDHide(VOID)控件隐藏virtualVOIDShow(VOID)控件显示virtualVOIDSetText(LPCTSTRlpszText)设置控件文字virtualVOIDGetText(TCHAR*pszBuf,INTiLen)获得控件文字virtualVOIDSetFocus(VOID)设置焦点virtualBOOLIsVisable(VOID)判断是否有效HWNDHwnd(VOID)CONST{returnmhWnd}virtualHWNDCreate(HWNDhWndParent,RECTrctPos,LPCTSTRlpszClassName,LPCTSTRlpszWindowName=,UINTuID=,DWORDdwStyle=WSCHILD|WSVISIBLE,DWORDdwExStyle=)创建控件Botton控件类由控件基类继承而来函数成员:CMyButton(HWNDhWnd=):CBaseControl(hWnd){}构造函数virtualHWNDCreate(HWNDhWndParent,RECTrctPos,LPCTSTRlpszWindowName=,UINTuID=,DWORDdwStyle=WSCHILD|WSVISIBLE,DWORDdwExStyle=)创建BottonHCURSORSetBtnCursor(UINTuResID)图片Botton类由Botton类继承而来函数成员:CMyBitmapButton(HWNDhWnd=):CMyButton(hWnd){}初始化HWNDCreate(HWNDhWndParent,RECTrctPos,LPCTSTRlpszWindowName=,UINTuID=,DWORDdwExStyle=)创建图片BottonHBITMAPSetBitmap(UINTuResID)加载图片图像类数据成员:CCanvasCCanvas实例化图元基类BOOLbDraw是否画图函数成员:CShapeBase()图像基类Draw()画图函数DrawFocus()将图像设置为焦点视图类函数成员:CView()构造函数virtual~CView()析构函数VOIDDrawRect(CCanvascvs)画矩形VOIDPaint(CCanvascvs,LPCSTRlpszFileName)画图VOIDUpdate(CCanvascvs)更新VOIDSetScore(HWNDhwnd,intscore)设置分数VOIDSetArrTimes(HWNDhwnd,intArrTimes)设置洗牌次数CWinException数据成员DWORDmdwERR低字TCHARmpszMsg函数成员:GetError()*GetExMessage()窗口类从窗口结构体派生窗口类】数据成员:【Name窗口名【】函数成员:VOIDSetProc(WNDPROCchildProc){lpfnWndProc=childProc}设置子窗口回调函数VOIDSetClass(TCHAR*lpszClass){lpszClassName=lpszClass}设置窗口名VOIDSetICon(){hIcon=}设置窗口图标CWindowClass(WNDPROCwndProc,TCHAR*pszClassName,HINSTANCEhInst,INTcbWndEx=)构造函数VOIDRegister(VOID)注册窗口virtual~CWindowClass()析构函数画图基类数据成员:HDCmhDC画图句柄HWNDmhWnd窗口句柄RECTmrect画图区域~CCanvas()析构函数InvalidCanvas()初始化DrawRect()画矩形VOIDDrawBitMap(LPCTSTRlpszFileName)加载图片绘图类由绘图基类派生而来数据成员PAINTSTRUCTmps实例化一个绘图结构体函数成员CPaintCanvas()~CPaintCanvas()加载绘图类由绘图基类派生而来CUpdateCanvas()~CUpdateCanvas()加载位图类函数成员:CRasterBmp()virtual~CRasterBmp()INTLoadBmp(LPCTSTRlpszFileName)加载位图INTPaint(HDChDC,INTx,INTy)画位图函数数据成员:INTmiWidth,宽度miHeight高度INTmiBPPBitsPerPixelINTmiByterPerRow行的宽度(以字节数表示)char*mszRaster保存图形的位数RGBQUAD*mPalette位图的调色板BITMAPINFO*mpbmiBITMAPINFO结构体模层类:函数成员:CModel(VOID)virtual~CModel()棋子类:函数成员:CChessMan(intmapMAXMAX)构造函数virtual~CChessMan()析构函数INTGetValue(INTx,INTy){returnmmapxy}BOOLFindTwoCorner(POINTp,POINTp)查找两个转角的连线BOOLFindCorner(POINTp,POINTp)查找一个转角的连线BOOLFindLine(POINTp,POINTp)查找两点间的连线BOOLHint()消牌BOOLFindOut(POINTp,POINTp)查找所有能连的线BOOLIsEmpty(INTmapMAXMAX)判断地图是否为空VOIDDrawLine(HWNDhWnd,POINTp,POINTp)画两点间的连线RECTgetRect(POINTp,POINTp)获得要更新的矩形区域数据成员:intmmapMAXMAX地图POINTmcross,转角mcross,mpoint,mpointintmlineNum要画的线数文件类:()ini文件:函数成员:staticDWORDReadString(char*section,char*key,charstringtoread,char*filename)staticBOOLWriteString(LPCTSTRsection,LPCTSTRkey,char*stringtoadd,char*filename)CIniFile()virtual~CIniFile()客户端登陆注册模块本模块作用:玩家登陆用以使用玩家信息。模块名客户端玩家登陆标识符设计者黄志明创建日期最后更新者最后更新期主执行者玩家功能描述实现玩家输入账号密码进行核对登录功能及注册账号功能输入项账号密码输出项将各个砖块显示在游戏区域接口设计过程在游戏开始时显示登录界面包括两个TEXTBOX和三个bottom按钮输入账号密码账号位密码六位若选择注册打开服务器端的Userdat文件写入要注册的用户名账号密码若选择登录连接服务器读取Userdat文件进行账号密码的核对核对成功登录弹出messagebox提示账号或密码错误点击取消退出程序。限制条件补充说明无待解决问题无排列重列砖块模块本模块的意义:初始化或重新排列砖块。排列重拍模块名排列重列砖块标识符设计者吴曦创建日期最后更新者最后更新期主执行者玩家功能描述初始化。在产生无法消除的图片时重新排列砖块。输入项游戏开始按钮重新开局菜单项(快捷键)重列按钮(快捷键)被输入时候输出项将各个砖块显示在游戏区域接口设计过程()初始化地图将地图外围区域设置为其余位置设置为。()通过两个FOR循环随机生成个子窗体并且将他们移动到指定位置通过遍历从位置将同一列的奇偶行设置为相同图片()通过随机函数将图片打乱排列()在子窗口创建时候加载图片()重列时通过随机函数将MAP为的地图随机和其余位置交互图片若被交互区域不为则重新随机。限制条件补充说明无待解决问题无消牌及连线模块本模块的意义:在游戏玩家通过鼠标或者键盘选定一对焦点时通过改模块判定是否符合消除条件符合则将二者连线并焦点图片消失不符合则无影响消牌模块模块名消牌模块标识符设计者刘琛创建日期最后更新者最后更新期主执行者玩家功能描述玩家通过选择两个焦点进行砖块消除输入项通过鼠标或者键盘设置个焦点图片输出项符合条件的图标从界面消失接口该模块被连线模块调用且受定时器影响并给定时器发送增长消息。()通过键盘或鼠标选择一对焦点图标设计过程()通过消除算法对该焦点判断()符合条件则连线停留S()然后从窗口消失{cinclear()charccin>>c}限制条件不符合消除条件则无影响补充说明当设置焦点时需要有提示声音。若无法消除依旧有提示声待解决问题代码过于繁琐要精简代码界面不是很美观要美化下。算法设计:根据转角数不得超过个的规则我们可以分为转角数分别为个、个、个这三种情况分别讨论。()转角连通(直线连通):两个图片的纵坐标或横坐标相等且两者连线间没有其他图案阻隔。()一个转角连通:其实相当于两个图片划出一个矩形这两个图片是一对对角顶点另外两个顶点如果可以同时和这两个棋子直连那就说明可以"一折连通"。见下图两个红色棋子的连通情况右上角打叉的位置就是折点。图一个转角连通()两个转角连通:判断图片A与图片B能否经过有两个转角的路径连通实质上可以转化为判断能否找到一个点C这个C点与A可以直线连通且C与B可以通过有两个转角的路径连通。若能找到这样一个C点那么A与B就可以经过有两个转角的路径连通。判断是否经两个转角连通的算法需要做两个方向上的扫描:水平扫描和垂直扫描。水平扫描。如下图所示为了判断AB能否通过个转角连通则从A开始在水平方向上向左右扫描并判断经过的点能否与B点经过个转角连通。显然C点能与B点经个转角连通故AB能经个转角连通。图两个转角连通的判断垂直扫描。如下图所示,为了判断AB能否通过个转角连通则从A开始在垂直方向上下扫描并判断经过的点能否与B点经过个转角连通。显然C点能与B点经个转角连通故AB能经个转角连通。图两个转角连通的判断模块名连线标识符设计者刘琛创建日期最后更新者最后更新期主执行者被程序的其他模块调用功能描述在符合消除条件砖块间连线输入项无输出项在游戏区域画线线条停留S接口被消除函数调用设计过程限制条件必须要符合消除砖块补充说明无待解决问题无算法设计:连三条线。即连接两条线中间需要有两个折。这时需要从纵向和横向上判断。先在纵向上判断。设定两个临时点他们的横坐标分别为两张图片的横坐标。从第一行开始遍历把这两个临时点的纵坐标分别赋为从第一行到最后一行的数然后通过调用第一种方法判断两张图片和临时的点是否能连通。如果能连通则在此基础上判断两个临时点是否能连通如果能返回TRUE否则继续遍历如果横向上遍历完没有符合要求的则继续往下遍历横向上是否有能连通的线方法同纵向的。最后若没有线能连通返回FALSE。获取当前窗口的父窗体选择笔的样式计算要划线的位置以两张图片的中心为起始点根据上面判断若有两个折则画三条线一折画两条无折画一条画完后停留秒获取要更新的区域更新。定时器本模块的意义:实现时间限制功能。模块名定时器标识符设计者吴曦创建日期最后更新者最后更新期主执行者系统功能描述输入项系统默认时间输出项接口子窗口右键消息消牌成功设计过程初始化时间设置定时器每秒发送时间减少消息消除砖块增加总时间(无连击加连击则增加连击判断剩余时间)时间为游戏结束提示游戏结束重新开始游戏限制条件时间结束游戏结束补充说明无待解决问题无()在游戏开始时设置当前限制时间(nOverTimer)为s。()设定一个时间定时器TIMER时间间隔为s。()当每次时间间隔到时就把当前的时间限制减少s。()如果游戏中有一对棋子消除时就把限制时间增加例如当前的限制时间为s这时有棋子消除那么限制时间变成s。()如果限制时间变成s说明游戏结束弹出将结束提示对话框如果当前游戏等级超过记录等级还要弹出英雄榜对话框对话。提示当玩家无法找到可以消除砖块时可通过提示按钮随机标记出一对砖块提示次数根据难度不同分为:简单()普通()困难()算法:从第一个图标开始遍历所有的图标运用消牌模块的消牌算法依次判断它和其他图标是否能够相连提取最近的那个可以相连的图标对象若第一个图标对象没有可连接的对象那么判断第二个以此类推直到找到一对可相连的图标。找到以后将两个图标设为焦点。若没有找到则提示没有可消的牌了系统重新排列并且不扣除玩家可以自主进行重新排列的次数。。模块名提示标识符设计者郭贝贝创建日期最后更新者最后更新期主执行者玩家功能描述将一对可以消除的砖块设置为焦点。输入项菜单项(快捷键)或者提示按钮被输入输出项将一对可消除图像设置为焦点接口需要调用消除函数判断是否符合条件设计过程获取提示消息遍历所有的砖块调用消除函数随机选择一对可以消除砖块将可以消除的砖块设置为焦点限制条件简单()普通()困难()补充说明无待解决问题无暂停模块针对玩家因故暂时不能继续游戏但需要在解决后继续游戏而不受游戏生命影响设计暂停时将游戏区域图片屏蔽弹出对话框提示玩家继续或者结束游戏继续返回暂停状态时的砖块排列以及生命等信息。模块名暂停标识符设计者吴曦创建日期最后更新者最后更新期主执行者玩家功能描述暂停操作输入项暂停按钮或快捷键被输入输出项无接口无设计过程当暂停按钮或菜单项被输入时发送暂停消息将各个子窗口通过showwindows()设置为HIDE将暂停检测中间量设置为假用中间量保存暂停时的时间当暂停信息再次被输入时将剩余时间设置为保存的时间将窗口状态变为可见限制条件补充说明待解决问题连击本模块的意义:根据时间进度条进行滚动。模块名连击标识符设计者吴曦创建日期最后更新者最后更新期主执行者系统功能描述输入项无输出项定时器每秒发送一个消息给WMTIMERNLINK减少当NLINK为时DLINKCHECKED设置为否当右键单击子窗口若联通并消牌连击时间刷新接口定时器设计过程创建进程创建进度条窗口移动到指定位置设置定时器消息改变进度条位置限制条件时间结束游戏结束补充说明无待解决问题无进度条本模块的意义:根据时间进度条进行滚动。模块名进度条标识符设计者吴曦创建日期最后更新者最后更新期主执行者系统功能描述输入项系统默认时间输出项接口定时器设计过程创建线程创建进度条窗口移动到指定位置设置定时器当定时器发送消息给WMTIMER消息时通过SENDMESSAGE和当前剩余时间设置进度条位置限制条件时间结束游戏结束补充说明无待解决问题无更换背景图片、音乐模块作用:在玩家选择背景、音乐的时候根据玩家选择改变背景和音乐模块名标识符更换背景图片及音乐设计者李俊创建日期最后更新者最后更新期主执行者功能描述在玩家选择背景、音乐的时候根据玩家选择改变背景和音乐输入项选择背景音乐及背景图片输出项对应背景音乐和背景图片接口无设计过程音乐播放比较简单只需用户在选择音乐播放时把音乐资源载入程序并播放选择更换图片是把图片资源载入程序并显示。限制条件补充说明待解决问题英雄榜模块作用:在游戏结束时显示游戏排名前十名的玩家的名字、分数、时间、排名模块名标识符英雄榜设计者谢焕新创建日期最后更新者最后更新期主执行者系统功能描述在游戏结束时显示游戏排名前五名的玩家的名字、分数、时间、排名输入项无输出项无接口设计过程()读取配置文件(setupini),得到并显示当前游戏排名前五名的玩家的名字、分数排名()在用户结束游戏时从INI文件中将全部用户姓名数据和分数数据读取出来通过分数和文件中的各个分数进行比较如若用户分数大于其中某个分数则将当前分数和姓名与被比较的分数和姓名进行交换并且写入文件然后被保存的分数和姓名继续和以后的进行比较直到结束限制条件补充说明待解决问题帮助和关于模块本模块的意义:实现帮助和关于窗口的操作模块名标识符帮助设计者刘琛创建日期最后更新者最后更新期主执行者系统功能描述创建两个窗口从文件中读取帮助文档显示在窗口上输入项无输出项帮助INI文件接口帮助和关于菜单回调函数设计过程创建两个窗口帮助窗口和关于窗口调用二者的回调函数对其进行操作。限制条件补充说明待解决问题()创建help和about窗口。()help回调函数:在WNINITDIALOG中读取Helpini文件显示在窗体上。聊天模块本模块的意义:实现客户端与服务端的聊天功能模块名聊天模块标识符设计者黄志明创建日期最后更新者最后更新期主执行者系统功能描述实现客户端与服务端的聊天功能输入项发送的信息内容输出项接收到的信息内容接口设计过程服务器端通过socket()系统调用一个socket数组后(及连接客户的最大数目)与制定的本地端口绑定bind()就可以在端口进行侦听listen()如果有客户端连接请求这在数组中选择一个空socket将客户端的地址赋给socket然后登陆成功的客户就可以再服务器上聊天了客户端程序相对简单只需要建立一个socket与服务器端连接成功后通过这个socket来发送和接受数据就可以了。限制条件补充说明待解决问题流程图:启动客户端登陆服务器显示在线用户发送信息启动服务器:等待客户请求处理用户数据显示私聊信息显示私聊信息显示对所有人信息聊天服务器端模块:服务器端登陆本模块是为玩家玩游戏时暂停游戏。模块名标识符服务器端登陆设计者创建日期最后更新者最后更新期主执行者管理员功能描述管理员监视玩家游戏情况以及建立TCPIP连接以供客户端玩家游戏时通讯以及聊天输入项登陆时输入账号及密码输出项在玩家玩游戏时可以监视玩家玩游戏的情况最大可以同时看到个玩家的游戏情况接口无设计过程限制条件补充说明待解决问题局域网屏幕监控客户端服务端主管系主窗理统窗体员设体置操作客户端设计:客户端主要作用是适时抓取本机的屏幕信息将其分成多个数据包发送到服务器为了保证屏幕信息能够完整的发送到服务器客户端发送完一个数据包后需要等待服务器发来的确认信息然后继续发送下一个数据包。客户端主要实现以下四个任务:)客户端随着客户机的启动自动运行并隐藏窗口。)客户端运行后先把本机的IP地址、用户名和主机名发送到服务器。)客户端抓取屏幕信息并把它转换为位图结构。在VC中可以使用GetDesktopWindow()方法获得一个屏幕窗口指针通过该指针可以获取屏幕窗口的设备上下文。)客户端同过UDP协议将位图信息发送到服务器。头文件和链接库文件:#include“Winsockh”#pragmacomment(lib,”wslib”)得到主机名、用户名和IP地址分别采用以下函数实现:GetComputerName(LPTSTRlpBuffer,LPDOWORDlpnSize)得到计算机名GetUserName(LPTSTRlpBuffer,LPDOWORDnSize)得到用户名Hosten*phost=gethostbyname(“”)得到主机的内容Char*localIP=inetntoa(*(structaddr*)*phost>haddrlist)得到IP地址服务器设计:局域网屏幕监控系统服务器主要用于显示客户端传来的桌面位图信息确定是哪台客户机传来的并且知道这台客户机所对应的是哪个玩家为了确定客户机所对应的是哪位玩家本系统通过得到客户机的IP地址、主机名和用户名来唯一标识。网络协议:帐户及密码:*MSGAEND#处帐号位密码位消息协议:*MSGMEND#(*MSGGEND#文件操作模块CIniCDat模块名标识符文件操作设计者吴曦创建日期最后更新者最后更新期主执行者电脑功能描述Ini文件用语保存配置信息dat文件用于保存玩家游戏信息及其帐号密码输入项无输出项无接口无设计过程一将信息写入INI文件中所用的WINAPI函数原型为:BOOLWritePrivateProfileString(LPCTSTRlpAppName,LPCTSTRlpKeyName,LPCTSTRlpString,LPCTSTRlpFileName)二将信息从INI文件中读入程序中的变量所用的WINAPI函数原型为:DWORDGetPrivateProfileString(LPCTSTRlpAppName,LPCTSTRlpKeyName,LPCTSTRlpDefault,LPTSTRlpReturnedString,DWORDnSize,LPCTSTRlpFileName)程序执行时候文件名固定但是输入或者读取的键值含义和内容不一样保存的路径系统固定故只需传入此个参量进行操作Dat将玩家信息保存并读取限制条件补充说明待解决问题(注释标准:各函数前需使用*******************************************************************************************************************************************标注出功能名以及参数各行代码备注在该行末尾用注释若是多行代码功能备注在起始位置使用注释

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/40

vc连连看毕业论文.doc

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利