毕业论文

更新时间:2024-06-23 17:40:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

山东凯文科技职业学院 2012届毕业论文

基于JAVA的五子游戏的开发设计

学 院: 信息学院 学生姓名: 李晨诚 指导教师: 李铁奇 专 业: 计算机网络技术 班 级: 09级 1班 完成时间: 2012年6月27日

山东凯文科技职业学院

摘 要

人工智能是一门正在迅速发展的新兴的,综合性很强的交叉科学。它与生物工程、空间技术一起被并列为二十一世界三大尖端技术。它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。目前各发达国家都把人工智能作为重点项目,列入本国的高科技发展计划当中,投入巨大的人力和物力。

计算机人机对弈也是其中之一。作为人智能研究的一个重要分支,计算机博弈是检验人工水平的一个重要方面。它的研究为人工智能带来了很多重要的方法和理论,产生了广泛的社会影响和学术影响。

五子棋人机对弈是计算机博弈中的一种。研究其计算机算法,可以让我们看到人工智能的稚形,也有助于我们人脑的开发。五子棋是我国发明的,研究它可以让更多的外国人了解五子棋,这有助于我国优秀文化的推广。

关键词:人工智能,计算人机对弈,五子棋,算法

山东凯文科技职业学院

目 录

第一章 绪 论 ...................................................................................................................................................... 1 第二章 需求分析 ................................................................................................................................................ 2 2.1业务需求 ................................................................................................................................................... 2 2.1.1 此系统使用范围要求 ...................................................................................................................... 2 2.1.2 功能要求 .......................................................................................................................................... 2 2.2 性能需求 .............................................................................................................................................. 3 2.3 系统平台需求 ...................................................................................................................................... 3 第三章 五子棋的相关基础 ................................................................................................................................ 4 3.1五子棋解释 ............................................................................................................................................... 4 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系统的推出使电脑从高雅的学术殿堂走入了寻常百姓家,各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上已经充满了花样繁多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。Java语言作为一种面向对象的编程语言,具有分布式,可移植,高性能,多线程等特点。通过系统的学习,人们就可以使用它开发出功能齐全,满足特殊需求的应用程序。Java语言易学易用,对学习者掌握技能,开拓思维都有很大的帮助。 我作为一名学生,在系统的学习了Java语言之后,经常用它搞一些小程序。这次毕业设计,正好将学过的Java语言中的各种技术综合起来,用Jbuilder2006开发工具编写一个小游戏,既对自己学过的技能进行一次检验,也能系统地将学过的知识复习巩固。

随着计算机技术的不断发展,网络技术的普及范围越来越广,网络能够提供的服务多样、便捷,已经成为人们生产生活中不可缺少的重要组成部分。如今网络休闲游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。

网络五子棋游戏是使用Java语言开发的一款游戏。它使用SOCKET建立连接,多线程处理数据,以及可嵌入网络浏览器的ALET作为客户端,这些特点使这款游戏无论是服务器还是客户端的实现都相对容易。通过对该软件的编写,还可以巩固我们对以上各种知识的掌握和理解。

1

山东凯文科技职业学院

第二章 需求分析

为了开发出真正满足用户需求量的软件产品,首先必须知道用户的需求。软件需求中包括了多个方面来说明用户需求。在这一章中,主要从以下几方面来说明系统的需求。

2.1业务需求

2.1.1 此系统使用范围要求

此系统为智力游戏,适合于各类游戏爱好者。由于其经典性及其游戏的简单性,各类人士都可以也都爱玩。人们在与电脑对战享受娱乐的同时,也会体会到自己的智力也会有所提升。

2.1.2 功能要求

该款游戏主要由一下几个模块组成:

五子棋游戏 人机对弈模式 人人对弈模式 具有悔棋功能 更换棋盘背景 图2—1 五子棋功能模块图

人机对弈模式:选择该模式可以实现人与电脑之间的对弈,电脑会智能的选择该在哪处下子,并会在每次下棋结束后判断是否有哪方已经获胜,如果获胜则结束本局游戏,并提示玩家游戏结束。

人人对弈模式:选择该模式可以实现人与人之间的对弈,系统会提示哪方先下,然后玩家之间交替的下棋,同样系统会在下完每次棋后判断是否有哪方已经获胜,如果获胜则结束本局游戏,并提示玩家游戏结束。

悔棋功能:这个功能也是根据游戏的实际需求而存在的,在现实生活中难免有失误下错了棋,那么就需要悔棋。此功能提供了悔棋功能,使得下棋的灵活性有所提高。玩家若想悔棋,则只需

2

山东凯文科技职业学院

选择悔棋按钮便可以重新下过刚才的棋。

更换棋盘背景:次功能可以根据玩家的爱好任意更换棋盘的背景颜色,由于每个人对颜色的喜好不一样,因此这个功能也是非常必需的。也行更换一种玩家所喜欢的颜色,玩家能发挥得更好。

2.2 性能需求

该款五子棋游戏功能虽然简单,但最主要的还是实现了人人对弈模式和人机对弈两种模式,所以从这个角度来说,该款游戏需要能很好的在两种模式间良好的转换。虽然系统不大,但要在满足玩家的基本要求的情况下,电脑有一定的智能,能给于新手一定的帮助。

2.3 系统平台需求

编程语言:JAVA

操作系统:Windows xp系列 开发工具:Myeclipse

3

山东凯文科技职业学院

第三章 五子棋的相关基础

3.1五子棋解释

引用《辞海》中所言,五子棋是“棋类游戏,棋具与围棋相同,两人对局,轮流下子,先将五子连成一行者为胜。”。五子棋的名称:日文亦有“连五子、五子连、串珠、五目、五目碰、五格、五石、五法、五联、京棋”等多种称谓,英文则称之为FIR (Five In A Row的缩写)、Gomoku(日语“五目”的罗马拼音)、Gobang、connect 5、mo-rphion。捷克语piskvorky,韩语omok、韩国人还称之为情侣棋。

3.2五子棋基本规则

1.五子棋行棋时,黑棋先下第一子,由天元开始,后白棋在黑棋周围的交叉点的落子。

接着黑方再以天元中心的25个交叉点的范围内落盘面的第三子,之后黑白双方相互顺序子。

2.最先在棋盘线交点横向,纵向,斜向形成已方的五个棋子连续的一方为胜。 3.出现禁手对方指出后将判负,其中包括两个或两个以上的活三,活四,长连均称之为禁手。

4.禁手只对黑棋有效,白棋无禁手。

5.黑方禁手形成时,白方需立即指出,黑方将被判负。若白方未发现黑方禁手存在而继续应子,其后指出黑方禁手不能判黑方负。

6.黑方连五与禁手同时形成,因黑方已连成五即黑方已获胜,故禁手规则失效。 7.在对局中,在盘上落下的子又拿起来,此动作称为拔子,若拔子将被判为负。 8.在对局中棋子掉落在棋盘上将被判负。若推子或蹭子,以盘面第一落点为准。用手将棋子推正不算违犯规则。

9.在对局中,一方自行中止比赛如:中途退场,将被判负。 10.在对局中对方宣布认输,本局获胜。

11.超过比赛规定所用时间限制,将被判为负:正式比赛期间,迟到时间超过比赛容许时间将被判负。

12.如下至最终一子仍不分胜负则定为平局。 13.中盘期间双方 同意和局提议,判定为平局。

3.3五子棋常用术语

1.着:也称“步”。对局中把一个棋子按照规则放到某一交叉点,称之为一着棋。一着是否

4

山东凯文科技职业学院

完成有两种规则:

(1)在执行落子无悔规则是,以行棋者的手离开棋子为一着已完成。 (2)在执行限时规则时,以行棋者按下棋钟作为一着已完成。

2.PASS :五子棋中引入的英文名称,即应该行棋的一方主动放弃此次行棋的机会,由对方继续行棋。

3.先手:对方必须应答的着法,如对方形成活三必须阻止其形成活四。

4.绝对先手:相对先手而言,即形成同色连四或嵌五,对方必须应着,就是绝对先手。绝对先手又叫“冲”。

5.VCF:(Victory of Continus Four 的缩写) 意思是利用连续冲四取胜之意。利用连续不断的冲四或嵌五的绝对先手,制止形成连五获得胜利的一种方法。在对局接近尾声或排局解题中一种常见的取胜技巧。

6.追下取胜:是指白棋利用黑棋禁手取胜的战术。白1 冲四,迫使黑2 形成“四、四”禁手( 即冲四,活四禁手), 这种取胜方法叫做追下取胜。

7.自由取胜:追下取胜以外的取胜方法,即未利用黑棋禁手战术而取胜。

8.一子双杀:是指对局中一方落子后出现两个叫杀点即两个获胜点,而使对方无法防守的情形。一般是有两个冲四活三点,白棋的双活三,双四均可称为一子双杀。

9.阳线:棋盘上可见的横线与直线的总称。

10.阴线:也称“斜线”。是棋盘上不可见的斜行线。

11.“四、三”:指同时具备两个先手,其中一个四,另一个是活三。 12.“活三”、“嵌五”、“冲四”:参见五子棋重要棋形讲座。 13. 禁手:对局中禁止使用的战术或被判为负的行棋手段。

14. 开局:也称“布局”。布局阶段大体为七至十几着之内。种类繁多,职业连珠五子

棋有二十四种开局。

15. 局面:亦称“局势”。为对局中某一段时间内双方子力的配置情况。 16. 优势:是指足以取胜的优势局面,其对方即为败势。

17. 妙着:对局中走出的一步精妙的着法。既合乎逻辑又出人意料,有使局面顿时改观的效果,对局势的发展及对局的质量都有重大影响。

18. 好着:也称“佳着”。对局中成功的某一步。 19. 正着:对局的某一局面中的正确着法。

20. 劣着:对局中,导致严重不利后果的一步错误着法。

21. 败着:也称“失着”“漏着”。对局中造成局面恶化的一步严重错误着法。 22. 等着:对局中具有等待性的一步着法,主要意图是等待有利时机。

23. 废着:也称“空着”。对局中不起作用的着法。实际上指浪费时间毫无疑义的错着。 24. 抢先:对局中利用反活三或冲四的强制手段夺取主动权的着法。

5

山东凯文科技职业学院

25. 打谱:按照棋谱演练着法,是提高棋艺水平的重要方法之一。

26. 复局:也叫“复着”。对局结束又重演对局的过程。一般用以研究、比较双方的成败得失和着法的优劣。

6

山东凯文科技职业学院

第四章 开发工具、环境及其技术

4.1 JAVA简介

JAVA技术介绍:

Java技术是一门编程语言,也是一个平台,它基于Java虚拟机技术,借助这个东西建立了跨平台的优势。

Java技术的重要性,世界上编程语言Java 、C 、VB、C++依次排名前4位,这排名本身不说明什么,至少也是工业界对编程语言使用上一个侧面的反映吧。

Java编程语言与众不同之处在于:Java程序既是编译型的(转换为一种称为Java字节码的中间语言),又是解释型的(JVM 对字节码进行解析和运行)。编译只进行一次,而解释在每次运行程序时都会进行。编译后的字节码采用一种针对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这个更新的版本。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的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,Enterprise 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 Platform,Micro Edition)这个版本以前叫做J2ME。应用领域像各种移动设备和嵌入式设备,比如:手机、PDA、电视机顶盒和打印机。

7

山东凯文科技职业学院

Java ME不是太熟悉,不过移动设备和嵌入式设备的开发个人觉得算是比较有意思的领域,最近比较瞩目的业界新闻有一个就是Google发布开源智能手机操作系统开发平台Android,也就是前一阵子炒得很火的GPhone(原来Google出的不是手机,而是一个手机操作系统开发平台)。这个平台貌似会对Java ME有些冲击,按照网上的消息,Android包括:1、高度定制的Linux操作系统内核及智能手机硬件驱动支持;2、经过Google修改过的Java虚拟机Dalvik,这里的性能比SUN的Hotspot高,支持大部分Java核心类库;3、大量智能手机开发核心类库;4、大量现成的智能手机应用软件;5、基于Eclipse的开发环境。也是按照网上的说法,Java EE提供了统一的编程平台,但不能调用操作系统的资源;而Android下直达操作系统,上直达应用软件,如:浏览器、日历、地图等。

Java开发工具很多,个人使用的IDE有Eclipse和NetBeans。Eclispe比较流行,各种插件也多,当然用起来也不错;NetBeans现在也是越做越好了,介绍这两个IDE主要是开源的,当然还有其它工具如JBuilder、IntelliJ、JCreator。这些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命令将可能不会正常运行,具体设置如下: 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文件;下载地址为 http://www.xmlbuddy.com。 (2) Fat Jar:打包插件,可以方便的完成各种打包任务,可以包含外部的包等。

(3) Log4E:Log4j插件,提供各种与log4j相关的任务,Log4j专用于为程序输入调试信息。

8

山东凯文科技职业学院

(4) Lomboz:Ecilpse的一个J2EE的插件,可以将很多java应用服务器,J2EE组件和web应用开发集成到Eclipse中,可以帮助Java开发者使用Eclipse建立,测试和部署J2ee应用。支持jsp编写,包括语法着色和语法检查:。

(5) MyEclipse:J2EE开发插件,支持jsp,EJB,数据库操作。 (6) TomcatPlugin:支持Tomcat插件。

9

山东凯文科技职业学院

第五章 详细设计

5.1程序设计思路

5.1.1.设计思想

1.本程序要实现五子棋的游戏功能,必须先有一个棋盘,所以,通过继承JPanel,然后在JPanel

上画出一个17*17的棋盘,另外还有三个按钮:重新开局、请黑方下子和请白方下子,提醒用户进行相应的操作。当然,JPanel必须放在JFrame中,所以,又通过继承JFrame得到一个实例。

2.对于下棋的操作,通过对JPanel增加鼠标事件监听器MouseListener,每次当用户点击鼠标

时,先取得点击的坐标值,然后换算成对应棋盘上(即棋盘数组)的位置(数组的下标)。

3.判断此处是否已经有棋子,如果有则提示玩家重新下子,否则通过java里的画图函数在此处

画上棋子,重新刷新输出棋盘。

4.判断该颜色棋子的上下左右是否满足连续五个,是的话提醒相应玩家获胜,不是的话,更

换玩家下棋。

5.对于玩家的更换是程序自动的,每次用户点击鼠标后,若本局还未结束则会变换玩家,从

而画出对应黑方白方的棋子,直到有一方获胜程序技术。

5.1.2.程序设计分析

1. 本款游戏有“游戏”和“选项”两个选项,其中“游戏”包括开局、重新开始、结束游戏

几个选项;选项里边则包括对弈模式、悔棋、更改背景颜色几个选项,玩家可以根据具体需要选择使用。

2. 绘制棋盘,17条横线,17条竖线,在直线交点处下棋子(实心黑白圆形)。

3. 首先程序会判断对弈模式是人机对弈还是人人对弈模式,若是人机对弈则是玩家先下,玩家是黑方,电脑是白方。若是人人对弈,则是黑方先下,黑白交替下子。

4. 棋盘处于鼠标监听状态,当鼠标在棋盘上有点击操作的时候,程序会获得鼠标点击的坐标然后换算成对应的棋盘的位置,再判断此处是否有棋子,假如没有,那么在此处画出对应颜色的实心棋子,假如已经有棋子了,则提示玩家此处已经有棋子请重新下棋。

5. 当选择的是人机对弈模式的时候,轮到电脑下子时,电脑会通过算法计算每个没有棋子的位置的重要性来选择最重要的位置下子。 6. 人机对弈算法简介:

本款游戏最核心的地方就是算法,因为这是整个程序最难的模块。算法的中心思想是:利用分数代表每个位置的重要程度,越重要的位置的分数值会越高,当电脑下棋时会先将电脑和玩家

10

山东凯文科技职业学院

棋型的分数分别计算一遍,然后选择二者中分数最高的点下子。如果玩家的分数高,那么代表电脑应该防守,如果电脑的分数高,那么代表电脑应该进攻。 具体的分数值赋值如下: 分数 活二 半活二 死二 半死二 活三 半活三 死三 半死三 活四 半活四 死四 半死四 活五 半活五 死五 半死五 电脑 60 40 10 10 950 900 100 100 6000 5000 4000 3600 20000 10000 20000 10000 玩家 50 35 10 10 700 650 100 100 3500 3000 800 750 15000 3300 15000 3300 解释一下其中的活,半活,死,半死:

活:代表几个子是相连的,中间没有空格,两端都至少有一个空格。

半活:代表几个子不是相连的,几个子中间有一个空格,两端都至少有一个空格。

死:代表几个子是相连的,中间没有空格,但有一端紧挨着对方的棋子或有一端正好在棋盘的边界。

半死:代表几个子不是相连的,几个子中间有一个空格,而且一端紧挨着对方的棋子或有一端正好在棋盘的边界。

每个位置的分数的计算方式是各个方向的分数相加,最后找出电脑棋型和玩家棋型的分数的最高的位置为电脑的下棋点下棋。

7. 当任何一方有五个棋子沿着横,竖,斜连在一起时,系统自动判断赢棋,并显示黑方或白方

11

山东凯文科技职业学院

胜利。棋局结束后,任何一方均不能继续操作。 8.程序流程如下图4-1:

图5-1 程序流程图

5.2 程序设计

这个游戏程序包含两个类:

DrawPanel:棋盘类,用于绘画棋盘及棋子。

PlayerVsPC:主程序类,窗口的创建和整个逻辑程序代码。 类DrawPanel代码: package resource;

import java.awt.BasicStroke; import 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;

12

山东凯文科技职业学院

public DrawPanel(int k[][],int n1,int 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(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));

a=k; n=n1; m=m1;

//画中间点的标记 g3.setPaint(Color.RED);

g3.draw(new Line2D.Double(254,245,254,254)); g3.draw(new Line2D.Double(245,254,254,254)); 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));

13

山东凯文科技职业学院

}

}

g3.draw(new Line2D.Double(266,275,266,266)); g3.draw(new Line2D.Double(266,266,275,266)); //画旗子

for(int i=1;i

//画旗子上的标记 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)); for(int j=1;j

Ellipse2D circle=new Ellipse2D.Double(); circle.setFrame(j*30-25, i*30-25, 28, 28); if(a[i][j]==1){

g2.setPaint(Color.BLACK); g2.fill(circle);

}else if(a[i][j]==2){ }

g2.setPaint(Color.WHITE); g2.fill(circle);

类PlayerVsPC代码: package resource;

import java.awt.Color;

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter;

14

山东凯文科技职业学院

import java.awt.event.MouseEvent; import java.awt.Toolkit; import java.awt.Dimension;

import javax.swing.JColorChooser; import 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 {

15

private JFrame frame; //整个窗口 private JMenuBar bar; //菜单栏 private JMenuItem[][] jit;//菜单项数组 private 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; 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(){ }

public void addItems(){

frame=new JFrame(\五子棋游戏\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 i=0;i<17;i++){ }

label = new JLabel(\人\机\人\对弈模式,请按开局开始游戏!\panel0=new JPanel();

for(int j=0;j<17;j++){ }

qixingPC[i][j]=0; qixingPlayer[i][j]=0; for(int j=0;j<19;j++){ }

qipan[i][j]=0;

addItems();

addEventAction(); printqipan(0,0);

jm[0]=new JMenu(\游戏\jm[1]=new JMenu(\选项\

jit[0]=new JMenuItem[3]; jit[0][0]=new JMenuItem(\开局\jit[0][1]=new JMenuItem(\重新开始\

16

山东凯文科技职业学院

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(\人机对弈\ 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

} }

panel0.add(label); bar.add(jm[0]); bar.add(jm[1]); frame.setJMenuBar(bar); frame.add(panel0,\

}

//给菜单项设定事件 public void addEventAction(){

jit[0][0].addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { row=prow=0;col=pcol=0; isPC=cMode; isBlack = true;

isEnd = false;

17

//开局

山东凯文科技职业学院

});

}

for(int i=0;i<19;i++){ } if(isPC){

//人机对弈模式

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;

label.setText(\游戏开始,请玩家先下棋!\

//人人对弈模式

}else{ }

label.setText(\游戏开始,请\黑\白\方先下棋!\

printqipan(row,col); addEventHandler();

jit[0][1].addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

row=prow=0;col=pcol=0; isBlack = true; isEnd = false; for(int i=0;i<19;i++){ } if(isPC){

//人机对弈模式

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;

label.setText(\游戏开始,请玩家先下棋!\

18

山东凯文科技职业学院

}

}else{ }

//人人对弈模式

label.setText(\游戏开始,请\黑\白\方先下棋!\

printqipan(row,col); addEventHandler();

});

//给模式选项添加事件监听

mode[0].addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

cMode = false;

label.setText(\已选择人\机\人\对弈模式,重新开局将生效!\

});

}

mode[1].addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

cMode = true;

label.setText(\已选择人\机\人\对弈模式,重新开局将生效!\

});

}

jit[0][2].addActionListener(new ActionListener(){ });

jit[1][1].addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

if(!isPC){

huiqi();

19

//结束游戏

public void actionPerformed(ActionEvent e) { }

label.setText(\游戏结束,请按开局开始游戏!\isEnd=true;

//悔棋

山东凯文科技职业学院

//

}

}

}else{ }

pchuiqi();

});

jit[1][2].addActionListener(new ActionListener() { });

public void actionPerformed(ActionEvent e) { }

Color cc=JColorChooser.showDialog(frame,\棋盘背景颜色\

new Color(226,189,0));

//背景颜色

if(cc!=null){ }

c=cc;

panel.setBackground(c);

监听鼠标事件,下棋以及判断本盘是否结束,电脑是白方,玩家是黑方 public void addEventHandler(){

panel.addMouseListener(new MouseAdapter(){

public void mousePressed(MouseEvent e) { }

if(!isEnd){ }

int x=(e.getX()-5)/30; int y=(e.getY()-5)/30;

if(qipan[y+1][x+1]==0){

load(x+1,y+1);

}else{ }

label.setText(\此处已经有棋子,请重新下子!\

});

20

山东凯文科技职业学院

}

//电脑下棋

public void pcLoad(){ qixing(); int count = 0; int hang = 0; int lie = 0;

for(int i=0;i<17;i++){ for(int j=0;j<17;j++){

if(qixingPC[i][j]>count)

21

山东凯文科技职业学院

结 论

论文行文至此,已基本完成。本论文研究主要完成了如下工作:

回顾了Java的发展历程及一些基本概念;对“五子棋游戏”进行了分析设计。对此游戏的算法进行了设计。算法是在每个项目中都会出现的都需要去设计的,故一个好的算法设计是必不可少的。 介绍了此游戏的功能模块。经典游戏的发展前景还是十分好的,总结制作过程中的经验和教训,有几点体会:

1、 要准备充分,在系统分析与设计阶段要做到尽可能详细、全面,以免在后阶段返工,浪费人力、物力、财力。

2、 做好版本控制和备份,一旦出现故障,能尽快恢复到最近最新的版本中,在此基础上修改。

22

山东凯文科技职业学院

参考文献

[1]朱福喜,唐晓军 Java程序设计技巧与开发实例 人民邮电出版社 2004 [2]《程序员》杂志社 程序员2004合订本下 电子工业出版社 2005 204-213 [3]耿祥义 Java课程设计 清华大学出版社 2004

[4]屿东军,杨静宇,李千目,王过全 Java程序设计与应用开发 清华大学出版社 2005

23

山东凯文科技职业学院

致 谢

在论文写作期间,为了保证我们毕业设计的正常进行,学院抽调了优秀的老师指导我们进行毕业设计,并且不时地询问我们毕业设计的进展情况。没有老师们的细心指导我的论文与系统就不可能顺利的完成,再次对你们表示衷心地感谢。老师认真负责的工作态度、严谨的治学风格,使我深受启发;同时也很感谢帮助过我和我一同探讨问题的同学们。为我们这次设计的正常开展提供了必要的基础。本次毕业设计,就要画上一个句号了。

感谢凯文学院给我提供学习的平台,让我在这里接受了三年正规系统的专科学习。 感谢所有关心、支持、帮助过我的良师益友。

24

本文来源:https://www.bwwdw.com/article/6nv3.html

Top