毕业论文定稿.docx
- 文档编号:23341108
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:59
- 大小:856.82KB
毕业论文定稿.docx
《毕业论文定稿.docx》由会员分享,可在线阅读,更多相关《毕业论文定稿.docx(59页珍藏版)》请在冰豆网上搜索。
毕业论文定稿
届别2012届
学号200814160237
毕业设计(论文)
基于VC的成三棋游戏程序的设计与实现
姓名杨剑
系别、专业计算机科学系、网络工程
导师姓名、职称曹清华、讲师__
完成时间2012年4月8日
目录
摘要I
ABSTRACTII
1绪论1
1.1课题背景1
2系统实现技术与开发环境1
2.1C/C++简介1
2.2VC开发环境2
2.2.1GDI绘图2
2.2.2对话框3
2.2.3消息响应3
2.2.4游戏编程思想5
2.3MFC编程思想6
2.3.1MFC中类的结构及联系6
2.3.2MFC中类的作用8
3需求分析8
3.1游戏用户分析8
3.2游戏功能分析8
3.3游戏功能模块主要功能8
4系统概要设计9
4.1总体设计9
4.1.1游戏总体类的设计9
4.1.2游戏总体E-R图设计9
4.2模块结构设计10
4.2.1游戏登陆者管理模块10
4.2.2游戏者下棋实现模块10
4.2.3数据流网络传输模块12
4.3英雄榜设计12
4.3.1英雄榜数据结构设计12
4.3.2逻辑结构设计12
4.4游戏规则说明13
4.4.1下棋阶段13
4.4.2行棋阶段13
5系统详细代码设计13
5.1游戏者登录管理模块13
5.1.1游戏者登录友好界面的实现13
5.1.2游戏帮助文档及基本规则的说明16
5.2游戏者下棋模块的实现16
5.2.1下子及打子阶段的实现16
5.2.2行子阶段的实现24
5.2.3输赢判断的实现27
5.2.4英雄榜的数据更新29
5.3网络模块的实现31
5.3.1网络初始化32
5.3.2网络的调用32
5.3.3网络类的实现32
6游戏测试38
6.1登录的测试38
6.2下棋的测试39
6.3走棋阶段的实现40
6.4英雄榜的测试:
42
结束语43
参考文献44
致谢47
摘要
随着科学技术(特别是计算机网络技术)日新月异的发展人们的生活也发生
了空前的变化。
现在生活在大都市的人们总免不了想体验儿时那乡村乐趣,只是苦恨没有途径;从小在城市长大的孩子也想多一些趣味游戏,并且他们父母也希望孩子可以多了解了解农村生活以助于孩子的成长。
成三棋,一款乡村儿时游戏,将我们彼此拉近了距离,结合计算机网络技术使得城乡娱乐简易可行。
该游戏以vc++为基础平台,借鉴五子棋、象棋、围棋等多种棋种核心算法,采用网络套接字(Socket)技术,引用MFC类库及WINAPI函数;实现友好的人机界面,网内对弈、单机对弈等多项功能。
拥有浓浓的乡村风味、简易操作、强烈的娱乐性与趣味性。
关键词:
VC/VC++;网络游戏;成三棋;广度搜索算法
ABSTRACT
Withthedramaticdevelopmentofscienceandtechnologyespeciallythecomputernetworkingtechnology.Ourlifehasanunprecedentedchange.Peoplewholiveinthemetropoliscan’thelptothinkingofexperiencingthefunofchildhoodagain,butbitterlytofindthattimepastandneverfindagain.Thechildrenburninthecityalsowanttohavemorefunnygames,andtotheirparent,itsveryhelpfulforthechildren’growthtolearnmoreaboutrurallives.
Threechess,aruralgameplayedinchildhood,putsustogether,aswellasmakesruralentertainmentmoresimpleandpracticalwithcombiningcomputernetworkingtechnology.
Thegame,basedonVC++,hasnotonlyrealizedmanyfunctions,suchasacomfortableinterfacebetweenhumanbeingsandmachine,anetworkcompetitionandsingle-machinecompetition,etc.Butownedathickruralsflavorssimpleandeasyoperation,strongentertainmentandinteresting,whichmainlyareachievedbyvirtueofreferingthecorealgorithmofgobang,etc,adoptingnetworksockettechnology,quotingMFCclasslibraryandWINAPIfunctions.
Keywords:
VC/VC++;NetWorkGame;Three-in-alow;Breadthfirstsearchalgorithm
1绪论
1.1课题背景
游戏软件是当世界发展最迅速,最有影响力,最有潜力与活力的领域之一[1]。游戏软件深受广大青年人喜爱,而且在发达国家中老年人也有大部分喜欢游戏的,因此游戏软件在很大程度上给予绝大部分人精神上的娱乐。第二次世界大战以后,电子计算机技术得到了突飞猛进的发展。先是由晶体管代替了笨重的真空管,后来出现了集成电路和大规模集成电路,使电子子计算机一代一代实现更新,同时软件技术也发展迅速[2]。在美国,集中了许多计算机软件的设计人才,他们工作之余,时常喜爱编一种能与人斗智的“游戏”,以此来锻炼编程的能力。这种“游戏”花样繁多,但其特点都是利用计算机软件事先设计好的“分析”、“判断”能力反过来与人较量。由于不断修改更新,使计算机的“智力”水平与人难分高低。到了90年代,游戏软件已经为世界各国的人使用,BLACKISLAND和Blizzard。
这两个强大的游戏制作组起到了巨大的带动作用,还有中国的洛河工作室在国内也起到了巨大作用,他们让很多很多人喜欢上了游戏软件,打开了这个市场。
如今游戏软件产业已经受到了广泛的关注,它年轻有潜力而且吸引人,让人们日益丰富的生活需求得以满足[3]。
成三棋,规则较简单,易学易懂,也是一款传统的棋类游戏,她的历史也非常悠久,在公元前500多年就在我国出现了,是一种老少皆宜的棋类活动。
特别是在农村,不会玩这个游戏的很少的,当然,随着人们的物质文化生活的不断丰富,现在下成三棋的人越来越少。
她没有围棋、象棋这样繁复,与五子棋有些相似,但又有其自身独特的魅力,方寸之间,便能突显弈者的奇思妙想。
成三棋游戏,旨在为游戏爱好者提供一种新的娱乐途径,让大家在娱乐的同时锻炼思维,增长智慧,也将成三棋这一传统的棋类游戏利用网络进行推广发扬,使之广为流传。
2系统实现技术与开发环境
2.1C/C++简介
C语言的特点:
C语言是一种结构化语言。
它层次清晰,便于按模块化方式组织程序,易于调试和维护。
C语言的表现能力和处理能力极强。
它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。
它还可以直接访问内存的物理地址,进行位(bit)一级的操作。
由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。
既可用于系统软件的开发,也适合于应用软件的开发。
此外,C语言还具有效率高,可移植性强等特点。
因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言[4]。
C++简介:
在C的基础上,一九八三年又由贝尔实验室的BjarneStrou-strup推出了C++。
C++进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。
C++目前流行的最新版本是BorlandC++4.5,SymantecC++6.1,和MicrosoftVisualC++2.0。
C++提出了一些更为深入的概念,它所支持的这些面向对象的概念容易将问题空间直接地映射到程序空间,为程序员提供了一种与传统结构程序设计不同的思维方式和编程方法。
因而也增加了整个语言的复杂性,掌握起来有一定难度[5]。
2.2VC开发环境
MicrosoftVisualC++,(简称VisualC++、MSVC、VC++或VC)微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI等编程语言。
VC++整合了便利的除错工具,特别是整合了微软视窗程式设计(WindowsAPI)、三维动画DirectXAPI,Microsoft.NET框架。
目前最新的版本是MicrosoftVisualC++2010[6]。
2.2.1GDI绘图
GDI(GraphicsDeviceInterface,图形设备接口)是Windows操作系统的传统图形子系统,负责与设备无关的图形绘制,Win32API为应用程序提供了丰富的绘图函数和功能,MFC对它们进行了C++类封装,参见表2-1。
表2-1
Windows应用程序
MFC
Win32API
执行程序
用户界面(User)
GDI+
图形子系统(GDI)
设备驱动程序
内核(Kernel)
图形驱动程序
硬件抽象层(HAL)
计算机硬件
GDI与Windows操作系统(其中彩色部分为操作系统)传统GDI是随Windows1.0于1985年11月推出的,新式GDI+则是随WindowsXP于2001年10月推出的GDI的改进版,增加了α混色、渐变画刷、样条曲线、矩阵变换、图像处理、持久路径等新功能。
随WindowsVista及.NET框架3.0微软于2006年11月又推出了基于DirectX和.NET框架的全新图形子系统WPF(WindowsPresentationFoundation,视窗显示/展现基础),它统一了桌面和浏览器等客户端应用程序的图形界面,采用XAML声明式编程,将用户界面的设计和编程彻底分离开来,是Windows的下一代GUI显示系统。
2.2.2对话框
对话框是一种次要窗口,包含按钮和各种选项,通过它们可以完成特定命令或任务。
查找和替换对话框对话框与窗口有区别,它没有最大化按钮、没有最小化按钮、大都不能改变形状大小。
(“打开文件”对话框是可以改变大小的)对话框:
是人机交流的一种方式,用户对对话框进行设置,计算机就会执行相应的命令。
对话框中有单选框、复选框等。
对话框可以分为模式对话框和无模式对话框两种类型。
为了能够方便的操作对话框,MFC为用户提供了CDialog类。
它是在屏幕上显示对话框的基类,与对话框资源紧密相关,提供了管理对话框的接口,封装了一些对话框的相关操作。
从CDialog的定义代码可以看出,Cdialog提供了两套构建Cdialog对象的系统,分别用于模式对话框和无模式对话框。
无模式对话框对象的构建过程,它首先调用缺省的构造函数生成对话框对象,然后调用Create函数创建和初始化对话框。
Cdialog类中的Create函数有两种函数原型:
BOOLCreate(LPCTSTRlpszTemplateName,CWnd*pParentWnd=NULL);
BOOLCreate(UINTnIDTemplate,CWnd*pParentWnd=NULL);
2.2.3消息响应
VC++的MFC类库实际上是Windows下C++编程的一套最为流行的类库[6]。
MFC的框架结构大大方便了程序员的编程工作,但是为了更加有效、灵活的使用MFC编程,了解MFC的体系结构往往可以使编程工作事半功倍。
它合理的封装了WIN32API函数,并设计了一套方便的消息映射机制。
由于视类窗口始终覆盖在框架类窗口之上,因此所有操作,包括鼠标单击、鼠标移动等操作都只能由视类窗口捕获。
一个MFC消息响应函数在程序中有三处相关信息:
函数原型、函数实现和以及用来关联消息和消息响应函数的宏。
(1)在消息响应函数的原型代码中,函数声明的前部有一个afx_msg限定符,也是一个宏,该宏表明这个函数是一个消息响应函数的声明。
(2)消息映射宏:
在视图类的源文件中,BEGIN_MESSAGE_MAP()END_MASSAGE_MAP()这两个宏之间定义了消息映射表,例如对于画线,其中有一ON_WM_LBUTTONDOWN()消息映射宏,这个宏的作用就是把鼠标左键按下消息(WM_LBUTTONDOWN)与一个消息响应函数关联起来,通过这种机制,一旦有消息产生,程序就会调用相应的消息响应函数来进行处理。
(3)消息响应函数的定义[7]:
在视图类的源文件中,可以看到OnLButtonDown函数的定义。
头文件中在两个AFX_MSG注释宏之间是消息响应函数原型的声明。
源文件中有两处:
一处是在两个AFX_MSG_MAP注释宏之间的消息映射宏,通过这个宏把消息与消息响应函数关联起来;另一处是源文件中的消息响应函数的实现代码。
在Win32应用程序中,当有消息产生时,操作系统会把这条消息放到应用程序的消息队列中,应用程序通过GetMessage函数从这个队列中取出一条具体的消息,并通过DispatchMessage函数把消息交给操作系统,调用的是应用程序的窗口过程,即窗口过程函数WndProc进行处理,然而在MFC程序中,并不是按这种途径进行处理的,只要定义了与消息有关的三处信息后,便可实现消息的响应处理。
MFC中采用的这种消息处理机制称为MFC消息映射机制。
MFC消息映射机制的具体实现方法是:
在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。
在消息映射表中,消息与对应的消息处理函数指针是成对出现的。
某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中。
当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就可知道该类能否处理此消息。
如果能处理此消息,则同样依照静态表能很容易找到并调用对应的消息处理函数。
MFC消息映射机制的实际实现过程:
MFC在后台维护了一个窗口句柄与对应的C++对象指针的对照表,以例中的CDrawView类为例,与CDrawView对象相关的有一个窗口,窗口当然有它的窗口句柄,该句柄与CDrawView对象的一个指针(即CDrawView*)存在一一对应关系,在窗口句柄与C++对象对照表中就维护了这种对应关系。
当收到某一个消息时,消息的第一个参数就指明了该消息与哪个窗口句柄相关,通过对照表,就可以找到与之相关的C++对象指针。
然后把这个指针传递给应用程序框架窗口类的基类,后者会调用一个名为WindowProc函数,该函数定义位于WinCore.cpp中.CWnd:
:
WindowProc函数内部调用了一个OnWndMsg函数,真正的消息路由,也就是消息映射是由此函数完成的。
OnWndMsg函数的处理过程:
首先判断消息是否有消息响应函数。
判断方法是在相应窗口类中查找所需的消息响应函数。
因为传递给WindowProc的是窗口子类指针,OnWndMsg会到相应的子类头文件中查找,看看DECLARE_MESSAGE_MAP()宏之上,两个AFX_MSG注释宏之间是否有相应的消息响应函数原型的声明;再到子类的源文件中看看,BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()两个宏之间是否有相应的消息映射宏。
如果通过上述步骤,找到了消息响应函数,接着就调用该响应函数,对消息进行处理。
如果在子类中没有找到,那么就交由基类进行处理。
通过以上步骤,MFC就实现了具体的消息映射,从而完成对消息的响应。
2.2.4游戏编程思想
游戏架构参考示意图2-1:
图2-1游戏编程模块
Launcher的功能:
(1)Windows主函数,创建窗口,以及处理消息
(2)创建游戏,调用游戏的初始化、运行、销毁函数。
(3)模板式的框架,准备好一个合适自己使用的,主要是对消息处理过程的编写,直接影响游戏之外窗口的响应情况。
Game的功能:
(1)初始化游戏,创建Model、View和Timer
(2)运行游戏,通过Timer来控制刷新帧率,然后获取操作,调用Model执行游戏逻辑,然后使用调用View画出画面。
(3)销毁,将Model、View和Timer销毁。
Model的功能:
(1)游戏逻辑,游戏需要执行的运算都放在这里,可以通过创建其它的类来完成。
(2)提供操作接口,运行游戏时根据用户操作来调用。
(3)存储游戏的绘制信息,View将使用这些信息绘制画面。
View的功能:
(1)绘制画面
Timer的功能:
(1)定时器,给需要时间控制的类提供定时的功能。
最主要的部分是Model,所有的游戏逻辑都在这里实现,设计到Model的应该只使用标准C++元素,方便移植。
单人游戏和多人游戏,都应通过Model提供的接口来实现。
View中,应该只使用Model提供的信息,绘制画面如果需要增加GUI,应该再单独创建类,然后加入到Game中。
例如:
俄罗斯方块:
添加Block类,实现各种方块。
在Model中实现方块的下落与清除,提供出操作的接口。
实现双人对战,创建两个Model就可以了[8]。
2.3MFC总述
MFC是WinAPI与C++的结合,API,即微软提供的Windows下应用程序的编程语言接口,是一种软件编程的规范,用于在C++环境下编写应用程序的一个框架和引擎,VC++是Windows下开发人员使用的专业C++SDK(SDK,StandardSoftWareDevelopKit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包,MFC作为与VC++血肉相连的部分同BC++集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC++专配的[9]。
2.3.1MFC中类的结构及联系
MFC中类的继承、派生结构及联系
图2-2应用层结构
图2-3windows支持层结构
图2-4继承自CObject
2.3.2MFC中类的作用
CAboutDlg类是用来建立对话框的,与对话框有关的问题都有这个类来处理。
CXXXApp类是自己建的类XXX代表自己的项目名称,是实现自己内容的主要类。
CXXXDoc类是用来处理文档的类。
CXXXView类是用来处理界面的视图类。
CMainFrame类是主框架类[10]。
3需求分析
3.1游戏用户分析
本游戏主要针对的是年龄在10至15岁的未成年人,这阶段年龄的孩子正处于好奇心特别重之时。
对世界的认知也正处于高峰期,了解社会了解贫苦人群体验乡村生活对他们形成完整的世界观有莫大的促进作用。
3.2游戏功能分析
通过软件功能的分析,根据五子棋爱好者的需求,得出以下需求信息:
(1)具有重新开始功能。
(2)具有认输功能。
(3)具有提示该轮到哪一方下棋的功能。
(4)退出游戏功能。
(5)判断胜负功能。
(6)悔棋功能。
还有用户对游戏界面的要求,通过上述的用户需求,我们可以得出一个总体的设计方案。
由上述的用户需要,可以对程序的基本功能进行一个有效的分析,规定下游戏的基本功能。
3.3游戏功能模块主要功能
(1)登录模块
登录模块是解决登录及注册问题的模块,为用户建立个人信息方便用户与其他用户的联系。
也有利于本游戏的推广。
(2)下棋模块
主要实现下棋功能,分阶段的游戏不仅有利于管理,也有利于游戏者的发挥。
(3)英雄排行榜模块
有利于用户了解对手,也为用户提升自己的能力寻找合适的对手提供了方便。
4系统概要设计
4.1总体设计
4.1.1游戏总体类的设计
图4-1类的关系设计
4.1.2游戏总体E-R图设计
图4-2游戏E-R图
4.2模块结构设计
4.2.1游戏登陆者管理模块
(1)注册或登录界面设计
1)昵称2)确认3)取消
(2)游戏界面设计,见图4-3:
(a)(b)
(c)
图4-3界面结构设计
(3)人性化棋子设计,见下图4-4:
(a)(b)
图4-4棋子石子、棍子
4.2.2游戏者下棋实现模块
游戏流程见下图4-3:
图4-3游戏流程图
4.2.3数据流网络传输模块
传输逻辑图见下图4-4:
图4-4网络数据流程图
游戏程序分两个部分,网络连接部分和各方自己的操作部分,网络连接部分结构如图。
各方操作部分的模式为:
接受到数据—产生数据—发送数据。
4.3英雄榜设计
4.3.1英雄榜数据结构设计
游戏者及其基本信息是英雄榜的基础,在此基础上要对其进行数据排序选择出前三名。
本游戏由于服务器未能实现故而采用本地数据存储法,存储到本地的硬盘中在开始时调用ReadScore()函数读写,而后由WriteScore()排序。
4.3.2逻辑结构设计
英雄榜的数据流动见下图4-5:
图4-5英雄榜逻辑设计结构
4.4游戏规则说明
4.4.1下棋阶段
(1)首先双方在棋盘上轮流投子。
(2)在投子期间,如果有某一方的某一行或一列或斜列,都为该方棋子(也就是成三)该方选择打子(打掉必须是对方的非成三子,如果对方的棋子都是成三子,便换手)。
该打子位置被贴上一张大小与棋子一样大小的图片(表示该位置不能投子。
在挪子部分的时候,该位置被撤销)。
4.4.2行棋阶段
(3)当后手方投下第九子,开始由先手方移动棋子,进入挪子部分,开始轮流挪子。
(4)挪子期间的规则是:
当需要点击想移动某一棋子时,该棋子便高亮。
再点击它将去的位置时,原来的位置棋子消失新位置出现该方棋子。
当点击某棋子使其高亮。
该期间的打子规则与投子期间几乎一样,就是被打子位置不会被贴图,而会直接消失。
(5)当一方棋子数少于3或该方走棋时发现无棋可移动(也就该方是没气),则该方为输了,棋局结束。
5系统详细代码设计
5.1游戏者登录管理模块
5.1.1游戏者登录友好界面的实现
图5-1登录对话框
BOOLCMainFrame:
:
PreCreateWindow(CREATESTRUCT&cs)//界面初始化函数
{
if(!
CFrameWnd:
:
PreCreateWindow(cs))
returnFALSE;
intUI_device_width=800,UI_device_height=600;//设置界面宽与高
cs.x=10;//界面在屏幕的左上角坐标
cs.y=10;
cs.cx=UI_device_width;
cs.cy=UI_device_height;
returnTRUE;
}
voidCTIRView:
:
O
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业论文 定稿