网络五子棋设计与实现.docx
- 文档编号:29794793
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:34
- 大小:187.08KB
网络五子棋设计与实现.docx
《网络五子棋设计与实现.docx》由会员分享,可在线阅读,更多相关《网络五子棋设计与实现.docx(34页珍藏版)》请在冰豆网上搜索。
网络五子棋设计与实现
摘要..…………………………………….…..……………………….………………..1
关键词..……………………………………..………………..………………………..1
1前言..…………………….……………..……….……….…………………………1
2需求分析..……………………………..…….…………….………………………2
2.1开发背景..……………………………..…………….….……………………….2
2.2研究现状………………………………………………………………………...2
2.3开发目的及意义..…………………………..….………….…………………….3
2.4任务概述..…………………………………..….…………….………………….3
3开发环境及运行环境..………………………..….…………….…………………4
3.1开发环境..……………………………………...……………….……………….4
3.2运行环境..……………………………………..….…………….……………….4
4软件架构..……………………………………..….………………….……………4
4.1 棋盘类..……………………………………...…………………….…………….5
4.2 游戏模式类..…………………………….…..………………….……………….5
5 棋盘类—Ctable....……………………………………………………….………...6
5.1主要成员变量说明………………………..……...………………….………….6
5.1.1 网络连接标志—m_bConnected....………………………………….………...6
5.1.2 棋盘等待标志—m_bWait与m_bOldWait…………….…………….……….6
5.1.3 网络套接字—m_sock和m_conn….……………...….…………….………...6
5.1.4棋盘数据—m_data………………………………….……………….………..6
5.1.5 游戏模式指针—m_pGame………………….……………………….…….6
5.2 主要成员函数说明.……………………………………………………….……6
5.2.1 套接字的回调处理—Accept、Connect、Receive……………….….………6
5.2.2 清空棋盘—Clear...…………………………………….………….….……….6
5.2.3 绘制棋子—Draw.……………………………………….………….…………7
5.2.4 左键消息—OnLButtonUp....…………………………..……………………..7
5.2.5 绘制棋盘—OnPaint.……………………………….…….…………….…...7
5.2.6对方落子完毕—Over..……………………………….………………….……7
5.2.7设置游戏模式—SetGameMode..………………....……….………...…….……8
5.2.8胜负的判断—Win..……………………...…….….………………...……….….8
6游戏模式类—Cgame……………..……………..…………………...……...…....8
6.1 主要成员变量说明….……………………...…...………………...……………9
6.1.1 棋盘指针—m_pTable….………….……….………....…………...……….…9
6.1.2 落子步骤—m_StepList.....…………………….….………...………………..9
6.2 主要成员函数说明….…………………………….….………...……………...9
6.2.1悔棋操作—Back....…………………………….….……………...………….9
6.2.2 初始化操作—Init....…………...….……………….…….…….……………..9
6.2.3 接收来自对方的消息—ReceiveMsg………….…………………………...10
6.2.4 发送落子消息—SendStep…..………………………..……………………..10
6.2.5 胜利后的处理—Win….……………………………………….……………10
7 消息机制….……………………………………………………………………..10
7.1 消息机制的架构…..…………………………….…………………………….10
7.2 各种消息说明….……………………………….……………………………..11
7.2.1 落子消息—MSG_PUTSTEP.…..…………………………………………..11
7.2.2 聊天消息—MSG_CHAT..…………………………………………………..11
7.2.3 悔棋消息—MSG_BACK………..………………………………………….12
7.2.4 同意悔棋消息—MSG_AGREEBACK.…….………………………………13
7.2.5 拒绝悔棋消息—MSG_REFUSEBACK..………..…………………………13
7.2.6 和棋消息—MSG_DRAW.………….………………………………………13
7.2.7 同意和棋消息—MSG_AGREEDRAW…………...……………………….13
7.2.8 拒绝和棋消息—MSG_REFUSEDRAW…………….……………………..14
7.2.9 认输消息—MSG_GIVEUP…………..…………………………………….14
7.2.10 对方信息消息—MSG_INFORMATION……………..…………………..15
7.2.11 再次开局消息—MSG_PLAYAGAIN……………………………………..15
7.2.12 同意再次开局消息—MSG_AGREEAGAIN…………..…………………15
8 主要算法………………..……………………………………………………….15
8.1 判断胜负………………………………………………………………………15
8.2 人机对弈算法………………..………………………………………………..18
8.2.1 获胜组合…………………………………………………………………….18
8.2.2 落子后处理………….………………………………………………………18
8.2.3 查找棋盘空位……………………………………………………………….19
8.2.4 落子打分…………….………………………………………………………19
8.2.5 防守策略…………………………………………………………………….21
8.2.6 选取最佳落子……………………………………………………………….22
9总结…………..………………………………………………………………….23
参考文献…………………………………………………………………………….23
致谢……………………………………………………………………………….24
网络五子棋设计与实现
摘要:
本文主要对五子棋网络游戏技术进行研究,以VC++为平台设计并实现了一个基于C/S模式的五子棋网络对战游戏,本设计包括网络对弈与人机对弈两种模式,并通过MFC与网络编程实现各功能模块,包括网络聊天、战绩统计、悔棋操作、和棋操作、认输操作以及美观大
方的操作界面。
关键词:
五子棋;网络游戏;人工智能;C/S模式
DesignandImplementationofRenjuNetworkGame
Abstract:
ThisarticlemainlydoestheresearchtotheRenjunetworkgametechnology,takingVC++astheplatform,IdesignandimplementanetworkwargamebasedontheC/Smode.Thenetworkdesignincludesgameswiththeman-machinegamestwomodels.AndthroughMFCandnetworkprogrammingofthemodules,includingInternetchat,featstatistics,theoperationafterwards,adrawinchessoperationconcedepleasingtotheeyeoperation.
Keywords:
Renju;networkgame;artificialintelligence;C/Smode
1前言
随着互联网技术的发展,网络游戏已成国民经济的一部分并不段发展壮大。
而网络五子棋游戏是起源于中国古代的传统黑白棋种之一,具有一定的历史渊源,且游戏易学易懂、上手快具有很大市场份额。
五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化渊源流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。
它是中西文化的交流点,是古今哲理的结晶。
一个好的五子棋游戏应该是集休闲、娱乐于一体;更应该成为玩家相互交流的一个重要窗口,作为计算机专业学生,见过玩过非常多的网络五子棋游戏,但大部分网络上流传的五子棋游戏功能并不尽善尽美,其中最主要的问题就是人机对战和网络对战不能够一起实现,所以本人决定借毕业设计开发一个既能够人机对战,又能够进行网络对战的五子棋系统,这也正是选题的意义所在。
2需求分析
2.1开发背景
游戏作为日常休闲的娱乐活动之一,历经了电视游戏、电脑单机游戏、电脑网络游戏不同的发展阶段。
互联网的出现为电脑游戏行业发展注入了新的活力,凭借信息双向交流、速度快、不受空间限制等优势,让真人参与游戏,提高了游戏的互动性、仿真性和竞技性,使玩家在虚拟世界里可以发挥现实世界无法展现的潜能,改变了单机版游戏固定、呆板、与机器对话的状况,而网络五子棋游戏更是具备这所有的特点。
当前网络上流传的五子棋游戏功能并不尽善尽美,其中最主要的问题就是人机对战和网络对战不能够一起实现,所以本人决定开发一个既能够人机对战,又能够进行网络对战的五子棋系统。
2.2研究现状
网络作为一种新兴的传播方式,主要包括三大内容:
娱乐、资讯、通讯。
提到网络娱乐,过去主要指的是单机版游戏,没有引入网络的概念。
但随着科技的发展,游戏娱乐产业也在成长。
目前,国内的游戏娱乐产业正处于起步阶段,特点表现为:
第一,它是一种文化的传播。
娱乐产业可以潜移默化地改变人的观念,当前,很多多媒体的播放已被电脑网络所取代。
第二,网络游戏加强了人与人的沟通。
第三,网络游戏具有一定的教育意义。
网络游戏所具有的角色扮演的功能,使得玩家能通过互助更好地完成游戏中的各项任务。
网络无国界,游戏在网络文化产业世界的发展中地位会越来越高,因此开发一个功能强大界面美观的网络五子棋游戏是完全可行的。
目前在国外,休闲游戏如棋类等,玩家的年龄跨度非常大,这和我国目前网游市场以青少年为主要消费人群的状况截然不同。
其实,网络可以解决空间的问题,网络和生活越来越息息相关,因此,开辟适合各个年龄层的游戏产品迫在眉睫。
同时,这也涉及到一个企业开发的能力。
娱乐产业发展到一定的程度,通过不断锻炼和经验的积累,完全可以通过融入娱乐的成分把教条的东西深入浅出地展现给消费者。
就国内的发展来看,最近的这两三年内国内的游戏公司如雨后春笋般的成立,所开发或代理的网络游戏更是不胜枚举。
以全球游戏业界的发展来看,这几年韩国的表现最为突出,特別是在网络游戏的技术研发与游戏制作方面,其所发行的网络游戏更成为全球游戏产业重要的指标之一。
去年在美国洛杉矶所举行的E3(ElectronicEntertainmentExposition)展中,已经有几家韩国厂商挤入世界第一线的游戏开发厂商之列。
近几年来,由于3D硬体绘图技术的突破,使得即时描绘的书面越来越精致,而且3D游戏性更多元化更逼近真实世界,因此在遊戏产业中,3D游戏已经逐渐取代2D游戏为游戏市场的主流,即使是网络游戏,也慢慢趋向3D化。
然而游戏3D化将会带来的游戏开发上的困难等问题,这些问题以后都需要逐步解决。
2.3开发目的及意义
使用VC++开发一个极受大众欢迎的棋类游戏-网络五子棋游戏作为学习和掌握VC++的方法,从中学习VC++开发软件所要经历的过程,以便在以后的工作中能够熟练的掌握程序开发所具备的条件,选择网络五子棋这个课题是因为五子棋在中国的历史已经相当悠久,几乎人人都会玩,具有广阔的市场前景。
2.4任务概述
本课题的主要任务为基于互联网络游戏娱乐而设计的,游戏的两种模式(单机版与网络版)给用户提供了不同的体验,网络聊天功能也给玩家提供了一个沟通平台,这也是与其他类别游戏的本质区别所在。
本设计主要功能实现包含悔棋、和棋、认输、聊天、单机游戏与网络对战游戏、战绩统计、音乐欣赏以及优美的外观设计给用户提供了更好的选择权利、视觉效果以及更强的娱乐感;其中:
(1)单人游戏模式,玩家与事先通过算法设置好的各种程序对弈。
(2)网络对弈模式,玩家通过网络IP绑定建立联接实现双方对弈。
(3)更改玩家姓名功能,当玩家想在网络上下棋给时给自己取过好听的有吸引力的名字就可以通过此功能实现。
(4)战绩统计功能,用来统计玩家在一定时间段的输赢情况。
(5)关于功能,用来显示版权信息。
(6)附加功能,当玩家累了想放松下就可以通过此功能来放些音乐听或者更改一下背景图案。
(7)悔棋功能,在不同的游戏模式下悔棋的方式不同,在人机对弈模式下计算机允许玩家自由悔棋,而在网络对弈模式下则要向对方发送请求才能实现。
(8)和棋功能,此功能是针对网络对弈模式下设计的,当玩家由于各种原因不能定输赢时就可以通过此功能向对方请求和棋。
(9)认输功能,当玩家觉得自己败局已定时为了节约时间可以通过此功能向对方请求认输。
(10)聊天功能,通过MFC的网络编程实现,双方可以通过此功能在下棋时互相交流经验或感情。
本设计基于面向对象VC++程序设计,具有良好的通用性、兼容性、可操作性、可扩展性等,程序所有功能都做到风格统一、设计精巧、美观大方、能体现专业的美工和窗口设计水准;所有功能操作做到便捷实用能够对用户的各种操作提供友好提示;系统的设计和实施应遵循各类网络协议和国际标准,具备良好的开放性,充分考虑系统的可扩展性。
3开发环境及运行环境
3.1开发环境
(1)Intel®Pentium®42.0GHz,512M内存,80G硬盘。
(2)Microsoft®Windows™2000Professional.
(3)Microsoft®VisualC++6.0.
(4)Microsoft®DeveloperNetworkforVisualStudio.NET2006.
(5)VisualAssistX10.1.1301.0.
3.2运行环境
(1)Intel®Pentium®2及以上处理器,32M以上内存,4G以上硬盘。
(2)Microsoft®Windows™9X/NT操作系统。
(3)800*600或以上的屏幕分辨率。
4软件架构
考虑到整个的下棋过程(无论对方是电脑抑或其他网络玩家)可以分为:
己方落子、等待对方落子、对方落子、设置己方棋盘数据这一系列过程,因此一人游戏类、二人游戏类和棋盘类之间的关系参考了AbstractFactory(抽象工厂)模式,以实现对两个不同模块进行一般化的控制。
软件的总体架构如图1:
图1软件架构
Figure1softwarearchitecture
4.1 棋盘类
整个架构的核心部分,类名为CTable。
封装了棋盘的各种可能用到的功能,如保存棋盘数据、初始化、判断胜负等。
用户操作主界面,主界面与CTable进行交互来完成对游戏的操作。
4.2 游戏模式类
用来管理人机对弈/网络对弈两种游戏模式,类名为CGame。
CGame是一个抽象类,经由它派生出一人游戏类COneGame和网络游戏类CtwoGame。
这样,CTable类就可以通过一个CGame类的指针,在游戏初始化的时候根据具体游戏模式的要求实例化COneGame或CTwoGame类的对象;然后利用多态性,使用CGame类提供的公有接口就可以完成不同游戏模式下的不同功能了。
如图2:
图2CGame类派生关系
Figure2CGamederivedclassrelationship
5 棋盘类——CTable
5.1 主要成员变量说明
5.1.1 网络连接标志——m_bConnected
用来表示当前网络连接的情况,在网络对弈游戏模式下客户端连接服务器的时候用来判断是否连接成功;事实上它也是区分当前游戏模式的唯一标志。
5.1.2 棋盘等待标志——m_bWait与m_bOldWait
由于在玩家落子后需要等待对方落子,m_bWait标志就用来标识棋盘的等待状态。
当m_bWait为TRUE时,是不允许玩家落子的。
在网络对弈模式下,玩家之间需要互相发送诸如悔棋、和棋这一类的请求消息,在发送请求后等待对方回应时,也是不允许落子的,所以需要将m_bWait标志置为TRUE。
在收到对方回应后,需要恢复原有的棋盘等待状态,所以需要另外一个变量在发送请求之前保存棋盘的等待状态做恢复之用,也就是m_bOldWait。
等待标志的设置,由成员函数SetWait和RestoreWait完成。
5.1.3 网络套接字——m_sock和m_conn
在网络对弈游戏模式下,需要用到这两个套接字对象。
其中m_sock对象用于做服务器时的监听之用,m_conn用于网络连接的传输。
5.1.4 棋盘数据——m_data
这是一个15*15的二维数组,用来保存当前棋盘的落子数据。
其中对于每个成员来说,0表示落黑子,1表示落白子,-1表示无子。
5.1.5 游戏模式指针——m_pGame
这个CGame类的对象指针是CTable类的核心内容。
它所指向的对象实体决定了CTable在执行一件事情时候的不同行为,具体的内容请参见“游戏模式”一节。
5.2 主要成员函数说明
5.2.1 套接字的回调处理——Accept、Connect、Receive
本程序的套接字派生自MFC的CAsyncSocket类,CTable的这三个成员函数就分别提供了对套接字回调事件OnAccept、OnConnect、OnReceive的实际处理,其中尤以Receive成员函数重要,它之中包含了对所有网络消息的分发处理。
5.2.2 清空棋盘——Clear
在每一局游戏开始的时候都需要调用这个函数将棋盘清空,也就是棋盘的初始化工作。
此函数主要完成以下几件事情:
(1)将m_data中每一个落子位都置无子状态为-1。
(2)按照传入的参数设置棋盘等待标志m_bWait,以供先、后手的不同情况之用。
(3)使用delete将m_pGame指针所指向的原有游戏模式对象从堆上删除。
5.2.3 绘制棋子——Draw
此函数根据参数给定的坐标和颜色绘制棋子。
绘制的详细过程如下:
(1)将给定的棋盘坐标换算为绘图的像素坐标。
(2)根据坐标绘制棋子位图。
(3)如果先前曾下过棋子,则利用R2_NOTXORPEN将上一个绘制棋子上的最后落子指示矩形擦除。
(4)在刚绘制完成的棋子四周绘制最后落子指示矩形。
5.2.4 左键消息——OnLButtonUp
作为棋盘唯一响应的左键消息,也需要做不少的工作:
(1)如果棋盘等待标志m_bWait为TRUE,则直接发出警告声音并返回,即禁止落子。
(2)如果点击时的鼠标坐标在合法坐标(0,0)~(14,14)之外亦禁止落子。
(3)如果走的步数大于1步,方才允许悔棋。
(4)进行胜利判断,如胜利则修改UI状态并增加胜利数的统计。
(5)如未胜利,则向对方发送已经落子的消息。
(6)落子完毕,将m_bWait标志置为TRUE,开始等待对方回应。
5.2.5 绘制棋盘——OnPaint
每当WM_PAINT消息触发时,都需要对棋盘进行重绘。
OnPaint作为响应绘制消息的消息处理函数使用了双缓冲技术,减少了多次绘图可能导致的图像闪烁问题。
此函数主要完成以下工作:
(1)装载棋盘位图并进行绘制。
(2)根据棋盘数据绘制棋子。
(3)绘制最后落子指示矩形。
5.2.6对方落子完毕——Over
在对方落子之后,仍然需要做一些判断工作
(1)如果落子坐标在合法坐标(0,0)~(14,14)之外亦禁止落子。
(2)如果走的步数大于1步,方才允许悔棋。
(3)进行胜利判断,如胜利则修改UI状态并增加胜利数的统计。
(4)如未胜利,则向对方发送已经落子的消息。
(5)落子完毕,将m_bWait标志置为TRUE,开始等待对方回应。
5.2.7 设置游戏模式——SetGameMode
这个函数通过传入的游戏模式参数对m_pGame指针进行了初始化,代码如下:
voidCTable:
:
SetGameMode(intnGameMode)
{
if(1==nGameMode)
m_pGame=newCOneGame(this);
else
m_pGame=newCTwoGame(this);
m_pGame->Init();
}
这之后,就可以利用OO的继承和多态性特点来使m_pGame指针使用相同的调用来完成不同的工作了,事实上,COneGame:
:
Init和CTwoGame:
:
Init都是不同的。
5.2.8 胜负的判断——Win
这是游戏中一个极其重要的算法,用来判断当前棋盘的形势是哪一方获胜。
其详细内容请参见“主要算法”一节。
6 游戏模式类——CGame
此类负责对游戏模式进行管理,以及在不同的游戏模式下对不同的用户行为进行不同的响应。
由于并不需要CGame本身进行响应,所以将其设计为了一个纯虚类,它的定义如下:
classCGame
{
protected:
CTable*m_pTable;
public:
list
public:
CGame(CTable*pTable):
m_pTable(pTable){}//构造函数
virtual~CGame();//析构函数
virtualvoidInit()=0;//初始化工作
//处理胜利后的情况,CTwoGame需要改写此函数完成善后工作
virtualvoidWin(constSTEP&stepSend);
//发送己方落子
virtualvoidSendStep(constSTEP&stepSend)=0;
virtualvoidReceiveMsg(MSGSTRUCT*pMsg)=0;//接收对方消息
virtualvo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 五子棋 设计 实现