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

开通VIP
 

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

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(基于java的五子游戏的开发设计本科论文.doc)为本站上传会员【天****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

基于java的五子游戏的开发设计本科论文.doc

1、 毕业论文 基于JAVA的五子游戏的开发设计 山东凯文科技职业学院 摘 要 人工智能是一门正在迅速发展的新兴的,综合性很强的交叉科学。它与生物工程、空间技术一起被并列为二十一世界三大尖端技术。它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。目前各发达国家都把人工智能作为重点项目,列入本国的高科技发展计划当中,投入巨大的人力和物力。 计算机人机对弈也是其中之一。作为人智能研究的一个重要分支,计算机博弈是检验人工水平的一个重要方面。它的研究为人工智能带来了很多重要的方法和理论,产生了广泛的社会影响和学术影响。

2、 五子棋人机对弈是计算机博弈中的一种。研究其计算机算法,可以让我们看到人工智能的稚形,也有助于我们人脑的开发。五子棋是我国发明的,研究它可以让更多的外国人了解五子棋,这有助于我国优秀文化的推广。 关键词:人工智能,计算人机对弈,五子棋,算法 目 录 第一章 绪 论 1 第二章 需求分析 2 2.1业务需求 2 2.1.1 此系统使用范围要求 2 2.1.2 功能要求 2 2.2 性能需求 3 2.3 系统平台需求 3 第三章 五子棋的相关基础 4 3.1五子棋解释 4

3、 3.2五子棋基本规则 4 3.3五子棋常用术语 4 第四章 开发工具、环境及其技术 7 4.1 JAVA简介 7 4.2 JAVA 编程环境 8 4.2.1 环境变量 8 4.2.2 Eclipse插件 8 第五章 详细设计 10 5.1程序设计思路 10 5.1.1.设计思想 10 5.1.2.程序设计分析 10 5.2 程序设计 12 结论 22 参考文献 23 致 谢 24 第一章 绪 论 电脑已经深入到日常工作和生活的方方面面,比如文字处理、信息管理、辅助设计、图形图像处理、教育培训以及游戏娱乐等。Windows系统的推出使电脑从高

4、雅的学术殿堂走入了寻常百姓家,各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上已经充满了花样繁多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。Java语言作为一种面向对象的编程语言,具有分布式,可移植,高性能,多线程等特点。通过系统的学习,人们就可以使用它开发出功能齐全,满足特殊需求的应用程序。Java语言易学易用,对学习者掌握技能,开拓思维都有很大的帮助。 我作为一名学生,在系统的学习了Java语言之后,经常用它搞一些小程序。这次毕业设计,正好将学过的Java语言中的各种技术综合起来,用Jbuilde

5、r2006开发工具编写一个小游戏,既对自己学过的技能进行一次检验,也能系统地将学过的知识复习巩固。 随着计算机技术的不断发展,网络技术的普及范围越来越广,网络能够提供的服务多样、便捷,已经成为人们生产生活中不可缺少的重要组成部分。如今网络休闲游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。 网络五子棋游戏是使用Java语言开发的一款游戏。它使用SOCKET建立连接,多线程处理数据,以及可嵌入网络浏览器的ALET作为客户端,这些特点使这款游戏无论是服务器还是客户端的实现都相对容易。通过对该软件的编写,还可以巩固我们对以上各种知识的掌握和理解。

6、 第二章 需求分析 为了开发出真正满足用户需求量的软件产品,首先必须知道用户的需求。软件需求中包括了多个方面来说明用户需求。在这一章中,主要从以下几方面来说明系统的需求。 2.1业务需求 2.1.1 此系统使用范围要求 此系统为智力游戏,适合于各类游戏爱好者。由于其经典性及其游戏的简单性,各类人士都可以也都爱玩。人们在与电脑对战享受娱乐的同时,也会体会到自己的智力也会有所提升。 2.1.2 功能要求 该款游戏主要由一下几个模块组成: 五子棋游戏 人机对弈模式 人人对弈模式 具有悔棋功能 更换棋盘背景 图2—1 五子棋功能模块图

7、 人机对弈模式:选择该模式可以实现人与电脑之间的对弈,电脑会智能的选择该在哪处下子,并会在每次下棋结束后判断是否有哪方已经获胜,如果获胜则结束本局游戏,并提示玩家游戏结束。 人人对弈模式:选择该模式可以实现人与人之间的对弈,系统会提示哪方先下,然后玩家之间交替的下棋,同样系统会在下完每次棋后判断是否有哪方已经获胜,如果获胜则结束本局游戏,并提示玩家游戏结束。 悔棋功能:这个功能也是根据游戏的实际需求而存在的,在现实生活中难免有失误下错了棋,那么就需要悔棋。此功能提供了悔棋功能,使得下棋的灵活性有所提高。玩家若想悔棋,则只需选择悔棋按钮便可以重新下过刚才的棋。 更换棋盘背景:次功能可以根据

8、玩家的爱好任意更换棋盘的背景颜色,由于每个人对颜色的喜好不一样,因此这个功能也是非常必需的。也行更换一种玩家所喜欢的颜色,玩家能发挥得更好。 2.2 性能需求 该款五子棋游戏功能虽然简单,但最主要的还是实现了人人对弈模式和人机对弈两种模式,所以从这个角度来说,该款游戏需要能很好的在两种模式间良好的转换。虽然系统不大,但要在满足玩家的基本要求的情况下,电脑有一定的智能,能给于新手一定的帮助。 2.3 系统平台需求 编程语言:JAVA 操作系统:Windows xp系列 开发工具:Myeclipse 第三章 五子棋的相关基础 3.1五

9、子棋解释 引用《辞海》中所言,五子棋是“棋类游戏,棋具与围棋相同,两人对局,轮流下子,先将五子连成一行者为胜。”。五子棋的名称:日文亦有“连五子、五子连、串珠、五目、五目碰、五格、五石、五法、五联、京棋”等多种称谓,英文则称之为FIR (Five In A Row的缩写)、Gomoku(日语“五目”的罗马拼音)、Gobang、connect 5、mo-rphion。捷克语piskvorky,韩语omok、韩国人还称之为情侣棋。 3.2五子棋基本规则 1.五子棋行棋时,黑棋先下第一子,由天元开始,后白棋在黑棋周围的交叉点的落子。接着黑方再以天元中心的25个交叉点的范围内落盘面的第三子,

10、之后黑白双方相互顺序子。     2.最先在棋盘线交点横向,纵向,斜向形成已方的五个棋子连续的一方为胜。     3.出现禁手对方指出后将判负,其中包括两个或两个以上的活三,活四,长连均称之为禁手。     4.禁手只对黑棋有效,白棋无禁手。     5.黑方禁手形成时,白方需立即指出,黑方将被判负。若白方未发现黑方禁手存在而继续应子,其后指出黑方禁手不能判黑方负。     6.黑方连五与禁手同时形成,因黑方已连成五即黑方已获胜,故禁手规则失效。     7.在对局中,在盘上落下的子又拿起来,此动作称为拔子,若拔子将被判为负。     8.在对局中棋子掉落在棋盘上将被判负。若推子

11、或蹭子,以盘面第一落点为准。用手将棋子推正不算违犯规则。     9.在对局中,一方自行中止比赛如:中途退场,将被判负。     10.在对局中对方宣布认输,本局获胜。     11.超过比赛规定所用时间限制,将被判为负:正式比赛期间,迟到时间超过比赛容许时间将被判负。     12.如下至最终一子仍不分胜负则定为平局。     13.中盘期间双方 同意和局提议,判定为平局。 3.3五子棋常用术语 1.着:也称“步”。对局中把一个棋子按照规则放到某一交叉点,称之为一着棋。一着是否完成有两种规则:     (1)在执行落子无悔规则是,以行棋者的手离开棋子为一着已完成。    

12、2)在执行限时规则时,以行棋者按下棋钟作为一着已完成。     2.PASS :五子棋中引入的英文名称,即应该行棋的一方主动放弃此次行棋的机会,由对方继续行棋。     3.先手:对方必须应答的着法,如对方形成活三必须阻止其形成活四。     4.绝对先手:相对先手而言,即形成同色连四或嵌五,对方必须应着,就是绝对先手。绝对先手又叫“冲”。     5.VCF:(Victory of Continus Four 的缩写) 意思是利用连续冲四取胜之意。利用连续不断的冲四或嵌五的绝对先手,制止形成连五获得胜利的一种方法。在对局接近尾声或排局解题中一种常见的取胜技巧。     6.追下取

13、胜:是指白棋利用黑棋禁手取胜的战术。白1 冲四,迫使黑2 形成“四、四”禁手( 即冲四,活四禁手), 这种取胜方法叫做追下取胜。     7.自由取胜:追下取胜以外的取胜方法,即未利用黑棋禁手战术而取胜。     8.一子双杀:是指对局中一方落子后出现两个叫杀点即两个获胜点,而使对方无法防守的情形。一般是有两个冲四活三点,白棋的双活三,双四均可称为一子双杀。     9.阳线:棋盘上可见的横线与直线的总称。     10.阴线:也称“斜线”。是棋盘上不可见的斜行线。     11.“四、三”:指同时具备两个先手,其中一个四,另一个是活三。     12.“活三”、“嵌五”、“冲四”

14、参见五子棋重要棋形讲座。     13. 禁手:对局中禁止使用的战术或被判为负的行棋手段。 14. 开局:也称“布局”。布局阶段大体为七至十几着之内。种类繁多,职业连珠五子棋有二十四种开局。    15. 局面:亦称“局势”。为对局中某一段时间内双方子力的配置情况。     16. 优势:是指足以取胜的优势局面,其对方即为败势。     17. 妙着:对局中走出的一步精妙的着法。既合乎逻辑又出人意料,有使局面顿时改观的效果,对局势的发展及对局的质量都有重大影响。     18. 好着:也称“佳着”。对局中成功的某一步。     19. 正着:对局的某一局面中的正确着法。  

15、   20. 劣着:对局中,导致严重不利后果的一步错误着法。     21. 败着:也称“失着”“漏着”。对局中造成局面恶化的一步严重错误着法。     22. 等着:对局中具有等待性的一步着法,主要意图是等待有利时机。     23. 废着:也称“空着”。对局中不起作用的着法。实际上指浪费时间毫无疑义的错着。     24. 抢先:对局中利用反活三或冲四的强制手段夺取主动权的着法。 25. 打谱:按照棋谱演练着法,是提高棋艺水平的重要方法之一。 26. 复局:也叫“复着”。对局结束又重演对局的过程。一般用以研究、比较双方的成败得失和着法的优劣。

16、 第四章 开发工具、环境及其技术 4.1 JAVA简介 JAVA技术介绍: Java技术是一门编程语言,也是一个平台,它基于Java虚拟机技术,借助这个东西建立了跨平台的优势。 Java技术的重要性,世界上编程语言Java 、C 、VB、C++依次排名前4位,这排名本身不说明什么,至少也是工业界对编程语言使用上一个侧面的反映吧。 Java编程语言与众不同之处在于:Java程序既是编译型的(转换为一种称为Java字节码的中间语言),又是解释型的(JVM 对字节码进行解析和运行)。编译只进行一次,而解释在每次运行程序

17、时都会进行。编译后的字节码采用一种针对JVM 优化过的机器码形式;解释器是JVM 的实现。这段是摘自网上的,编译原理学的不是很好,对这门语言的背后运行机制理解到这样了。 Java平台是一种纯软件平台,它有三个版本Java SE、JavaEE、Java ME。 Java SE(Java Platform,Standard Edition)这个版本以前叫做J2SE,后来版本号从1.4直接跳到5.0,其实也就是1.5,所以就叫成Java SE 5.0。目前Java开发人员使用较多的版本是5.0,当然还有Java SE 6.0这个更新的版本。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使

18、用的Java 应用程序。Java SE还包含了支持Java Web服务开发的类,并为Java EE这个版本提供基础。 虽说桌面应用程序,Java一直不被看好,但也稍微提一下,负责桌面GUI开发的类库我知道的有:JDK自带的主要是AWT/SWING这个Java原生类库;也可以使用IBM的SWT/JFace这个第三方类库。开发工具我了解的有:NetBeans(最近已经是6.0final版了,做GUI有使用VB的感觉),Eclipse(SWT/JFace这个项目其实就是做Eclipse项目时扩展出来的,所以对SWT/JFace支持的也不错)。 Java EE(Java Platform,Ente

19、rprise Edition)这个版本以前叫做J2EE,也就是大家可能听得比较多的,也是Java比较流行的领域,Java的企业级版本。Java EE下有很多流行的开发框架,像Struts、Spring、Hibernate这种流行的所谓SSH组合等。 根据项目大小、应用领域,技术平台的选择面还是很多的,除了Java EE,还有.Net,LAMP组合(Linux、Apatch、MySql、PHP组合),相对来说比较新Ruby在Ruby on Rails的框架应用,后两者可能在相对来说比较轻量级的Web领域运用成功案例比较多,更重量的企业级潜力还有待挖掘。 Java ME(Java Platfo

20、rm,Micro Edition)这个版本以前叫做J2ME。应用领域像各种移动设备和嵌入式设备,比如:手机、PDA、电视机顶盒和打印机。 Java ME不是太熟悉,不过移动设备和嵌入式设备的开发个人觉得算是比较有意思的领域,最近比较瞩目的业界新闻有一个就是Google发布开源智能手机操作系统开发平台Android,也就是前一阵子炒得很火的GPhone(原来Google出的不是手机,而是一个手机操作系统开发平台)。这个平台貌似会对Java ME有些冲击,按照网上的消息,Android包括:1、高度定制的Linux操作系统内核及智能手机硬件驱动支持;2、经过Google修改过的Java虚拟机Da

21、lvik,这里的性能比SUN的Hotspot高,支持大部分Java核心类库;3、大量智能手机开发核心类库;4、大量现成的智能手机应用软件;5、基于Eclipse的开发环境。也是按照网上的说法,Java EE提供了统一的编程平台,但不能调用操作系统的资源;而Android下直达操作系统,上直达应用软件,如:浏览器、日历、地图等。 Java开发工具很多,个人使用的IDE有Eclipse和NetBeans。Eclispe比较流行,各种插件也多,当然用起来也不错;NetBeans现在也是越做越好了,介绍这两个IDE主要是开源的,当然还有其它工具如JBuilder、IntelliJ、JCreator。

22、这些IDE各有优势劣势,根据你开发的项目来选择了。 4.2 JAVA 编程环境 4.2.1 环境变量 (1) java(TM) SE Development Kits,即JDK。 (2) 设置环境变量: 右击 我的电脑->属性->高级->环境变量,这时候可以看到以下的环境变量:Path:系统在任何路径下都可以识别Java命令。 classPath:为Java加载类(包括class,lib)的路径,只有类在classPath中,Java命令才能识别。 JAVA_HOME:Java的安装路径。 这三个变量是必须正确设置的,否则Java命令将可能不会正常运行,具体设置如下:

23、 Path:  ;C:\Progran Files\java\jdk1.6.0_01\bin classpath:  .;Progran Files\java\jdk1.6.0_01\lib\dt.jar;Progran Files\java\jdk1.6.0_01\lib\tools.jar JAVA_HOME:  Progran Files\java\jdk1.6.0_01 4.2.2 Eclipse插件 (1) XMLBuddy:编辑xml文件;下载地址为 。 (2) Fat Jar:打包插件,可以方便的完成各种打包任务,可以包含外部的包等。 (3) Log4E:L

24、og4j插件,提供各种与log4j相关的任务,Log4j专用于为程序输入调试信息。 (4) Lomboz:Ecilpse的一个J2EE的插件,可以将很多java应用服务器,J2EE组件和web应用开发集成到Eclipse中,可以帮助Java开发者使用Eclipse建立,测试和部署J2ee应用。支持jsp编写,包括语法着色和语法检查:。 (5) MyEclipse:J2EE开发插件,支持jsp,EJB,数据库操作。 (6) TomcatPlugin:支持Tomcat插件。 第五章 详细设计 5.1程序设计思路

25、 5.1.1.设计思想 1.本程序要实现五子棋的游戏功能,必须先有一个棋盘,所以,通过继承JPanel,然后在JPanel上画出一个17*17的棋盘,另外还有三个按钮:重新开局、请黑方下子和请白方下子,提醒用户进行相应的操作。当然,JPanel必须放在JFrame中,所以,又通过继承JFrame得到一个实例。 2.对于下棋的操作,通过对JPanel增加鼠标事件监听器MouseListener,每次当用户点击鼠标时,先取得点击的坐标值,然后换算成对应棋盘上(即棋盘数组)的位置(数组的下标)。 3.判断此处是否已经有棋子,如果有则提示玩家重新下子,否则通过java里的画图函数在此处画上

26、棋子,重新刷新输出棋盘。 4.判断该颜色棋子的上下左右是否满足连续五个,是的话提醒相应玩家获胜,不是的话,更换玩家下棋。 5.对于玩家的更换是程序自动的,每次用户点击鼠标后,若本局还未结束则会变换玩家,从而画出对应黑方白方的棋子,直到有一方获胜程序技术。 5.1.2.程序设计分析 1. 本款游戏有“游戏”和“选项”两个选项,其中“游戏”包括开局、重新开始、结束游戏几个选项;选项里边则包括对弈模式、悔棋、更改背景颜色几个选项,玩家可以根据具体需要选择使用。 2. 绘制棋盘,17条横线,17条竖线,在直线交点处下棋子(实心黑白圆形)。 3. 首先程序会判断对弈模式是人

27、机对弈还是人人对弈模式,若是人机对弈则是玩家先下,玩家是黑方,电脑是白方。若是人人对弈,则是黑方先下,黑白交替下子。 4. 棋盘处于鼠标监听状态,当鼠标在棋盘上有点击操作的时候,程序会获得鼠标点击的坐标然后换算成对应的棋盘的位置,再判断此处是否有棋子,假如没有,那么在此处画出对应颜色的实心棋子,假如已经有棋子了,则提示玩家此处已经有棋子请重新下棋。 5. 当选择的是人机对弈模式的时候,轮到电脑下子时,电脑会通过算法计算每个没有棋子的位置的重要性来选择最重要的位置下子。 6. 人机对弈算法简介: 本款游戏最核心的地方就是算法,因为这是整个程序最难的模块。算法的中心思想是

28、利用分数代表每个位置的重要程度,越重要的位置的分数值会越高,当电脑下棋时会先将电脑和玩家棋型的分数分别计算一遍,然后选择二者中分数最高的点下子。如果玩家的分数高,那么代表电脑应该防守,如果电脑的分数高,那么代表电脑应该进攻。 具体的分数值赋值如下: 分数 电脑 玩家 活二 60 50 半活二 40 35 死二 10 10 半死二 10 10 活三 950 700 半活三 900 650 死三 100 100 半死三 100 100 活四 6000 3500 半活四 5000 3000 死四 4000 800 半

29、死四 3600 750 活五 20000 15000 半活五 10000 3300 死五 20000 15000 半死五 10000 3300 解释一下其中的活,半活,死,半死: 活:代表几个子是相连的,中间没有空格,两端都至少有一个空格。 半活:代表几个子不是相连的,几个子中间有一个空格,两端都至少有一个空格。 死:代表几个子是相连的,中间没有空格,但有一端紧挨着对方的棋子或有一端正好在棋盘的边界。 半死:代表几个子不是相连的,几个子中间有一个空格,而且一端紧挨着对方的棋子或有一端正好在棋盘的边界。 每个位置的分数的计算方式是各个方向的分数相加

30、最后找出电脑棋型和玩家棋型的分数的最高的位置为电脑的下棋点下棋。 7. 当任何一方有五个棋子沿着横,竖,斜连在一起时,系统自动判断赢棋,并显示黑方或白方胜利。棋局结束后,任何一方均不能继续操作。 8.程序流程如下图4-1: 图5-1 程序流程图 5.2 程序设计 这个游戏程序包含两个类: DrawPanel:棋盘类,用于绘画棋盘及棋子。 PlayerVsPC:主程序类,窗口的创建和整个逻辑程序代码。 类DrawPanel代码: package resource; import java.awt.BasicStroke; impo

31、rt java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; import javax.swing.JPanel; public class DrawPanel extends JPanel{ private int[][] a; private int n,m; public DrawPanel(int k[][],int n1,int m1){

32、 a=k; n=n1; m=m1; } public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2=(Graphics2D)g; Graphics2D g3=(Graphics2D)g; double X=20; double Y=20; double width=480; double height=480; double jiange=30; // 画棋盘网格 for(

33、int i=0;i<=width/jiange;i++){ g2.draw(new Line2D.Double(X+i*jiange,Y,X+i*jiange,height+Y)); g2.draw(new Line2D.Double(X,Y+i*jiange,width+X,Y+i*jiange)); } //画中间点的标记 g3.setPaint(Color.RED); g3.draw(new Line2D.Double(254,245,254,254)); g3.draw(new Line2D.Double(245,254,254,254

34、)); g3.draw(new Line2D.Double(267,245,267,254)); g3.draw(new Line2D.Double(267,254,275,254)); g3.draw(new Line2D.Double(245,266,254,266)); g3.draw(new Line2D.Double(254,266,254,275)); g3.draw(new Line2D.Double(266,275,266,266)); g3.draw(new Line2D.Double(266,266,275,266));

35、 //画旗子 for(int i=1;i

36、r.WHITE); g2.fill(circle); } } } //画旗子上的标记 if(n>0&&m>0){ g2.setPaint(Color.RED); g2.setStroke(new BasicStroke(1.5f)); g2.draw(new Line2D.Double(30*m-16,30*n-16,30*m-4,30*n-4)); g2.draw(new Line2D.Double(30*m-16,30*n-4,30*m-4,30*n-16)); } } } 类Pl

37、ayerVsPC代码: package resource; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.Toolkit; import java.awt.Dimension; import javax.swing.JColorChooser; impo

38、rt javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; public class PlayerVsPC { private JFrame frame; //整个窗口 private JMenuBar bar; //菜单栏 private JMenuItem[][] jit;//菜单项数组 priva

39、te JMenuItem[] mode;//模式项数组 private JMenu[] jm; //菜单 public boolean isBlack; //是否为黑方下子状态 private int[][] qipan; //棋盘数组 private int row; //当前行 private int col; //当前列 private int prow; private int pcol; private Color c=new Color(145,125,62); //棋盘背景颜色 private DrawPanel panel; //棋盘

40、面板 private JLabel label; //棋盘上方的标签 private JPanel panel0; //棋盘上方条形面板 private boolean isEnd; private int[][] qixingPC; private int[][] qixingPlayer; private boolean isPC = true; //记录当前下棋模式 private boolean cMode = true; //记录选择的对弈模式 public PlayerVsPC(){ frame=new JFrame("五子棋游戏")

41、 bar=new JMenuBar(); jm=new JMenu[2]; jit=new JMenuItem[2][]; qipan=new int[19][19]; qixingPC = new int[17][17]; qixingPlayer = new int[17][17]; for(int i=0;i<19;i++){ for(int j=0;j<19;j++){ qipan[i][j]=0; } } for(int i=0;i<17;i++){ for(int j=0;j<17;j++){

42、 qixingPC[i][j]=0; qixingPlayer[i][j]=0; } } label = new JLabel("人"+(isPC?"机":"人")+"对弈模式,请按开局开始游戏!"); panel0=new JPanel(); addItems(); addEventAction(); printqipan(0,0); } public void addItems(){ jm[0]=new JMenu("游戏"); jm[1]=new JMenu("选项");

43、 jit[0]=new JMenuItem[3]; jit[0][0]=new JMenuItem("开局"); jit[0][1]=new JMenuItem("重新开始"); jit[0][2]=new JMenuItem("结束游戏"); jit[1]=new JMenuItem[3]; jit[1][0]=new JMenu("对弈模式"); mode=new JMenuItem[2]; mode[0] = new JMenuItem("人人对弈"); mode[1] = new JMenuItem("人机对弈");

44、 jit[1][0].add(mode[0]); jit[1][0].add(mode[1]); jit[1][1]=new JMenuItem("悔棋"); jit[1][2]=new JMenuItem("背景颜色"); for(int i=0;i

45、 frame.setJMenuBar(bar); frame.add(panel0,"North"); } //给菜单项设定事件 public void addEventAction(){ jit[0][0].addActionListener(new ActionListener(){ //开局 public void actionPerformed(ActionEvent e) { row=prow=0;col=pcol=0; isPC=cMode; isBlack = true; isEn

46、d = false; for(int i=0;i<19;i++){ for(int j=0;j<19;j++){ if(i==0||j==0||i==(qipan.length-1)||j==(qipan.length-1)){ qipan[i][j] = -1; }else{ qipan[i][j]=0; } } } if(isPC){ //人机对弈模式 label.setText("游戏开始,请玩家先下棋!"); }else{ //人人对

47、弈模式 label.setText("游戏开始,请"+(isBlack?"黑":"白")+"方先下棋!"); } printqipan(row,col); addEventHandler(); } }); jit[0][1].addActionListener(new ActionListener(){ //重新开始 public void actionPerformed(ActionEvent e) { row=prow=0;col=pcol=0; isBlack = true; isE

48、nd = false; for(int i=0;i<19;i++){ for(int j=0;j<19;j++){ if(i==0||j==0||i==(qipan.length-1)||j==(qipan.length-1)){ qipan[i][j] = -1; }else{ qipan[i][j]=0; } } } if(isPC){ //人机对弈模式 label.setText("游戏开始,请玩家先下棋!"); }else{ //人人

49、对弈模式 label.setText("游戏开始,请"+(isBlack?"黑":"白")+"方先下棋!"); } printqipan(row,col); addEventHandler(); } }); //给模式选项添加事件监听 mode[0].addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { cMode = false; label.setText("已选择人"+(cMode?"机":"人")+"对弈模式,重新开局将生效!"); } }); mode[1].addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { cMode = true; label.setText("已选择人"+(cMode?"机":"人")+"对弈模式,重新开局将生效!"); } }); jit[0][2].addActionList

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服