1、1本科毕业论文(20 届)基于 VC+的五子棋程序设计与实现所在学院专业班级 计算机科学与技术学生姓名指导教师完成日期2摘 要C+语言是一种面向对象的语言,尽管在当前,可视化语言发展迅速,普及很快,但C+语言作为一种基础的语言,它的有时依然存在,甚至有时它是不可替代的,特别是和硬件接口技术相联系的软件。五子棋游戏是一种简单大众的游戏,自计算机实现以来,深受广大电脑玩家的喜爱,现在流行的五子棋游戏软件大多缺乏美观的界面,和容易的操作方法,电脑的 AI 值也不是很高。本文通过 C+语言在计算机图形方面的编程,设计了五子棋游戏软件,使该软件具有还算美观和操作简单的界面,在人机对战时,分为低级,中级和
2、专家级,加大对游戏的乐趣,当然也可以实行人人对战。本游戏是以 C+语言作为开发工具,采用搜索算法设计最优落子点开发的游戏软件。本文就是介绍五子棋软件设计的全过程。关键字 C+语言 面向对象 最优落子Abstract3C + + language is an object-oriented language, although in the current, visual language developed rapidly, spread quickly, but the C + + language as a basic language, it is sometimes still exi
3、sts, and sometimes it is irreplaceable, especially with hardware interface technology associated software. Volkswagen backgammon game is a simple game, since the computer to realize, the majority of PC gamers love, now popular backgammon game software lacks most beautiful interface, and easy method
4、of operation, AI value of the computer is not very high. In this paper, C + + programming language in computer graphics, design a backgammon game software, so that the software has the appearance and operation is fairly simple interface, the man-machine war, divided into low, intermediate and expert
5、 level, increase the game fun, of course, can also be implemented for all war. This game is based on C + + language as a development tool, the search algorithm design optimal point developed game software. This article is to introduce the whole process of backgammon software design.Keyword C+ langua
6、ge Object-oriented the optimal initial目录41 绪论 .61.1 五子棋的简介 .61.2 Visual C+的介绍 .71.3 开发环境及运行环境 .71.3.1 开发环境 .71.3.2 运行环境 .72 系统分析 .82.1 系统调研 .82.2 可行性分析 .82.3 技术可行性分析 .93 软件架构 .103.1 棋盘类 .103.1.1 主要成员变量 .103.2 主要成员函数说明 .103.2.1 清空棋盘 .103.2.2 绘制棋子 .103.2.3 左键消息 .113.2.4 绘制棋盘 .113.2.5 对方落子完毕 .113.2.6 胜
7、负的判断 .113.3 游戏模式类 .113.3.1 主要成员变量 .113.3.2 主要成员函数 .123.4 资源编辑 .133.5 消息说明 .153.5.1 落子消息 .153.5.2 声音消息 .153.5.3 提示消息 .153.5.4 悔棋消息 .153.5.5 输赢消息 .153.5.6 再次开局消息 .164 主要算法 .174.1 判断胜负 .174.2 人机对弈算法 .174.2.1 获胜组合 .184.2.2 落子后处理 .184.2.3 查找棋盘空位 .184.2.4 落子打分 .184.2.5 防守策略 .184.2.6 选取最佳落子 .195 软件实现 .195.
8、1 游戏运行 .196 补充说明 .237 结论 .24致谢 .24561绪论1.1五子棋的简介五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“連珠” ,英译为“Renju” ,英文称之为“Gobang”或“FIR” ( Five in a Row 的缩写) ,亦有“连五子”、 “五子连” 、 “串珠” 、 “五目” 、 “五目碰” 、 “五格”等多种称谓。 五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快” ,又有古典哲学的高深学问“阴阳易理” ;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际
9、性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。五子棋的娱乐性强、规则简单、易学、流行性广,普通人不需长时间专门训练即可自如行棋,因此极受大众喜欢。五子棋规则为: 第一:五子棋行棋时,黑棋先下第一子,由天元开始,后白棋在黑棋周围的交叉点的落子。接着黑方再以天元中心的 25 个交叉点的范围内落盘面的第三子,之后黑白双方相互顺序子。第二:最先在棋盘线交点横向,纵向,斜向形成已方的五个棋子连续的一方为胜。第三:出现禁手对方指出后将判负,其中包括两个或两个以上的活三,活四,长连均称之为禁手。 第四:禁手只对黑棋有效,白
10、棋无禁手。第五:黑方禁手形成时,白方需立即指出,黑方将被判负。若白方未发现黑方禁手存在而继续应子,其后指出黑方禁手不能判黑方负。第六:黑方连五与禁手同时形成,因黑方已连成五即黑方已获胜,故禁手规则失效。第七:在对局中,在盘上落下的子又拿起来,此动作称为拔子,若拔子将被判为负。第八:在对局中棋子掉落在棋盘上将被判负。若推子或蹭子,以盘面第一落点为准。用手将棋子推正不算违犯规则。第九:在对局中,一方自行中止比赛如:中途退场,将被判负。第十:在对局中对方宣布认输,本局获胜。第十一:超过比赛规定所用时间限制,将被判为负:正式比赛期间,迟到时间超过比赛容许时间将被判负。 第十二:如下至最终一子仍不分胜负
11、则定为平局。第十三:中盘期间双方 同意和局提议,判定为平局。71.2 Visual C+的介绍Visual C+ 6.0,简称 VC 或者 VC6.0,是微软推出的一款 C+编译器,将“高级语言”翻译为“机器语言(低级语言) ”的程序。Visual C+是一个功能强大的可视化软件开发工 具。自 1993 年 Microsoft 公司推出 Visual C+1.0 后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了 Visual C+.NET(Visual C+7.0),但它的应用有很大的局限性,只适用于 Windows 2000、Windo
12、ws XP 和 Windows NT4.0。所以实际中,更多的是以 Visual C+6.0 为平台。Visual C+6.0 由 Microsoft 开发, 它不仅是一个 C+ 编译器,而且是一个基于 Windows操作系统的可视化集成开发环境(integrated development environment,IDE) 。Visual C+6.0 由许多组件组成,包括编辑器、调试器以及程序向导 AppWizard、类向导 Class Wizard 等开发工具。 这些组件通过一个名为 Developer Studio 的组件集成为和谐的开发环境。Microsoft 的主力软件产品。 Vis
13、ual C+是一个功能强大的可视化软件开发工具。自 1993 年 Microsoft 公司推出 Visual C+1.0 后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了 Visual C+.NET(Visual C+7.0),但它的应用的很大的局限性,只适用于 Windows 2000,Windows XP 和 Windows NT4.0。所以实际中,更多的是以 Visual C+6.0 为平台。Visual C+6.0 以拥有“语法高亮” ,自动编译功能以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调
14、试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及创建预编译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。1.3 开发环境及运行环境 1.3.1 开发环境Intel Pentium 4 2.0GHz,512M 内存,80G 硬盘;Microsoft Windows 2000 Professional;Microsoft Visual C+ 6.0;Microsoft Developer Network for Visual Studio.NET 98; Visual Assist X
15、 10.1.1301.0 1.3.2 运行环境 Intel Pentium 2 及以上处理器,32M 以上内存,4G 以上硬盘;Microsoft Windows 9X/NT 操作系统; 8800*600 或以上的屏幕分辨率2 系统分析2.1系统调研正式开发五子棋游戏之前进行调研是非常必要的,其必要性主要表现在以下几个方面。(1)明确用户的要求,以根据调查结果进行可行性分析,确认系统的开发是否可行。(2)提出新系统的人员并不都是系统研究人员,有些人对于其功能和处理数据的方法没有明确的认识。它们只是根据自己业务工作的需要提出了要求,系统开发人员要对此进行详细的调查和分析,确认用户的要求可以通过现
16、有的计算机技术实现,保证开发的管理信息系统的功能与用户提出的要求相吻合。总之,必要对现行系统进行详细的调查,明确用户需求,保证开发的新系统的功能与用户的要求相吻合,避免耗费大量的人力、物力、财力,新系统的开发却失败的悲剧发生。2.2可行性分析可行性分析是在用户的要求和系统调研的基础上进行的,对新系统的开发从社会、技术、经济、管理等方面进行分析,并得出新系统的开发工作可行、不可行、需要修改、追加投资、暂缓开发、分步实施等方案和结论,最后完成可行性分析。可行性分析一般可定义为:可行性分析是在建设的前期对工程项目的一种考察和鉴定,对拟议中的项目进行全面与综合的技术、经济能力的调查,判断它是否可行。可
17、行性分析阶段的主要工作包括以下几个方面:(1)新系统目标可行性分析:分析新系统的目标是否符合企业的现状和发展的需要。(2)社会可行性分析:社会可行性分析主要是指管理信息系统的开发是否符合国家法律政策,是否,能够与社会大系统实现良好的对接。(3)技术可行性分析:技术可行性分析是根据新系统的目标来衡量是否具备所需要的技术,包括系统开发人员数量和水平,硬件方面,软件方面及其它应用技术。 (4)经济可行性分析 经济可行性分析主要是对开发新系统所投入的资金与系统投入使用后所带来的经济效益进行比较,确认新系统是否会给企业带来一定的经济效益。(5)管理可行性分析:管理可行性分析主要是分析企业现行的管理体制和
18、企业领导是否具有现代化的管理意识和管理水平。92.3 技术可行性分析技术可行性分析主要包括四个方面:目前有关的技术能否支持所开发的新系统;新系统开发人员的数量和水平,即人力资源;硬件和软件资源。(1)技术支持:首先根据新系统的目标,考虑目前有关的技术能否支持所开发的新系统。这里讨论的技术必须是已经普遍使用的,而不是待研究的或正在研究的。对于本系统,本人是采用 C+编写的。而在开发五子棋的过程运用到了,图形的绘制(主要是对棋子的绘制,棋盘的绘制的) 。还有 C+种对声音的播放方式(主要是用于下棋的时候的落子声音,悔棋时的声音,赢棋时的声音,输棋的声音) 。文件的保存和载入(主要用于对棋盘信息的储
19、存和打开) 。(2)硬件资源:开发管理信息系统所需的硬件资源包含以下两个方面:系统开发人员在管理信息系统的开发过程中所需要的计算机设备及其有关的外部设备;管理信息系统开发成功投入使用后,使用单位所应具备的计算机设备及其有关的外围设备。对硬件资源进行可行性分析时主要考虑计算机的主机内存、类型、功能、联网能力、安全保护措施以及输入/输出设备,外存储器和联网数据通信设备的配置、功能、效率等指标是否符合系统方案设计要求,同时还要考虑计算机的性能/价格比。本系统对计算机的要求不高,一般的硬件配置都能运行此系统。103软件架构3.1 棋盘类整个架构的核心部分。封装了棋盘的各种可能用到的功能,如初始化、判断
20、胜负等。用户操作主界面,主界面与棋盘类进行交互来完成对游戏的操作。3.1.1主要成员变量(1)棋盘等待由于在玩家落子后需要等待对方落子,例如:黑子先下,白字就处于等待状态,这时白子是不能落子的。还有就是悔棋,直接发出悔棋信息就能悔棋了。(2)棋盘数据这是一个 15*15 的二位数组,用来保存当前棋盘的落子数据。其中对于每个成员来说,0 表示落黑子,1 表示落白子,-1 表示无子。(3)游戏模式指针这个游戏类的对象指针是可行类的核心内容。它所指向的对象实体决定了可行在执行一件事情时候的不同行为,具体的内容请参见“游戏模式”一节。(4)网络连接用来表示当前网络连接的情况,在网络对弈游戏模式下客户端连接服务器的时候用来判断是否连接成功;事实上,它也是区分当前游戏模式的唯一标志。3.2 主要成员函数说明3.2.1 清空棋盘在每一局游戏开始的时候都需要调用这个函数将棋盘清空,也就是棋盘的初始化工作。在这个函数中,主要发生了这么几件事情:(1)将数据中的每一个落子位置为无子状态(-1) 。(2)按照传入的参数设置棋盘等待标志 wait,以供先、后手的不同情况之用。(3)使用 delete 将 came 的指针所指向的原有游戏模式对象从堆上删除。3.2.2 绘制棋子这无疑是很重要的一个函数,它根据参数给定的坐标和颜色绘制棋子。绘制的详细