网络五子棋系统说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象技术及应用
网络五子棋的设计与实现
学院名称计算机学院
专业班级计研-14
学生姓名程康
学号 2014312120102
1 系统简介
本系统是利用VC++6.0工具开发一个界面简洁、直观、实用性比较高的AI功能的五子棋游戏,游戏主要包括两个大的功能模块:人机对弈、网络对弈。
游戏实现人机对弈,在对弈过程中电脑利用搜索算法计算出落子的最佳位置,程序具有重新开始、更改用户名称、统计胜率等功能;游戏实现网络对弈,此时服务器端和客户端通过网络连接,在网上进行对弈,程序具有认输、和棋、聊天等功能模块。
运行环境:Windows9X/NT、WindowsXp、Windows7等操作系统。
运行方法:直接运行。
登录用户:无。
系统功能:本系统是一个既有人机对战,又有网络对战的简单五子棋游戏。
该系统所实现的功能主要有对用户名称修改、信息的记录。
还有悔棋、认输、和棋聊天等。
2 系统功能设计分析
2.1 系统总体架构
因为在整个下棋过程(无论对方是人机对弈还是网络对弈)都可以分为:己方落子、等待对方落子、对方落子、设置己方棋盘数据这一系列过程,因此一人游戏类、二人游戏类都从一个类继承而来,以实现对两个不同模块进行一般化的控制。
2.2 人机对战模式
在人机对战模式下,玩家可以不局限于网络的限制,通过与机器进行下棋,从而达到娱乐的功效。
每当玩家下一步棋后,机器通过自己的落子算法和防范算法进行落子,与玩家达到互动的效果,在系统中对机器的算法进行了优化,可以满足一般级别的玩家需求。
此模式下有选择玩家先手还是机器先手、更改名称、统计战绩等功能。
2.3 网络对战模式
由于人们现在希望不仅仅与机器下棋,而是能够在网上与自己的朋友或者其他陌生人进行游戏切磋、互动,进而提高自己的水平达到娱乐的目的,网络对战模式采用C/S模式,一方建立服务器端,另一方则为客户端,客户端通过用户名或IP加入游戏,与服务器端进行互动。
网络对战模式不仅提供了更改玩家姓名、统计战绩和悔棋的功能,而且还有离开游戏、聊天、请求和棋、认输等功能,其中聊天是为了方便双方玩家,在游戏的同时,能够进行文字聊天,从而更好的达到互动、直接交流的效果。
3 系统实现
本系统的界面主要分为两个,一个是在人机对战模式下的界面,另一个则是在网络对战模式下的界面,下面就以这两个界面为基础展开系统实现的介绍。
3.1 人机对战
3.1.1 概述
人机对战的主界面如图3-1。
图3-1 人机对战界面
人机对战的界面是基于MFC的CDialog完成的,首先在VC6.0中,设置对话框的格式,添加相应的按钮和响应函数,完成消息映射,然后在对话框中加载棋盘图,当程序启动时,即得到如图所示。
其中加载棋盘图的代码如下:
CBitmap bmp;
CPen pen;
bmp.LoadBitmap( IDB_BMP_QP );
pen.CreatePen( PS_SOLID, 1, 0xff );
MemDC.SelectObject( &bmp );
MemDC.SelectObject( &pen );
MemDC.SetROP2( R2_NOTXORPEN );
3.2 网络对战
3.2.1 概述
网络对战模式的主界面如图3-2。
图3-2 网络对战主界面
本界面与人机对战界面形成过程基本一样,即是基于MFC的CDialog完成的,首先在VC6.0中,设置对话框的格式,添加相应的按钮和响应函数,完成消息映射,然后在对话框中加载棋盘图。
但因为这是网络模式,具有聊天功能,因此,多出了右边那一部分,方便两个玩家进行聊天,当单击收缩按钮时,聊天那部分便会隐藏起来,此时形同图3-1。
3.2.2 具体功能模块实现
1.创建游戏
这一功能模块主要是通过一个模态对话框,来创建服务器端,进行监听,直到客户端加入游戏,游戏便开始,如图3-5所示。
图3-3 建立游戏
其中部分代码如下:
CTable *pTable = (CTable*)GetParent()->GetDlgItem( IDC_TABLE );
SetDlgItemText( IDC_ST_STATUS, _T("状态:等待其他玩家加
入...") );
pTable->m_sock.Create( 20000 );
pTable->m_sock.Listen();
GetDlgItem( IDC_BTN_LISTEN )->EnableWindow( FALSE );
2.加入游戏
当玩家进入网络模式时,可以选择创建游戏也可选择加入他人游戏,当选择加入游戏时,需要加入别人已经创建好的游戏,与别人进行网络连接,以便信息的传递。
本系统些模块通过弹出一个对话框进行实现,其中可以输入对方的IP以进行连接,如图3-6所示。
图3-4 加入游戏
其中部分重要代码如下:
// 发送己方姓名
MSGSTRUCT msg;
msg.uMsg = MSG_INFORMATION;
lstrcpy( msg.szMsg, m_Table.m_strMe );
m_Table.m_conn.Send( (LPCVOID)&msg, sizeof( MSGSTRUCT ) );
4 主要算法
五子棋游戏中无论是人机对弈,还是网络对弈,都需要合理算法的支持,简单介绍本系统涉及到的算法,算法体现出人机博弈的思想,鉴于本说明文档只需介绍系统,此处只简单介绍。
4.1 判断胜负算法
五子棋的胜负,在于判断棋盘上是否有一个点,从经过这个棋子的横、竖、左斜、右斜连续的五个同色棋子出现,如图4-1。
算法判定的方向依次是横向、纵向、对角线方向、反对角线方向。
图4-1 判
断胜负方向
4.2 人机对弈算法
人机对弈算法完全按照CGame基类定义的接口标准,封装在了COneGame派生类之中。
结束语
这个系统使用VC6.0开发工具完成,其中的机器的算法能够满足一般的玩家需要。
但考虑到程序的响应速度,人机对弈算法只对玩家的棋子进行了一步的推测。
由于计算机在落子时选取的是得分最高的一步落子,所以如果玩家在开局的时候不改变落子步骤,那么将会获得从头至尾相同的棋局,考虑到下棋同时还要聊天,所以并未对落子时间加入任何限制,同样如果玩家离开游戏也不会判负。
感谢我的任课老师曾凡锋,上课期间教给了我编程的思想和多年编程经验的切身体验以及总结出来的一些课本上无法查询的编程问题。
我通过这个程序自己对VC运行机制理解更加透彻,对C++的基本语法知识认识更加深刻,对面向对象编程思想的认识更进一步,学习到了五子棋机器基本算法,同时对五子棋玩家规则有了进一步的认识。