五子棋___毕业论文

上传人:桔**** 文档编号:493695145 上传时间:2023-03-03 格式:DOC 页数:42 大小:201KB
返回 下载 相关 举报
五子棋___毕业论文_第1页
第1页 / 共42页
五子棋___毕业论文_第2页
第2页 / 共42页
五子棋___毕业论文_第3页
第3页 / 共42页
五子棋___毕业论文_第4页
第4页 / 共42页
五子棋___毕业论文_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《五子棋___毕业论文》由会员分享,可在线阅读,更多相关《五子棋___毕业论文(42页珍藏版)》请在金锄头文库上搜索。

1、【摘要】本论文主要阐述以面向对象的程序开发语言VC+为开发工具,设计一个五子棋游戏。本系统是个小型游戏,可以单机使用,也可以网络两个人游戏,也可以和电脑进行游戏。论文首先介绍了开发背景及开发语言的介绍。然后介绍设计该游戏的框架结构,然后介绍了程序的设计过程,以及程序的相关算法。关键词:游戏, 系统 ,图片, VISUAL C+目 录1引 言 11.1五子棋介绍 11.2开发背景 11.3开发环境及运行环境 11.3.1开发环境 11.3.2运行环境 12软件架构 22.1棋盘类 22.2游戏模式类 33棋盘类CTable 43.1主要成员变量说明 43.1.1网络连接标志 43.1.2棋盘等待

2、标志 43.1.3网络套接字 43.1.4棋盘数据 43.1.5游戏模式指针 53.2主要成员函数说明 53.2.1套接字的回调处理 53.2.2清空棋盘 53.2.3绘制棋子 53.2.4左键消息 63.2.5绘制棋盘 63.2.6对方落子完毕 63.2.7设置游戏模式 63.2.8胜负的判断 74游戏模式类 84.1主要成员变量说明 94.1.1棋盘指针 94.1.2落子步骤 94.2主要成员函数说明 94.2.1悔棋操作 94.2.2初始化操作 94.2.3接收来自对方的消息 104.2.4发送落子消息 104.2.5胜利后的处理 105消息机制 115.1消息机制的架构 115.2各种

3、消息说明 115.2.1落子消息 125.2.2悔棋消息 125.2.3同意悔棋消息 135.2.4拒绝悔棋消息 135.2.5和棋消息 135.2.6同意和棋消息 135.2.7拒绝和棋消息 145.2.8认输消息 145.2.9聊天消息 145.2.10对方信息消息 155.2.11再次开局消息 155.2.12同意再次开局消息 156主要算法 166.1判断胜负 166.2人机对弈算法 186.2.1获胜组合 196.2.2落子后处理 196.2.5防守策略 236.2.6选取最正确落子 247几点补充说明 258心得体会 26参考文献 27致 谢 281引言1.1五子棋介绍五子棋是起源

4、于中国古代的传统黑白棋种之一。现代五子棋日文称之为“連珠,英译为“Renju,英文称之为“Gobang或“FIRFive in a Row的缩写,亦有“连五子、“五子连、“串珠、“五目、“五目碰、“五格等多种称谓。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快,又有古典哲学的高深学问“阴阳易理;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场的概念,亦有“点的连接。它是中西文化的交流点,是古今哲理的结晶。1.2开发背景当前网络上流传的五子棋游戏功能

5、并不尽善尽美,其中最主要的问题就是人机对战和网络对战不能够一起实现,所以我决定开发1一个既能够人机对战,又能够进行网络对战的五子棋系统。1.3开发环境及运行环境1.3.1开发环境l Intel Pentium 4 2.0GHz,512M内存,80G硬盘l Microsoft Windows 2000 Professionall Microsoftl Microsoft Developer Network for Visual Studio.NET 2003l1.3.2运行环境l Intel Pentium 2及以上处理器,32M以上内存,4G以上硬盘l Microsoft Windows 9X

6、/NT操作系统l 800*600或以上的屏幕分辨率2软件架构:二人游戏类一人游戏类游戏类指针棋盘类主界面用户图2.1 软件架构考虑到整个的下棋过程无论对方是电脑抑或其他网络玩家可以分为:己方落子、等待对方落子、对方落子、设置己方棋盘数据这一系列过程,因此一人游戏类、二人游戏类和棋盘类之间的关系参考了AbstractFactory抽象工厂模式,以实现对两个不同模块进行一般化的控制。22.1棋盘类整个架构的核心局部,类名为CTable。封装了棋盘的各种可能用到的功能3,如保存棋盘数据、初始化、判断胜负等。用户操作主界面,主界面与CTable进行交互来完成对游戏的操作。2.2游戏模式类用来管理人机对

7、弈/网络对弈两种游戏模式,类名为CGame。CGame是一个抽象类,经由它派生出一人游戏类COneGame和网络游戏类CTwoGame,如:抽象类CGameCOneGameCTwoGame 图2.2 CGame类派生关系这样,CTable类就可以通过一个CGame类的指针4,在游戏初始化的时候根据具体游戏模式的要求实例化COneGame或CTwoGame类的对象;然后利用多态性5,使用CGame类提供的公有接口就可以完成不同游戏模式下的不同功能了。3棋盘类CTable3.1主要成员变量说明3.1.1网络连接标志m_bConnected用来表示当前网络连接的情况,在网络对弈游戏模式下客户端连接效

8、劳器的时候用来判断是否连接成功;事实上,它也是区分当前游戏模式的唯一标志。3.1.2棋盘等待标志m_bWait与m_bOldWait由于在玩家落子后需要等待对方落子,m_bWait标志就用来标识棋盘的等待状态。当m_bWait为TRUE时,是不允许玩家落子的。在网络对弈模式下,玩家之间需要互相发送诸如悔棋、和棋这一类的请求消息,在发送请求后等待对方回应时,也是不允许落子的,所以需要将m_bWait标志置为TRUE。在收到对方回应后,需要恢复原有的棋盘等待状态,所以需要另外一个变量在发送请求之前保存棋盘的等待状态做恢复之用,也就是m_bOldWait。等待标志的设置,由成员函数SetWait和R

9、estoreWait完成。3.1.3网络套接字m_sock和m_conn在网络对弈游戏模式下,需要用到这两个套接字对象。其中m_sock对象用于做效劳器时的监听之用,m_conn用于网络连接的传输。3.1.4棋盘数据m_data这是一个15*15的二位数组,用来保存当前棋盘的落子数据。其中对于每个成员来说,0表示落黑子,1表示落白子,-1表示无子。3.1.5游戏模式指针m_pGame这个CGame类的对象指针是CTable类的核心内容。它所指向的对象实体决定了CTable在执行一件事情时候的不同行为,具体的内容请参见“游戏模式一节。3.2主要成员函数说明3.2.1套接字的回调处理Accept、

10、Connect、Receive本程序的套接字派生自MFC的CAsyncSocket类6,CTable的这三个成员函数就分别提供了对套接字7回调事件OnAccept、OnConnect、OnReceive的实际处理,其中尤以Receive成员函数重要,它之中包含了对所有网络消息参见“消息机制一节的分发处理。3.2.2清空棋盘Clear在每一局游戏开始的时候都需要调用这个函数将棋盘清空,也就是棋盘的初始化工作。在这个函数中,主要发生了这么几件事情:l 将m_data中每一个落子位都置为无子状态-1。l 按照传入的参数设置棋盘等待标志m_bWait,以供先、后手的不同情况之用。l 使用delete将

11、m_pGame指针所指向的原有游戏模式对象从堆上删除。3.2.3绘制棋子Draw这无疑是很重要的一个函数,它根据参数给定的坐标和颜色绘制棋子。绘制的详细过程如下:l 将给定的棋盘坐标换算为绘图的像素坐标。l 根据坐标绘制棋子位图。l 如果先前曾下过棋子,那么利用R2_NOTXORPEN将上一个绘制棋子上的最后落子指示矩形擦除。l 在刚绘制完成的棋子四周绘制最后落子指示矩形。3.2.4左键消息OnLButtonUp作为棋盘唯一响应的左键消息,也需要做不少的工作:l 如果棋盘等待标志m_bWait为TRUE,那么直接发出警告声音并返回,即禁止落子。l 如果点击时的鼠标坐标在合法坐标(0, 0)(1

12、4, 14)之外,亦禁止落子。l 如果走的步数大于1步,方才允许悔棋。l 进行胜利判断,如胜利那么修改UI状态并增加胜利数的统计。l 如未胜利,那么向对方发送已经落子的消息。l 落子完毕,将m_bWait标志置为TRUE,开始等待对方回应。3.2.5绘制棋盘OnPaint每当WM_PAINT消息触发时,都需要对棋盘进行重绘。OnPaint作为响应绘制消息的消息处理函数使用了双缓冲技术,减少了屡次绘图可能导致的图像闪烁问题。这个函数主要完成了以下工作:l 装载棋盘位图并进行绘制。l 根据棋盘数据绘制棋子。l 绘制最后落子指示矩形。3.2.6对方落子完毕Over在对方落子之后,仍然需要做一些判断工

13、作,这些工作与OnLButtonUp中的类似,在此不再赘述。3.2.7设置游戏模式SetGameMode这个函数通过传入的游戏模式参数对m_pGame指针进行了初始化,代码如下:void CTable:SetGameMode( int nGameMode ) if ( 1 = nGameMode ) m_pGame = new COneGame( this ); else m_pGame = new CTwoGame( this ); m_pGame-Init();这之后,就可以利用OO的继承和多态特点8来使m_pGame指针使用相同的调用来完成不同的工作了,事实上,COneGame:Init

14、和CTwoGame:Init都是不同的。3.2.8胜负的判断Win这是游戏中一个极其重要的算法,用来判断当前棋盘的形势是哪一方获胜。其详细内容请参见“主要算法一节。4游戏模式类CGame这个类负责对游戏模式进行管理,以及在不同的游戏模式下对不同的用户行为进行不同的响应。由于并不需要CGame本身进行响应,所以将其设计为了一个纯虚类9,它的定义如下:class CGameprotected: CTable *m_pTable;public: / 落子步骤 list m_StepList;public: / 构造函数 CGame( CTable *pTable ) : m_pTable( pTable ) / 析构函数 virtual CGame(); / 初始化工作,不同的游戏方式初始化也不一样 vi

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号