五子棋论文.doc_第1页
五子棋论文.doc_第2页
五子棋论文.doc_第3页
五子棋论文.doc_第4页
五子棋论文.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XXXXXXXX毕业论文(设计)XXXXXX职业学院毕 业 论 文(设 计)2010届题 目 五子棋编程(软件) 姓 名 XXXXXX 学 号 XX233328 专业班级 XX计算机应用技术1班 指导教师 XXXX老师 2010 年 05 月 10 日XXXXXX毕业设计任务书适用专业:计算机应用年级:20XX级时间:2009-2010 学年指导教师:XXXXXX联系方式mail: QQ:361681215 一、题目1 五子棋编程(软件)二、设计目的以上课题希望通过实际的制做为以后的工作打下初步的基础。IV三、设计要求1、 运用C#、java等语言制作软件项目;2、 运用ASP、ASP.NET、jsp、Dreamweaver、Flash等工具来制作网站项目;3、设计要求:主题鲜明;内容编排合理得当;整体美观大方,可用性强。4、制作完毕后将设计软件(网站)作品、软件(网站)使用说明书和、软件(网站)需求分析用U盘或光盘拷贝给指导老师,软件(网站)使用说明书和软件(网站)需求分析需要打印出来交给指导老师;5、论文要求:论点、论据可靠鲜明,说明有力;排版格式简洁明了;四、开发工具C#、ASP、ASP.NET、java、jsp、Dreamweaver、Flash五、设计报告内容1、封面(A4,由教务处统一印制)2、前言(阐明制作该广告的目的和意义)3、正文(论文的主体部分,必须有素材、有分析、有论据)4、结论(对课题和正文进行概括,指出几点图片制作的心得体会和扩展性分析等)5、参考文献注: 全文应在五千字以上,内容由学生自行印制一式四份(教务处2份、系1份、自留1份)六、时间安排2010年4月1日前完成设计与制作。2010年4月1日至4月20日,行毕业设计报告的撰写和修改,并完成初稿进。2010年5月10日前全部完成,并将毕业设计报告定稿和作品上交指导老师。目 录前言(1)1 国内外游戏的发展(1)2 问题背景(1)3 五子棋简介(1)1 开发环境与运行环境(2)11 开发环境 (2)12 运行环境 (2)2 系统设计(3)21 概要设计过程 (3)211 C/S五子棋模式设计(3)22 详细设计过程(3)221 概要介绍(3)2211 本程序介绍(3)2.2.2 用软件工程方法学指导开发过程 (3) 问题定义 (4) 可行性研究 (5) 需求分析 (6) 总体设计 (7) 详细设计 (8) 编码和单元测试 (8)3 界面和代码(8)31 主要界面 (8)32 主要代码 (9)321 初始化棋盘(9)322 画棋盘格(10)323 输赢情判定(11)324 寻找最佳的五个点,并形成栈元素,若一个也找不到返回false (13)325 求(x,y)点对于gobangColor色棋的权值(15)4 结论(26)41 结论 (26)参考文献(27)致谢(28)五子棋编程(软件)专业:计算机应用技术 班级:XX计算机应用技术(1)班 姓名:苏木金摘 要博弈是人工智能的主要研究领域之一,它涉及人工智能中的推理技术、搜索方法和决策规划。本文将这些技术用于五子棋开发设计中,设计了一个人机智能五子棋系统,实现人和计算机两方进行博弈。五子棋亦称“串珠”、“连五子”,国际上正式称“连珠”,是我国古老的传统棋种之一,现成为国际棋类竞技项目。五子棋具有“短、平、快”的现代游戏特征,简单易学而又富有趣味,为大众喜闻乐见。然而,五子棋又包含深奥的哲理和弈战技巧,尤其是随着国际职业连珠运动的发展和竞赛规则的逐步完善,弈棋技法和战术有了很大发展,因此已不再是简单的游戏。 五子棋与围棋棋子相似,棋盘略有不同,为十五路(1515),但下法完全不同。围棋像军团作战,博大精深;五子棋则像短兵相接,凶险复杂。其国际规则主要包括:1、黑先、白后,从天元开始相互顺序落子;2、最先在棋盘横向、竖向、斜向形成连续同色五个棋子的一方为胜;3、黑棋禁手判负、白棋无禁手。黑棋禁手包括“三、三”、“四、四”、“长连”。黑方只能“四、三胜.【关键词】人工智能 五子棋 算法前言1国内外游戏的发展 近年来,随着网络的发展,游戏成为许多人关注的焦点。与传统的影音产业一样,游戏产业也是娱乐行业的一个重要组成部分,基于数字化的网络游戏更让人们找到了前所未有的感受,并已经成为全球互联产业的热点。2问题背景计算机运算速度一直遵循着摩尔定律在飞速的发展,随着这些技术的快速发展,使得大规模的运算得以在很短的时间内实现。正是基于这些技术,近年来各式各样的棋类游戏软件也纷纷出现在了电脑荧屏上,使得那些喜爱下棋,又常常苦于没有对手的棋迷们能随时过足棋瘾。所以如果能设计一款兼有人工智能的五子棋软件则对五子棋棋迷们来说无疑是个“福音”。在人机智能方面其中战胜过国际象棋世界冠军-卡斯帕罗夫的“深蓝”便是最具说服力的代表;其它像围棋的“手淡”、象棋的“将族”等也以其优秀的人工智能深受棋迷喜爱;本系统将重点放在人工智能方面,将人工智能运用到五子棋的开发中去。选择五子棋游戏作为本设计的课题,是因为该游戏的规则简单,所涉及的方向比较少。这样才能将问题的重点放在人工智能解决上,而非规则的解决,有更多的精力放在高效算法优化。希望能通过本次系统的设计,整合所学的知识,实现从理论到实践上的升华。3五子棋简介 五子棋,亦称“连五子”、“串珠”、“五目”、“五格”等等,日文称之为“连珠”,英文则称之为“Gobang”或“Renju”或“FIR(Five In a Row)”,是起源于中国古代的传统黑白棋种之一。早在“尧造围棋”之前,可能民间就已有五子棋游戏。中国人称五子棋为“连五子”或“连珠”,也许是源于史书中“日月如合璧,五星如连珠”。古代的五子棋盘与围棋盘通用,汉魏时期通行的是十七路棋盘;到了南北朝时期已流行十九路棋盘,这与现代通用的五子棋十五路棋盘是不相同的。此外,古代的五子棋的下法是“白先黑后”,大约是白为阳,为气,气者清扬向上,气者先行;而黑为阴,为形,形者凝聚向下,形重迟缓,故持黑方后行。我国台湾现在仍有以“白先黑后”的规则下五子棋,这与现代五子棋的“黑先白后”的下法是不同的。五子棋有何年何月传到国外,尚不明了。大约随围棋一起在我国南北朝时期先后传入朝鲜、日本等地。据日本史料文献记载,中国古代的五子棋先由中国传到高丽,然后于公元1688年至公元1704年日本的元禄时代再从高丽传到日本。当时主要在皇宫和贵族大家庭中流行。到元禄末期,在日本京都,这一当时被称为“五目碰”、“五格”的棋游戏在民间开始盛行起来,无论武士、僧侣、农夫等都能参与这一活动。到日本明治32年公元1899年,经过公开征名,“连珠”这一名称才被正式确定下来。从这以后,连珠这一活动经过了不断的改良,主要是规则的变化。例如1899年规定禁止黑白双方走“双三”;1903年规定只禁止先行的黑方走“双三”;1912年规定,黑方被迫走“双三”亦算输;1916年规定,黑方不许走“长连”;1918年规定,黑方也不许走“四、三、三”;1931年规定,黑方不许走“双四”,并规定将19X19道线的围棋盘改为15X15道线的五子棋专用棋盘。通过这一系列的规则变化,使五子连珠这一简单的游戏复杂化、规范化,而最终成为今天的职业连珠五子棋,同时也成为一种国际比赛棋。目前,连珠五子棋这一棋类运动已迅速在国际上发展起来。现在,已有40多个国家和地区开展了五子棋活动。许多国家的人对五子棋都有不同的爱称,例如韩国人吧五子棋称为“情侣棋”,言下之意是说情人之间下五子棋有利于增加感情的交流;欧洲人称之为“绅士棋”,喻棋手下五子棋的君子风度胜似绅士;美洲人称之为“商业棋”,意思可能是边下五子棋边谈生意,是商业贸易之桥;日本人则称之为“中老年棋”,表示五子棋适合成熟的中老年人的生理特点和思维方式。不同语言、地区的人们都可以借助五子棋这一简单而又深奥的棋艺进行交流、比赛,增进友谊。1 开发环境及运行环境1.1开发环境l Intel Pentium 4 2.0GHz,216M内存,80G硬盘l Microsoft Windows XP Professionall Microsoft Visual C#l Microsoft Developer Network for Visual Studio.NET 20051.2运行环境l Intel Pentium 2及以上处理器,32M以上内存,4G以上硬盘l Microsoft Windows 9X/NT/XP操作系统l 1024*768或以上的屏幕分辨率2 系统设计2.1概要设计过程2.1.1 C/S模式五子棋设计网络互连实现信息的共享成为以后计算机的发展趋势,现有的网络编程模式主要分成两类:一种是基于C/S(Client/Server客户机/服务器)模式,另一种是B/S (Browser/Server,浏览器/服务器)模式;C/S 程序具有好的交互性,功能强大, 但是客户端必须安装客户端软件,限制了其应用;B/S 模式下要求客户端具有浏览器,但浏览器在安全方面有一些限制,交互性与功能有一些限制。网络五子棋系统应用于局域网,对交互性要求较高,本系统选用了C/S 模式进行实现。2.2详细设计过程2.2.1 概要介绍 本程序介绍本游戏中只提供:人机对战模式。在人机对战中玩家通过选择是由电脑先开始还是由玩家先开始和电脑一决高下,可以向后悔棋。同时本系统还设有调节棋盘的透明度,同时本软件设有开始按钮,如果没有启动,玩家无法进行游戏。2.2.2 用软件工程方法学指导开发过程 在小规模的程序开发中,很少人注意用软件工程的方法学设计系统,包括我本人,在开发一些小功能程序时总是随心所欲的添加需求:有时为了类与类之间的通信需要,往类中添加不相关的变量,直接修改变量的属性或者声明一大堆的全局变量。虽然最后系统都能够”笨重”的运行起来,但这是明显违背程序设计方法学。可维护行,易修改性严重降低。后期如果需要添加某些功能的时候将变得十分的繁琐。可以想象在多个团队一起开发的大型系统中这种粗陋的开发方法根本是行不通的。所以要养成用正确的方法指导开发过程的习惯,虽然有时候看起来有点大题小做,但我觉的这是作为一名合格的软件开发工程师所必须掌握的技能。通过长期不断的积累才能增加我们参与大型项目开发的能力。 下面对软件工程作下简单的介绍软件工程一直以来都缺乏一个统一的定义,很多学者、组织机构都分别给出了自己的定义:Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。 IEEE:软件工程是开发、运行、维护和修复软件的系统方法。 Fritz Bauer:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。 目前比较认可的一种定义认为:软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。 我个人对软件工程理解是,它一种工程上的方法学,用一种有步骤,有计划的正确有效方法指导开发过程。 软件工程的精髓可以用著名的软件工程专家B.Boehm的七条基本原理来概括。 (1)用分阶段的生存周期计划进行严格的管理。(2)坚持进行阶段评审。(3)实行严格的产品控制。(4)采用现代程序设计技术。(5)软件工程结果应能清楚地审查。(6)开发小组的人员应该少而精。(7)承认不断改进软件工程实践的必要性。 目前绝大部分的软件方法都可以从这七条基本推倒出来。B.Boehm指出,遵循前六条基本原理,能够实现软件的工程化生产;按照第七条原理,不仅要积极主动地采纳新的软件技术,而且要注意不断总结经验。 问题定义主界面 问题定义的一个的关键问题是“要解决的问题是什么”,这个是这个阶段必须要明确要回答的问题。在没将问题定义好,试图准备下个阶段的任务。这明显是不成熟,甚至不可能的事。用户选择操作系统功能 调用单机模式系统模型 本次系统设计中首先明确了需要解决的问题是五子棋AI算法,基本的要求是设计一款能够实现单机对战的五子棋游戏,提供一些基本的操作如退出系统,悔棋等操作,重点是放在AI算法。而并不是美工设计,也不是为了提供各种操作丰富的接口。主要是通过这种可视化的界面探讨AI,当然增加可玩性和美工会给系统润色不少。 上面只是很粗略的明确大概的方向,严格按照软件工程的方法这个阶段需要生产一份书面报告。需要通过对系统的实际用户访问调查,扼要地写出他对问题的理解,并在用户和使用部门负责人的会议上认真讨论这份书面报告,澄清含糊不精的地方,改正理解不正确的地方,最后得出一份双方都满意的文档。本系统的需求很少也很明显了。 可行性研究 这个阶段要回答的关键问题:“对于上一个阶段所确定的问题是否可行?”为了回答这个问题,我们需要进行一次大大压缩和简化了的系统分析和设计的过程,也就是在较抽象的高层次上进行的分析和设计的过程。可行性研究应该比较简短,这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。 可行性研究应该比较简短,这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。可行性研究以后的那些阶段将需要投入要多的人力物力。及时中止不值得投资的工程项目,可以避免更大的浪费。根据这些基本的概念,我在技术上主要是通过相关文档资料的查找后确定可行性,凭着大学期间打下厚实的专业科基础,特别是数据结构和算法,能够在这段时间内理解通透并应该有所改进,后来证明是对的。利用剩下时间也应该来说也比较充裕的。经济上暂不考虑。下面主要从技术上进行分析:工具: Visual Studio 2005 包含了一系列高效的、智能的开发工具,不论是为开发初学者,还是为经验丰富的企业开发团队都提供了很多全新的、强大的功能: 全方位的工具平台 不论您是一位编程初学者还是一个富有经验的企业开发团队的一员,为您提供高效的开发工具。 减少开发的复杂度 确保您能更加轻松发布基于 Framework 的解决方案,包括 Windows、Web、移动和基 于 Office 的应用。 第三方的生态系统 允许您利用来自 Visual Studio 行业合作伙伴的参与研发的产品,并体验用来补充 Visual Studio 2005 第三方解决方案的全面部署。 改善团队的沟通 给您提供高效智能的生命周期工具,通过使用 Visual Studio 2005 Team System,来增强 IT 周期参与者之间的交流与协作。Visual Studio .NET 是一套完整的开发工具,用于生成 ASP Web 应用程序、XML Web services、桌面应用程序和移动应用程序。Visual Basic .NET、Visual C+ .NET、Visual C# .NET 和 Visual J# .NET 全都使用相同的集成开发环境 (IDE),该环境允许它们共享工具并有助于创建混合语言解决方案。另外,这些语言利用了 .NET Framework 的功能,此框架提供对简化 ASP Web 应用程序和 XML Web services 开发的关键技术的访问。 算法: 在这图论搜索技术这方面,前人已有很成熟的算法。如粗糙的有深度优先算法(DFS)和广度优先算法(BFS)这两个基本的算法,关键需要解决的是能够设计出一种高效的剪枝函数,减小搜索问题的规模。目前博弈类游戏中的人工智能基本都采用极大极小值方法这对我来说是个挑战,而剪枝的则采用Alpha-Beta,通过丰富的文档资料初步了解到这些技术已经很成熟了。我有信心能解决好这个问题。所以通过对以上关键问题的分析,可以很明确了该系统的可行性。这个阶段的任务告一段落了。可以着手下一个阶段的任务了。软件工程很强调文档驱动开发过程,只有完成了上个阶段的工作后,才能开始下一步骤,这是传统的瀑布开发方法。当然不同的开发模型,过程也会有所区别,大体上都遵循软件工程的这个步骤。 需求分析 这个阶段的任务仍然不是具体地解决问题,而是准确地确定“为了解决这个问题,目标系统需要做什么”,主要是确定目标系统必须具备哪些功能。 用户了解他们所面对的问题,知道必须做什么,但是通常不能完整准确地表达出他们的要求,更不知道怎样利用计算机解决他们的问题;软件开发人员知道怎样使用软件实现人们的要求,但是对特定用户的具体要求并不完全清楚。因此在需求分析阶段必须和用户密切配合,充分交流信息,以得出经过用户确认的系统逻辑模型。通常用数据流图、数据字典和简要的算法描述表示系统的逻辑模型。 在设计本系统时考虑到用户需要的是一个操作简便界面简单的游戏软件。同时要提供人机和人人这样的功能。特别是人机部分,要考虑到不同级别的用户。电脑智能不能太低需要有一定的智能下棋功能。 本系统用提供平常下棋的一些步骤操作。 人机对战:选择和电脑对弈操作,同样也可以执行悔棋功能,只是因为是人机所以无需通过确认。2.2.4 总体设计这个阶段必须回答的关键问题是:“概括地说,应该如何解决这个问题?”首先,应该考虑几种可能的解决方案。如,目标系统的一些主要功能是用计算机自动完成还是用人工完成;如果使用计算机,那么是使用批处理方式还是人机交互方式;信息存储使用传统的文件系统还是数据库。通常至少应该考虑下述几类可能的方案:低成本的解决方案。系统只能完成最必要的工作,不能多做一点额处的工作。本系统的最基本要求就是能够实现必要的操作,其他额外的一些工作在后面完成中等成本的解决方案。这样的系统不仅能够很好地完成预定的任务,使用起来很方便,而且可能还具有用户没有具体指定的某些功能和特点。虽然用户没有提出这些具体要求,但是系统分析员根据自己的知识和经验断定,这些附加的能力在实践中将证明是很有价值的。这个成本方案在完成上面的低成本方案后添加的。如增加保存棋局,美化界面,实现观看电脑与电脑之间的对战等功能。高成本的“十全十美”的系统。这样的系统具有用户可能希望有的所有功能和特点。结构设计的一条基本原理就是程序应该模块化,也就是一个大程序应该由许多规模适中的模块按合理的层次结构组织而成。总体设计阶段的第二项主要任务就是设计软件的结构,也就是确定程序由哪些模块组成以及模块间的关系。通常用层次图或结构图描绘软件的结构。界面模块人机模块用户 结构图 详细设计 这个阶段的具体内容我把放到模块分析的章节去分析。下面仅作个简要的概述。总体设计阶段以比较抽象概括的方式提出了解决问题的办法。详细设计阶段的任务就是把解法具体化,也就是回答下面这个关键问题:“应该怎样具体地实现这个系统呢?”这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明。这种规格说明的作用很类似于其他工程领域中工程师经常使用的工程蓝图,它们应该包含必要的细节,程序员可以根据它们写出实际的程序代码。2.2.6 编码和单元测试这个阶段的关键任务是根据以上阶段分析的软件模型,编写各个功能模块。 要注意的是程序的扩张性和可读性。以便以后软件的升级修改。同时要仔细的测试每个功能编写好的功能模块。3 界面与代码3.1系统主要界面用户界面在整个系统的使用中起着很大的作用,它将直接影响到用户对软件的评价。界面是人机交互的平台,所以在设计时尽量往用户方考虑。提供操作简便和友好界面。 以下是系统使用的界面,感觉还有很多地方需要改进和完善。但是总体来说已经能够基本满足系统的需要。拥有较为良好的交互功能。3.2系统主要代码3.2.1 初始化棋盘private void InitializeGobangBoard() gobangBoardGroupBox.Paint += new PaintEventHandler(gobangBoardGroupBox_Paint); int x, y; for (x = 0; x 15; x+) for (y = 0; y 15; y+) gobangPictureBoxx, y = new PictureBox(); gobangPictureBoxx, y.Location = new Point(10 + x * 40, 10 + y * 40); gobangPictureBoxx, y.Size = new Size(40,40); gobangPictureBoxx, y.BackColor = Color.Transparent; gobangPictureBoxx, y.SizeMode = PictureBoxSizeMode.CenterImage; gobangPictureBoxx, y.Visible = false; gobangBoardGroupBox.Controls.Add(gobangPictureBoxx, y); 3.2.2 画棋盘格private void gobangBoardGroupBox_Paint(object sender, PaintEventArgs e) int i; Graphics gr = e.Graphics; Pen myPen = new Pen(Color.Black, 2); SolidBrush brush = new SolidBrush(Color.Red); for (i = 0; i 15; i+) gr.DrawLine(myPen, 30 + i * 40, 30, 30 + i * 40, 590); gr.DrawLine(myPen, 30, 30 + i * 40, 590, 30 + i * 40); gr.FillEllipse(brush,306,306,8,8); gr.FillEllipse(brush, 147, 147, 6, 6); gr.FillEllipse(brush, 467, 147, 6, 6); gr.FillEllipse(brush, 147, 467, 6, 6); gr.FillEllipse(brush, 467, 467, 6, 6); 23 输赢情况判定private void gobangBoardGroupBox_MouseClick(object sender, MouseEventArgs e) int x, y; if (blnBegin) x = (e.X - 10) / 40; y = (e.Y - 10) / 40; PutAGobang(personGobangColor, x, y); if (Forbiden(personGobangColor, x, y) MessageBox.Show(你输了!本点为禁手点!, 本局结果, MessageBoxButtons.OK, MessageBoxIcon.Information); blnBegin = false; personRadioButton.Enabled = true; computerRadioButton.Enabled = true; startButton.Enabled = true; else if (Win(personGobangColor, x, y) MessageBox.Show(恭喜你,你赢了!, 本局结果, MessageBoxButtons.OK, MessageBoxIcon.Information); blnBegin = false; personRadioButton.Enabled = true; computerRadioButton.Enabled = true; startButton.Enabled = true; else if (totalGobangCount = 225) MessageBox.Show(棋盘已满,本局平棋!, 本局结果, MessageBoxButtons.OK, MessageBoxIcon.Information); blnBegin = false; personRadioButton.Enabled = true; computerRadioButton.Enabled = true; startButton.Enabled = true; else Point bestPoint = new Point(); if (FindBestPoint(ref bestPoint) PutAGobang(computerGobangColor, bestPoint); if (Win(computerGobangColor, bestPoint) MessageBox.Show(你输了!加油哦!, 本局结果, MessageBoxButtons.OK, MessageBoxIcon.Information); blnBegin = false; personRadioButton.Enabled = true; computerRadioButton.Enabled = true; startButton.Enabled = true; else if(totalGobangCount=225) MessageBox.Show(棋盘已满,本局平棋!, 本局结果, MessageBoxButtons.OK, MessageBoxIcon.Information); blnBegin = false; personRadioButton.Enabled = true; computerRadioButton.Enabled = true; startButton.Enabled = true; else MessageBox.Show(恭喜你,你赢了!棋盘上所有点均为电脑的禁手点!, 本局结果, MessageBoxButtons.OK, MessageBoxIcon.Information); blnBegin = false; personRadioButton.Enabled = true; computerRadioButton.Enabled = true; startButton.Enabled = true; 3.24 寻找最佳的五个点,并形成栈元素,若一个也找不到返回falseprivate bool FindBestFivePointsAndFormAStackElement(int gobangColor, ref StackElement tempStackElement) int, gobangPower = new int15, 15; bool blnHaveFound; int x, y,i,max; tempStackElement.pointsCount = 0; for (x = 0; x 15; x+) for (y = 0; y 15; y+) gobangPowerx, y = GetGobangPower(gobangColor, x, y); for (i = 0; i 5; i+) /求第i个最佳点 max = 0; for (x = 0; x 15; x+) for (y = 0; y 15; y+) if (max gobangPowerx, y) max = gobangPowerx, y; for(x=0;x15;x+) blnHaveFound = false; for (y = 0; y 15; y+) if (max = gobangPowerx, y) tempStackElement.bestFivePointsi = new Point(x, y); tempStackElement.pointsCount+; gobangPowerx, y = -1; blnHaveFound = true; break; if (blnHaveFound) break; if (tempStackElement.pointsCount = 0) return false; else tempStackElement.gobangColor = gobangColor; tempStackElement.pointNumber = 0; return true; 25 求(x,y)点对于gobangColor色棋的权值private int GetGobangPower(int gobangColor, int x, int y) /求(x,y)点对于gobangColor色棋的权值 int totalPower; GobangPointAttributinton gobPtAttri=new GobangPointAttributinton(); Point left, right, top, down, leftTop, rightTop, leftDown, rightDown; int temp,connectCount; left = new Point(Math.Max(0, x - 4), y); right = new Point(Math.Min(14, x + 4), y); top = new Point(x, Math.Max(0, y - 4); down = new Point(x, Math.Min(14, y + 4); temp = Math.Min(x - left.X, y - top.Y); leftTop = new Point(x - temp, y - temp); temp = Math.Min(x - left.X, down.Y - y); leftDown = new Point(x - temp, y + temp); temp = Math.Min(right.X - x, y - top.Y); rightTop = new Point(x + temp, y - temp); temp = Math.Min(right.X - x, down.Y - y); rightDown = new Point(x + temp, y + temp); if (gobangColor = black) if (virtualGobangBoardx, y != background) return -2; else / /处理黑棋连子情况 / virtualGobangBoardx, y = black; /左右方向 connectCount = ConnectGobangsCount(bl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论