收藏 分享(赏)

基于C++毕业设计-五子棋游戏.doc

上传人:kpmy5893 文档编号:8304494 上传时间:2019-06-19 格式:DOC 页数:19 大小:168KB
下载 相关 举报
基于C++毕业设计-五子棋游戏.doc_第1页
第1页 / 共19页
基于C++毕业设计-五子棋游戏.doc_第2页
第2页 / 共19页
基于C++毕业设计-五子棋游戏.doc_第3页
第3页 / 共19页
基于C++毕业设计-五子棋游戏.doc_第4页
第4页 / 共19页
基于C++毕业设计-五子棋游戏.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、山东凯文科技职业学院2011 届毕业论文基于 Visual C+的五子棋游戏设计主要算法的设计与实现学 院: 信息学院 学生姓名: XXX 指导教师: 张老师 专 业: 软件技术 班 级: 08 软件 1 班 完成时间: 2011 年 6 月 29 日 山东凯文科技职业学院摘 要本论文主要阐述以面向对象的程序开发语言 VC+为开发工具,设计一个五子棋游戏。本系统是个小型游戏,可以单机使用,也可以网络两个人游戏,也可以和电脑进行游戏。论文首先介绍了开发背景及开发语言的介绍。然后介绍设计该游戏的框架结构,然后介绍了程序的设计过程,以及程序的相关算法。其中算法是我主要负责的,算 法 ( Algori

2、thm) 是 一 系 列 解 决 问 题 的 清 晰 指 令 , 算 法 代 表着 用 系 统 的 方 法 描 述 解 决 问 题 的 策 略 机 制 。 也 就 是 说 , 能 够 对 一 定 规 范 的 输 入 , 在 有 限 时 间 内 获 得所 要 求 的 输 出 。 如 果 一 个 算 法 有 缺 陷 , 或 不 适 合 于 某 个 问 题 , 执 行 这 个 算 法 将 不 会 解 决 这 个 问 题 。不 同 的 算 法 可 能 用 不 同 的 时 间 、 空 间 或 效 率 来 完 成 同 样 的 任 务 。关键词:游戏,系统,图片,算法, Visual C+ Abstract

3、This paper mainly expounds on object-oriented programming language for development tools, design of vc + + a renju game. This system is a small game, can use single, also can network two game, can also and computer games. It firstly introduces the development background and development of language i

4、s introduced. And then introduced the design frame structure of the game, then introduces the design process of the program, and the related algorithm procedures. Among them is I mainly responsible for the Algorithm, the Algorithm (done) is a series of the solution to the problem of clear instructio

5、ns, the Algorithm represents a systematic approach describe the solving strategy mechanism. That is, to some of the standard input, in limited time get required output. If an algorithm with a defect, or is not suitable for a problem is, carry out the algorithm will not solve the problem. Different a

6、lgorithm may use different time, space or efficiency to complete the same task.Keywords: The game, the system, pictures,algorithm, Visual C + + 山东凯文科技职业学院目 录1 引言 .11.1 五子棋介绍 .11.2 开发背景 .11.3 开发环境及运行环境 .11.3.1 开发环境 11.3.2 运行环境 12 C+简介 .23 软件架构 23.1 棋盘类 .33.2 游戏模式类 .34 主要算法 44.1 判断胜负 .44.2 人机对弈算法 .64.

7、2.1 获胜组合 64.2.2 落子后处理 74.2.3 查找棋盘空位 74.2.4 落子打分 84.2.5 防守策略 104.2.6 选取最佳落子 114.2.7 统计数据 .115 几点补充说明 156 心得体会 15参考文献 16致谢 16山东凯文科技职业学院11 引言1.1 五子棋介绍五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“連珠” ,英译为“Renju”,英文称之为“Gobang”或“FIR” (Five in a Row 的缩写) ,亦有“连五子” 、 “五子连” 、“串珠” 、 “五目” 、 “五目碰” 、 “五格”等多种称谓。五子棋不仅能增强思维能力,提高

8、智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快” ,又有古典哲学的高深学问“阴阳易理” ;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。1.2 开发背景当前网络上流传的五子棋游戏功能并不尽善尽美,其中最主要的问题就是人机对战和网络对战不能够一起实现,所以我决定开发 1一个既能够人机对战,又能够进行网络对战的五子棋系统。1.3 开发环境及运行环境1.3.1 开发环境 Intel Pentium Y450,2G

9、内存,320G 硬盘 Microsoft Windows XP Professional Microsoft Visual C+ 6.0 Microsoft Developer Network for Visual Studio.NET 2003 Visual Assist X 10.1.1301.01.3.2 运行环境 Intel Pentium 2 及以上处理器,32M 以上内存,4G 以上硬盘 Microsoft Windows 9X/NT 操作系统 800*600 或以上的屏幕分辨率山东凯文科技职业学院22 C+简介语 言 之 所 以 要 起 名 为 “C”, 是 因 为 它 是 主

10、要 参 考 那 个 时 候 的 一 门 叫 B 的 语 言 , 它 的 设 计者 认 为 C 语 言 是 B 语 言 的 进 步 , 所 以 就 起 名 为 C 语 言 ; 但 是 B 语 言 并 不 是 因 为 之 前 还 有 个 A语 言 , 而 是 B 语 言 的 作 者 为 了 纪 念 他 的 妻 子 , 他 的 妻 子 名 字 的 第 一 个 字 母 是 B; 当 C 语 言发 展 到 顶 峰 的 时 刻 , 出 现 了 一 个 版 本 叫 C with Class, 那 就 是 C+最 早 的 版 本 , 在 C 语 言 中增 加 class 关 键 字 和 类 , 那 个 时 候

11、 有 很 多 版 本 的 C 都 希 望 在 C 语 言 中 增 加 类 的 概 念 ; 后 来 C标 准 委 员 会 决 定 为 这 个 版 本 的 C 起 个 新 的 名 字 , 那 个 时 候 征 集 了 很 多 种 名 字 , 最 后 采 纳 了 其 中一 个 人 的 意 见 , 以 C 语 言 中 的 +运 算 符 来 体 现 它 是 C 语 言 的 进 步 , 故 而 叫 C+, 成 立 了 C+标 准 委 员 会 。C+是 一 种 语 言 , 仅 仅 是 它 的 语 法 、 特 性 、 标 准 类 库 就 已 经 是 一 门 非 常 高 深 的 课 程 ,C+设 计 成 静 态

12、类 型 、 和 C 同 样 高 效 且 可 移 植 的 多 用 途 程 序 设 计 语 言 。 设 计 成 直 接 的 和 广 泛 的支 援 多 种 程 序 设 计 风 格 ( 程 序 化 程 序 设 计 、 资 料 抽 象 化 、 面 向 对 象 程 序 设 计 、 泛 型 程 序 设 计 ) 。设 计 成 给 程 序 设 计 者 更 多 的 选 择 , 即 使 可 能 导 致 程 序 设 计 者 选 择 错 误 。 设 计 成 尽 可 能 与 C 兼容 , 籍 此 提 供 一 个 从 C 到 C+的 平 滑 过 渡 。 避 免 平 台 限 定 或 没 有 普 遍 用 途 的 特 性 。 不

13、 使 用 会 带来 额 外 开 销 的 特 性 。 设 计 成 无 需 复 杂 的 程 序 设 计 环 境 。C+标准演变了许多年。C+模板是近几年来对此语言的一种扩展,模板是根据类型参数来产生函数和类的机制,有时也称模板为“参数化的类型” 。使用模板,可以设计一个对许多类型的数据进行操作的类,而不需要为每个类型的数据建立一个单独的类。标准模板库(Standard Tempalte Library,STL )和微软的活动模板库(Active Tempalte Library,ATL )都基于这个 C+语言扩展。C+标准可分为两部分, C+语言本身和 C+标准库。C+标准库对于 Visual C

14、+是相当新的,实际上微软只是在发布 Visual C+ 5.0 时去除了一些“bug” 。标准库提供了标准的输入/输出、字符串、容器(如矢量、列表和映射等)、非数值运算(如排序、搜索和合并等)和对数值计算的支持。应该说, C/C+包含了相对少的关键字,而且很多最有用的函数都来源于库,C+标准库实现容器和算法的部分就是 STL。STL 是数据结构和算法的一个框架,数据结构包括矢量、列表和映射等,算法包括这些数据结构的查找、拷贝和排序等。1994 年 7 月,ANSI/ISO C+标准委员会投票决定接受 STL 为 C+标准库的一部分,这个建议是根据 Alex Stepanov、Meng Lee

15、和 David Musser 这三人的编程和软件库研究提出的。STL 的产生是为了满足通用性的设计目标,而不是为了提高性能。3 软件架构软件的总体架构如图 3.1:山东凯文科技职业学院3图 3.1 软件架构考虑到整个的下棋过程(无论对方是电脑抑或其他网络玩家)可以分为:己方落子、等待对方落子、对方落子、设置己方棋盘数据这一系列过程,因此一人游戏类、二人游戏类和棋盘类之间的关系参考了 AbstractFactory(抽象工厂)模式,以实现对两个不同模块进行一般化的控制。 23.1 棋盘类整个架构的核心部分,类名为 CTable。封装了棋盘的各种可能用到的功能 3,如保存棋盘数据、初始化、判断胜负

16、等。用户操作主界面,主界面与 CTable 进行交互来完成对游戏的操作。3.2 游戏模式类用来管理人机对弈/网络对弈两种游戏模式,类名为 CGame。CGame 是一个抽象类,经由它派生出一人游戏类 COneGame 和网络游戏类 CTwoGame,如图 3.2:图 3.2 CGame 类派生关系一人游戏类 二人游戏类棋盘类主界面用户抽象类 CGameCOneGame CTwoGame游戏类指针山东凯文科技职业学院4这样,CTable 类就可以通过一个 CGame 类的指针4,在游戏初始化的时候根据具体游戏模式的要求实例化 COneGame 或 CTwoGame 类的对象;然后利用多态性5,使

17、用 CGame 类提供的公有接口就可以完成不同游戏模式下的不同功能了。4 主要算法五子棋游戏中,有相当的篇幅是算法的部分。无论是人机对弈,还是网络对弈,都需要合理算法的支持,本节中将详细介绍五子棋中使用的算法。 134.1 判断胜负五子棋的胜负,在于判断棋盘上是否有一个点,从这个点开始的右、下、右下、左下四个方向是否有连续的五个同色棋子出现,如图4.1:图 4.1 判断胜负方向这个算法也就是 CTable 的 Win 成员函数。从设计的思想上,需要它接受一个棋子颜色的参数,然后返回一个布尔值,这个值来指示是否胜利,代码如下:BOOL CTable:Win( int color ) consti

18、nt x, y;/ 判断横向for ( y = 0; y GetColor() = stepPut.color )/ 玩家下if ( m_PlayerstepPut.xstepPut.yi )switch ( m_Win0i )case 1:nScore -= 5;break;case 2:nScore -= 50;break;case 3:nScore -= 500;break;case 4:nScore -= 5000;break;default:break;else/ 计算机下if ( m_ComputerstepPut.xstepPut.yi )switch ( m_Win1i )ca

19、se 1:nScore += 5;break;case 2:山东凯文科技职业学院10nScore += 50;break;case 3:nScore += 100;break;case 4:nScore += 10000;break;default:break;return nScore;如代码所示,考虑到攻守两方面的需要,所以将玩家落子给的分数置为负值。4.2.5 防守策略落子的考虑不单单要从进攻考虑,还要从防守考虑。这一细节的实现其实就是让计算机从玩家棋盘布局分析战况,然后找出对玩家最有利的落子位置。整个过程如下:for ( m = 0; m GetColor();step.x = i;s

20、tep.y = j;ptemp = GiveScore( step );if ( pscore ptemp ) / 此时为玩家下子,运用极小极大法时应选取最小值pscore = ptemp;for ( m = 0; m cscore )cscore = ctemp + pscore;bestx = pi;besty = pj;在这之后,重新改变一下棋盘的状态(4.2.2)即可。山东凯文科技职业学院124.2.7 统计数据在对战结束的时候我们可以查询一下我们的胜率和一些别的战斗情况。代码如下:CStatDlg:CStatDlg(CWnd* pParent /*=NULL*/): CDialog(

21、CStatDlg:IDD, pParent)/AFX_DATA_INIT(CStatDlg)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INITvoid CStatDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CStatDlg)/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_MESSAGE_

22、MAP(CStatDlg, CDialog)/AFX_MSG_MAP(CStatDlg)ON_BN_CLICKED(IDC_BTN_RESET, OnBtnReset)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CStatDlg message handlersBOOL CStatDlg:OnInitDialog() CDialog:OnInitDialog();山东凯文科技职业学院13/ TODO: Add extra initialization here/ 读取姓名CTable *pTable = (CTable *)GetParent()-GetDlgItem( ID

23、C_TABLE );SetDlgItemText( IDC_ST_NAME, pTable-m_strMe );ShowStat();return TRUE; / return TRUE unless you set the focus to a control/ EXCEPTION: OCX Property Pages should return FALSEvoid CStatDlg:OnOK() / TODO: Add extra validation hereCFiveApp *pApp = (CFiveApp *)AfxGetApp();/ 写入战绩统计TCHAR str10;wsp

24、rintf( str, _T(“%d“), pApp-m_nWin );:WritePrivateProfileString( _T(“Stats“), _T(“Win“), str, pApp-m_szIni );wsprintf( str, _T(“%d“), pApp-m_nDraw );:WritePrivateProfileString( _T(“Stats“), _T(“Draw“), str, pApp-m_szIni );wsprintf( str, _T(“%d“), pApp-m_nLost );:WritePrivateProfileString( _T(“Stats“)

25、, _T(“Lost“), str, pApp-m_szIni );CDialog:OnOK();void CStatDlg:OnBtnReset() / TODO: Add your control notification handler code hereCFiveApp *pApp = (CFiveApp *)AfxGetApp();pApp-m_nWin = 0;pApp-m_nDraw = 0;pApp-m_nLost = 0;ShowStat();山东凯文科技职业学院14void CStatDlg:ShowStat()CFiveApp *pApp = (CFiveApp *)Af

26、xGetApp();CString str;str.Format( _T(“%d“), pApp-m_nWin );SetDlgItemText( IDC_ST_WIN, str );str.Format( _T(“%d“), pApp-m_nDraw );SetDlgItemText( IDC_ST_DRAW, str );str.Format( _T(“%d“), pApp-m_nLost );SetDlgItemText( IDC_ST_LOST, str );/ 计算胜率if ( 0 = pApp-m_nWin )str = _T(“胜率:0%“);elsestr.Format( _T

27、(“胜率:%d%“), pApp-m_nWin * 100 / ( pApp-m_nWin + pApp-m_nDraw + pApp-m_nLost ) );SetDlgItemText( IDC_ST_PERCENT, str );代码执行后的效果图如下:山东凯文科技职业学院15图 4.2 效果图5 几点补充说明 考虑到程序的响应速度,人机对弈算法只对玩家的棋子进行了一步的推测。 由于计算机在落子时选取的是得分最高的一步落子,所以如果玩家在开局的时候不改变落子步骤,那么将会获得从头至尾相同的棋局。 考虑到下棋同时还要聊天,所以并未对落子时间加入任何限制,同样如果玩家离开游戏也不会判负。 对

28、于人机对弈的悔棋处理,由于这个算法的开销相当大,每一步落子都会存在不同的棋盘布局,所以实现从头到尾的悔棋不是很现实(将会存在过多的空间保存棋盘布局) ,因而在人机对弈模式下,只允许玩家悔最近的两步落子。6 心得体会经过这段时间的紧张忙碌,这次的毕业设计已制作了一个较完整的五子棋游戏,从各方面来讲,都有比较大的收获,同时也大大提高了实际操作的能力,当然,期间遇到的困难也是层出不穷。由于对游戏的概念比较模糊,在前期的编程设计过程中脑海中仅仅有一个框架,而很多却细节没有考虑到,结果一度走入一边编程,一边改模版的尴尬境地,进度缓慢,思路不清。后来,在艰难进展的过程中渐渐领悟到了一些编程的方法和系统设计

29、的思想,所谓眼过千遍不如手过一遍,在自己实际操作中暴露出来的问题自己的体会最深刻,也就更有想法去克服他。在困境中摸索,总结,转变思路,继续前进,这是对我制作本游戏过程的一个概括。在不断的学习与改进中我体会到:1.做毕业设计本身也是一个学习新鲜事物的过程,从设计初的不懂到最后顺利完成设计,我体会到在实践中学习的重要性,我想这对于我以后的工作受益匪浅。2.设计的过程是漫长而困难重重的,设计过程中需要理论与实际的结合,这就要求有扎实的理论知识,灵活的头脑,我本身所做的设计并不算十分复杂,但由于以前没有独立做过系统所以刚开始时有点乱,好在有老师的帮助,我很快理清了思路,找到了自己的出发点。3.由于前期

30、工作的不彻底,对系统的需求分析的要求认识不够清楚,使得后续的工作不得不经常返回去修改个别代码。使我体会到在设计中的每一步的重要性,如果上一个步骤不能很好的完成,在后续的设计将会付出几倍的代价。总之,经过这么长时间的设计,我与我的同学完成了这个一个功能比较完善的五子棋游戏。我深刻体会到要做好一个完整的事情,需要有系统的思维方式和方法,还要有一个团队合作的精神。对待一个新的问题,要耐心、要细心,也要有很好的团结,共同努力的团队协作精神。山东凯文科技职业学院16参考文献1 MSDN for Visual Studio 6.02 设计模式可复用面向对象软件的基础,Erich Gamma/Richard

31、 Helm/Ralph Johnson/John Vlissides 著,李英军/马晓星/蔡敏/刘建中 等译,机械工业出版社3 深入浅出 MFC(第 2 版) ,侯俊杰著,华中科技大学出版社4 Microsoft Visual C+.NET 技术内幕(第 6 版) ,George Shepherd/David Kruglinski 著,潘爱民译,清华大学出版社5 Visual C+网络通信协议分析与应用实现,汪晓平/钟军 等编著,人民邮电出版社6 C+编程思想,Bruce Eckel 著,刘宗田/邢大红/孙慧杰 等译,机械工业出版社7 21 天学通 C+,Jesse Liberty 著,康博创作室译,人民邮电出版社8 C+标准程序库,Nicolai M.Josuttis 著,侯捷/孟岩 译,华中科技大学出版社9 Windows 程序设计,Charles Petzold 著,北京博彦科技发展有限公司译,北京大学出版社10 Visual C+.NET 网络编程,易君 编著,中国铁道出版社11 五子棋的核心算法,蝈蝈俊.nethttp:/

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报