ImageVerifierCode 换一换
格式:DOCX , 页数:94 ,大小:2MB ,
资源ID:16772526      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16772526.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(五子棋 单机版Word文件下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

五子棋 单机版Word文件下载.docx

1、 五子棋;思考算法;多人对战;人机对战;Design and Implementation .NET-based backgammon gameAbstractBackgammon game can not only enhance thinking skills, improve memory, and rich in philosophy, to help self-cultivation. Both the concept of field, there are point connections, is the crystallization of ancient and modern

2、 philosophy. Therefore, the development of a simple and practical stand-alone version of backgammon software makes sense. This paper analyzes the backgammon game rules of the game, the game design algorithms, and select Visual Studio 2008 as the software development platform to achieve a variety of

3、Battle Mode backgammon, either against people, but also pleasant and play against the computer, adds multiplayer, multiplayer war machine functions. Also implements unlimited undo steps, custom chessboard ranks number, auto-save function of the mess. This paper will install the development environme

4、nt, to backgammon functional analysis and design, to achieve the functional modules, to show you step by step implementation process backgammon. After testing, the game system fully functional, smooth operation, with a strong value.Key Words:Backgammon; thinking algorithm; multiplayer;man-machine wa

5、r;目 录1 绪 论 11.1 起源与发展 11.2 研究目的和意义 12 .NET平台简介与开发环境安装 22.1 平台简介 22.2 开发环境安装 23 .NET的五子棋游戏的设计 43.1 游戏模块 43.1.1 棋盘栏 43.1.2 控制栏 43.2 设置模块 53.2.1 界面设置 53.2.2 游戏记录恢复 63.2.3 帮助页 74 .NET的五子棋游戏的功能实现 84.1 棋盘栏的实现 84.1.1 棋盘的绘制 84.1.2 棋子的绘制 94.1.2.1 棋盘坐标的获取 94.1.2.2 棋盘坐标处绘制棋子 94.1.3 棋子标记的绘制与擦除 104.1.4 棋子的擦除 104

6、.1.2.1 用背景擦除棋子 104.1.2.2 棋盘线的补充绘制 104.2 控制栏控制功能的实现 114.2.1 棋盘信息的表示与存储 124.2.2 棋型的定义、表示、存储、刷新 124.2.2.1 棋型的定义 134.2.2.2 棋型的表示 144.2.2.3 棋型的存储 144.2.2.4 棋型的更新 154.2.3 棋型的识别 154.2.3.1 己方有效坐标 174.2.3.2 己方最大棋子数 174.2.3.3 连续棋子数 184.2.4 棋子的前台显示与后台存储流程 184.2.5 悔棋 194.2.6 让子 204.2.7 托管 214.2.8 对战 214.2.9 重玩

7、214.2.10 设置按钮功能的实现 214.3 后台棋盘数据分析 224.3.1 游戏胜负的判定 224.3.2 更优落棋位置的获取 224.3.2.1 基本判优思想 234.3.2.2 活3思考思想 244.3.2.3 冲4延续思想 254.3.2.4 双活棋位置思想 264.3.2.5 变式双活棋位置思想 274.3.2.6 两组双活棋位置思想 274.3.2.7 更优堵棋位置思想 284.3.2.8 排序数择优思想 294.4 设置栏功能的实现 304.4.1 界面设置的实现 304.4.2 棋盘信息记录功能的实现 314.4.3 帮助的实现 315. 测试 32致 谢 36参考文献

8、37附 录 38代码1五子棋单机版 窗体Form1 38代码2五子棋单机版 QiPan 48代码3五子棋单机版 C_Num 64代码4五子棋单机版 SiteQueue 651 绪 论1.1 起源与发展相传中华民族的祖先轩辕黄帝无意之中画下了十七条横线十条竖线,这无意中的发明造就出了五子棋。早在公元595年古人就烧制瓷质五子棋盘了。千百年来,人们用各种材质来制造围棋的棋子,如:玻璃、瓷器、玉、玛瑙、铜等等。古代五子棋棋盘与围棋棋盘是通用的,汉魏时为十七路(1717)棋盘,至南北朝时即已流行十九路(1919)棋盘,直至1931年,才出现所谓五子棋专用棋盘。据日本史料文献记载,中国古代的五子棋先由中

9、国传到高丽(今朝鲜),然后于公元1688年至1704年日本的元禄时代再从高丽传到日本,最初在皇宫和贵族大家庭中流行,到元禄末期,开始在民间盛行。1899年,对传统五子棋进行规则改良后,经过公开征名,“联珠”这一名称才被正式确定下来。取意于汉书律历志上中“日月如合璧,五星如联珠”一句,现写做“连珠”。20世纪初传统五子棋及连珠从日本传入欧洲,五子棋英译为“Five In A Row”(缩写为FIR)。1958年以及1979年,瑞典和前苏联分别成立了连珠联盟。1988年,日本、前苏联以及瑞典三个国家的连珠组织在瑞典成立国际连珠联盟(Renju International Federation,简称

10、RIF)1.2 研究目的和意义既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;五子棋游戏的文化源渊流长,具有东方的神秘和西方的直观,既有“场”的概念,亦有“点”的连接;是中西文化的交流点,是古今哲理的结晶。五子棋游戏不但容易上手,而且它区别于别的游戏,它不但能使人娱乐,而且能使人的头脑变得更加聪明。2 .NET平台简介与开发环境安装2.1 平台简介.NET18的目的是通过基于web服务器提供的分布式服务平台,可以实现在不用考虑使用何种操作系统、设备或编程语言的情况下,能够在任何地点,把所有信息、设备、系统和人有机的联系起来,让人们可以随时随地的进行通信和信息交互。

11、.NET框架是一个多语言组建开发和执行环境,它提供了一个跨语言的统一编程环境3。.NET框架的目的是便于开发人员更容易地建立Web应用程序和Web服务,使得Internet上的各应用程序之间,可以使用Web服务进行沟通。从层次结构来看,.NET框架又包括三个主要组成部分:(1) 公共语言运行时(CLR:Common Language Runtime)、(2) 服务框架(Services Framework)和上层的两类应用模板传统的Windows应用程序模板(Win Forms)和基于ASP.NET1的面向Web的网络应用程序模板1314(Web Forms和Web Services)。2.2

12、 开发环境安装首先,在网上下载Visual Studio 2008软件5,然后点击安装Visual Studio 2008,如图2.1所示。图2.1 安装然后,等待安装组件加载完成,如图2.2所示。图2.2 加载等待接着,单击下一步,接受条款,如图2.3所示。图2.3 接受条款选择默认值,点击 安装,等待完成,如图2.4所示。图2.4 默认安装最后,在安装完成后,首次启动时,选择C#作为默认开发环境即可。3 .NET的五子棋游戏的设计本项目中五子棋主要包含两大主要模块6,如下图3.1所示。第一个模块为主要模块,用于实现五子棋的游戏功能。第二个模块为辅助模块,用于实现五子棋的相关辅助设置。图3.

13、1 主要模块3.1 游戏模块该模块实现游戏的主要功能,共包含两个小模块,如下图3.2所示。第一个模块为棋盘栏,实现游戏玩家点击下棋的功能。第二个小模块为控制栏,对下棋的过程进行功能控制。图3.2 游戏模块3.1.1 棋盘栏实现棋盘的绘制7,和玩家棋子的绘制,并在最后一颗棋子上绘制标记。初始时,根据给定的行列数绘制棋盘,玩家单击棋盘时,在单机对应的棋盘位置绘制棋子。图3.3 游戏模块 图3.4 棋盘栏效果图3.1.2 控制栏控制栏,主要实现游戏过程中的各种控制功能、棋盘信息显示功能,如图3.5所示。控制功能有悔棋、让子、托管、对战、重玩、设置。棋盘信息显示功能有提示下一位玩家、显示鼠标处对应的棋

14、盘坐标、显示鼠标处玩家最大棋型、显示棋盘中各玩家的最大棋型、其他信息。图3.5 控制栏模块 图3.6 控制栏效果3.2 设置模块设置模块设置三个子页面,如图3.7所示。界面,进行棋盘界面信息的设置。记录,记录以前的游戏信息与恢复。帮助,软件的帮助信息。图3.7 设置模块3.2.1 界面设置界面设置主要实现棋盘界面显示样式的设置,如图3.8所示,具体有棋盘的行、列数、棋盘颜色、棋盘背景、棋盘格大小、玩家数目、游戏等级、音效、隐藏边框、侧边栏。图3.8 界面设置图3.9 界面设置效果图3.2.2 游戏记录恢复该栏目就是实现对先前的棋局的恢复功能,该栏有一个日历控件,游戏玩家通过选择曾经的游戏日期查

15、看曾经的游戏记录,双击对应的游戏记录15 16 19,恢复上次退出时的棋局,记录界面效果如图3.10所示。图3.10 棋型记录界面3.2.3 帮助页该栏目为玩家提供一些游戏帮助,展示该软件的一些其他信息,如图3.11所示。图3.11 帮助页4 .NET的五子棋游戏的功能实现4.1 棋盘栏的实现棋盘栏,实现的功能是对棋盘的绘制,点击棋盘后棋子的绘制,以及最后一颗棋子上标记的绘制,如图4.1所示。图4.1 棋盘栏4.1.1 棋盘的绘制对于棋盘的绘制,我们可以在窗体中放入一个PictureBox控件,在该控件上创建一个System.Drawing中的Graphics对象,使用Graphics对象的D

16、rawRectangle()绘制棋盘外边框、使用DrawLine()实现其它棋盘线的绘制。语法如下图4.2所示:图4.2 棋盘绘制具体的棋盘绘制的算法,在本项目中是由drawQipan()这个函数来实现的。效果如下图4.3所示,背景图像可从PictureBox控件的属性中进行添加。图4.3 棋盘4.1.2 棋子的绘制对于棋子的绘制,使用的是Graphics对象的DrawImage()函数来实现。语法如下图4.4所示:图4.4 棋子绘制下棋时,我们使用鼠标单击棋盘,要求绘制的棋子在对应的棋盘格交点处。对于这个过程我们可分两步来加以实现。第一步获取棋盘坐标,第二步绘制棋子。4.1.2.1 棋盘坐标

17、的获取 棋盘是我们按照一定的方格大小进行绘制的,那么当我们在棋盘上单击鼠标时,对于每一个单击位置,都有一个唯一对应棋盘坐标。它们之间存在如下的转化关系,我们从PictureBox控件被鼠标单击的事件中获得鼠标的像素位置并转化为棋盘坐标。图4.5 获取棋盘坐标4.1.2.2 棋盘坐标处绘制棋子为了能够在指定棋盘坐标处进行棋子绘制,我们需从棋盘坐标计算出棋子图像的绘制起点,使得棋子中心正好为棋盘线的交点。然后从该点开始绘制棋子即可。实现算法如下图4.6所示:图4.6 坐标处棋子绘制在本项目中,为了方便对所有玩家的棋子进行绘制,定义了一个Image 数组image存储各玩家的棋子图像,并自定义dra

18、wpic()函数实现棋子的绘制。4.1.3 棋子标记的绘制与擦除棋子标记的功能就是标记最后一次所下的棋子,方便当前玩家查看前一个玩家的落棋位置。棋子标记的绘制过程与棋子的绘制完全相同,我们只需要再制作一个,大小和棋子相同、包含标记的背景透明的图像,然后绘制到最后一颗棋子的坐标处即可。当我们再次落下新的棋子时,对于前一颗棋子上的标记我们需要将之擦除。那么我们如何将之擦除呢?我们只需重新绘制前一颗棋子即可。4.1.4 棋子的擦除在游戏过程中,由于种种原因,我们经常会使用到悔棋功能,而悔棋在前台用户界面的表现形式则为棋子的擦除。棋子的擦除过程与标记的擦除相类似,也是对棋子所在位置的棋子大小的区域进行

19、重新绘制。不同的是,棋子在擦除时,重新绘制所使用的图像不是棋子,而是该棋子所在区域的背景图像。另外,还需重新绘制该棋子所在区域的棋盘线。4.1.2.1 用背景擦除棋子在用背景擦除棋子时,我们使用Graphics对象DrawImage()函数的另一种重载形式来实现。使用背景图像中棋子所对应的背景区域,来重画要擦除的棋子所在的棋盘区域。具体的算法实现如下:图4.7 棋子擦除4.1.2.2 棋盘线的补充绘制因为棋盘是使用Graphics对象10绘制出来的,在使用背景图像擦除棋子后,棋子是被擦除了,但却会出现一些其它问题,如下图所示:图4.8 棋子擦除前 图4.9 棋子擦除后棋子成功擦除了,但该棋子区

20、域的棋盘线却需要重新绘制。对于棋盘线的补充绘制,在不同的坐标处会有不同的绘制需要。具体要求有:在棋盘边界处,我们要求绘制的棋盘线宽度为2。而内部的棋盘线,我们要求绘制的棋盘线宽度为1。另外,在棋盘边界处补充绘制棋盘线时,要求垂直于边界方向的棋盘线绘制宽度为棋子图片宽度的一半,并且绘制方向是从棋盘边界向棋盘内进行绘制。对于棋盘内部的棋盘线绘制宽度则为棋子的宽度。基于以上的要求,我们定义一个函数来实现指定棋盘坐标处,棋盘线的补充绘制,具体算法如下图4.10所示:图4.10棋盘线的补充绘制4.2 控制栏控制功能的实现控制栏,用于实现对游戏流程的控制、棋盘信息的显示。控制栏是本项目的关键、也是最有难度

21、的实现环节,界面效果如下图4.12所示。4.2.1 棋盘信息的表示与存储在实现控制栏的功能之前,我们首先需要实现的就是对棋盘信息的表示和存储,这是实现其他各项功能的基础。那么对于五子棋的棋盘它可以包含那些信息呢?首先,棋盘有它特定的行、列数。其次,还有下棋玩家的数目,通常为两人,但也存在多人的情况。再有,就是各玩家所下的棋子以及棋子对应的棋盘坐标。在记录坐标的过程中,我们还可以统计各个玩家的棋子和所有玩家棋子数。最后,是棋盘的一个非常重要的信息,随着我们在棋盘中不断的落下棋子,各个棋盘位置的棋型也在不断的变化,我们需要根据棋型信息来选择下一步的落棋位置。于是,我们定义了一个棋盘类型2 4如下图

22、4.11所示:图4.11棋盘类型 图4.12控制栏我们使用Xnum和Ynum记录第num颗棋子在棋盘中的落棋位置,用playerXnum,Ynum标记该棋子为哪个玩家所下,用stylenum, , 存储第num位玩家在棋盘中所有位置的棋型信息。4.2.2 棋型的定义、表示、存储、刷新定义好棋盘的信息之后,我们需要对棋盘各处的棋子信息进行整理、分析,以便提取出有用的棋型信息,为我们提供指引,做出有效的落棋决断。那么棋盘中的棋型信息该如何定义,又要如何才能识别它们呢?4.2.2.1 棋型的定义对于棋盘中的各处坐标,在落下一些棋子之后,会由于所处的位置不同,在各个位置再落下棋子会达到不同的棋型。对于

23、棋型的定义,大体上有三类:活棋、冲棋、死棋。那么它们之间有什么区别呢?在我查看的一些相关资料中,是这样定义它们的:活棋,是指同时拥有两个或两个以上落棋位置的棋型,且这两个落棋位置都要求可以达到更大棋型,在被堵住一个之后仍有一个更大棋型位置。如下图4.13所示:图4.13 活3冲棋,仅有一个更大落棋位置,在被其他玩家堵住后,成为死棋。如下图4.14所示:图4.14 冲3死棋,即使落棋也无法达到五子相连的棋型。如下图4.15所示:图4.15 死3其实,上述棋型的定义还并不完全精确,我们还需要对其进行补充定义,如下图4.16所示的棋型:图4.16 棋型1对于这样的棋型,我们看到它们中间有两个更大棋型

24、落棋位置,但它却并不属于活棋,因为当我们在一处位置放入棋子,其他玩家可在剩下的另一处放入棋子,而此时红方的棋型为冲3并没有增大,故对于这样的棋型,将之定义为冲棋,更为合适。于是,我们对于棋型的补充定义是:在棋型周边的某个位置落入棋子后下一步可达到的最大棋型类型,为当前棋型的类型。如上面的棋型,在落入棋子后可达到冲4,故当前的棋型为冲3。又如,下图4.17所示的棋型:图4.17 棋型2对于这样的棋型,当我们在中间位置放入红棋后可成为活棋,故为活3,而当我们在两边放入红棋是为冲棋,故为冲3。那么到底算哪一种棋型呢?这样的补充定义是否自相矛盾呢?我们以最大的棋型为准,为活3;这样的定义也并不矛盾,当

25、我们在中间的位置放入棋子它为活4,故该位置在未放入棋子时,为活3位置。而两边的位置若放入棋子为冲4,未放入棋子时为冲3位置。同理,对于1、2、4颗棋子时也分别都有活、冲、死三种棋型94.2.2.2 棋型的表示 有了棋型的定义,那么棋型应当如何表示呢?我们定义棋型是为了能够根据棋型,进行更优落棋位置的判定。那么我们表示的棋型,更优棋型应当有更大的权值。对于更优棋型我们有:相同棋子数时,活棋冲棋死棋。相同棋型时,棋子多的棋型更优。具体有,五子活4冲4活3冲3活2冲2活1冲1于是,我们以棋型的棋子数为十位,以0、1、2分别代表死棋、冲棋、活棋作为个位,构成代表各种棋型的权值5042413231222

26、112110(死棋时棋子数视作0)。这样就可以实现各种棋型的表示了。4.2.2.3 棋型的存储在我们能够使用特定的权值,表示对应的棋型之后。我们如何在后台的棋盘中存储棋型呢?对于棋型的存储,一种很容易想到的方式,就是图的遍历,从各个棋子处开始,进行图的遍历,判断该棋子周边最大棋型,存储到棋子对应的棋型数组style,中。然而,图的遍历算法较为复杂,执行效率也会随着棋盘中棋子数目的增多,而不断下降。故,这种较容易想到的方式,并不是一种较为理想的解决方式。我们转变一下思维,从棋子周边的空位置开始,判断该空位置周边,五颗棋子范围以内,各玩家的最大棋型,分别存储到玩家对应棋型数组style,中。而对于

27、已经落入棋子的位置,我们不再判断它周边的棋型。如下图4.18所示的棋型:图4.18 棋型2此时,我们若在该棋子左边的空位置处落入棋子可达到活4,故该空位置为活3点。若在该棋子右侧落入棋子可达冲4,故该空位置为冲3点。于是我们在红棋对应的棋型数组中,对应于这两个空位置的棋型位置,分别存入代表棋型的权值32和31。对于该棋子周边的其它空位置,也进行同样的判断和棋型存储。从棋子周边的空位置,进行最大棋型的判断存储有几个优势。首先,我们可以动态的刷新棋型数组中的值,而不必遍历整张棋盘。因为当我们落棋时,落下的棋子改变的仅仅是该位置周边,5颗棋子范围以内的棋型,更远距离的棋型不会受到影响,故不需要对它们

28、进行更新。其次,我们更新棋型的操作,是分散到每一步落棋的执行过程之中的,而一颗棋子周边5颗棋子范围内的空位置有限。故执行效率并不会随着棋子数的增多而下降。相反,随着棋子数增多,某个空位置落入棋子后,其周边的空位置减少,进行棋型判断的次数减少,效率还可能提升。4.2.2.4 棋型的更新由棋型的存储我们知道,我们是从棋子周边的空位置处开始进行棋型判断、并存储到各玩家对应的棋型数组中的,并且5颗棋子范围以外的空位置,棋型不受影响。基于这些,我们只需在落下新的棋子时,更新该棋子周边空位置的棋型即可。具体的更新的算法实现,这里不做详细描述,参见棋盘类中棋型更新函数refreshStyle()。4.2.3 棋型的识别棋型的识别,是实现人机对战的基础,也是棋型信息提示的实现基础。那么如何实现棋型的识别,将棋盘中的棋型转化为棋型对应的权值表示形式呢?我们先看一个示例,如下图4.19所示:图4.19 棋型3位置,3处为冲3位置,4处为冲2位置。在方向1和其反方向5,我们可以摸索出棋型的一般识别过程如下图4.20所示。图4.20 棋型识别若我们在1处落入棋子,可达到冲4,则1处为冲3位置;同样的2处为活对于任意一个未下棋子的空位置,都有8个

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1