毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx
《毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx》由会员分享,可在线阅读,更多相关《毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx(30页珍藏版)》请在冰点文库上搜索。
![毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx](https://file1.bingdoc.com/fileroot1/2023-5/16/e96f6eab-4439-4c5b-9303-a57e34bed7d6/e96f6eab-4439-4c5b-9303-a57e34bed7d61.gif)
安徽大学江淮学院
本科毕业论文(设计、创作)
题 目:
基于Java的五子棋游戏设计与开发
学生姓名:
系别:
导师所在单位:
安徽大学计算机科学与技术学院
完成时间:
2014 年 4 月
基于Java的五子棋游戏设计与开发
摘 要
随着经济的发展和社会的进步,人们生活的节奏越来越快。
为了缓解大家的压力,益智类游戏越来越受到人们的青睐。
五子棋作为益智类游戏,备受人们的喜爱。
所以对五子棋游戏的设计与开发很有意义。
本文主要介绍使用java语言利用eclipse软件开发一个界面简洁、直观、实用性比较高的单机的五子棋游戏。
从五子棋的规则入手让大家初步了解五子棋。
介绍了java语言的特点和环境变量的配置。
最后还陈述了程序设计的思路和方法。
实现了五子棋游戏具有退出游戏、判断胜负、悔棋功能和重新开始的功能。
关键词:
人工智能;五子棋;算法
II
DevelopmentanddesignofGobanggamedevelopmentbasedonjava
Abstract
Withthedevelopmentofeconomyandtheprogressofthesociety,therhythmofhumanbeingsfasterthanformer.Inordertoalleviateyourpressure,puzzlegameisbecomingmoreandmorepopular.Asapuzzlegame,Gobangbelovedbyman.SoitisimportanttodesignofthegameofGobang.
Thisthesisintroducestheuseofjavalanguagedevelopmentofstand-aloneaninterfaceissimpleandintuitive,practicalandhighusingeclipsesoftwareGobanggame.ThroughtheintroductionofGobangrulesleteverybodyunderstandgobang.Introducescharacteristicsofjavaandenvironmentvariableconfiguration.Finallyintroducestheideaandmethodofprogramdesign.Realizethe`functionsofquiting,outcomejudging,undoing,andrestartingofGobang.
Keywords:
Artificialintelligence;backgammon;algorithm
目 录
1绪论 1
2需求分析 1
2.1业务需求 1
2.1.1此系统使用范围要求 1
2.1.2功能要求 1
2.2性能需求 2
2.3系统平台需求 3
3五子棋相关基础 3
3.1五子棋解释 3
3.2五子棋的基本规则 3
3.3五子棋的常用术语 4
4开发工具、环境及其技术 5
4.1java简
介 5
4.2java编程环
境 7
5程序的实现 7
5.1程序设计思路 7
5.1.1设计思想 7
5.1.2程序设计分析 8
5.2源代码 9
5.2.1设计思路 9
5.2.2程序代码和功能实现 9
6总结部分 24
6.1总结 24
6.2不足说明 24
参考文献 25
致谢 25
III
1绪论
1.1前言
电子计算机已经深入到日常生活中的各个方面,比如信息管理、教育培训、图形图像处理、以及游戏娱乐等。
Windows系统的推出使电脑从高雅的学术殿堂走入了寻常百姓家,老百姓无须经过培训就能够利用电子计算机完成许多复杂的工作。
然而,虽然现在世界上已经充满了各式各样的软件,但它们依然不能完全满足用户的各种特殊需求,人们还不得不开发满足自己特殊需求的软件。
java语言作为一种面向对象的编程语言,具有分布式,可移植,高性能,多线程等特点。
通过系统的学习,人们就可以使用它开发出功能齐全,满足特殊需求的应用程序。
java语言易学易用,对学习者掌握技能,开拓思维都有很大的帮助。
我作为一名学生,在系统的学习了java语言之后。
将学过的java语言中的各种技术综合起来,用eclipse开发工具编写一个小游戏。
随着计算机技术的不断发展,如今休闲游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。
五子棋游戏是使用java语言开发的一款游戏。
它使用SOCKET建立连接,多线程处理数据,以及可嵌入网络浏览器的ALET作为客户端,这些特点使这款游戏无论是服务器还是客户端的实现都相对容易。
2需求分析
在这一章中,主要从以下几方面来说明系统的需求。
2.1业务需求
2.1.1此系统使用范围要求
此系统为益智游戏,由于其经典性及其游戏的简单性,各类人士都可以也都爱玩。
人们在对战享受娱乐的同时,也会体会到自己的智力也会有所提升。
2.1.2功能要求
该款游戏主要由一下几个模块组成:
如图2-1
26
五子棋游戏
退出游戏功能
判断胜负功能
具有悔棋功能
重新开始功能
图2-1:
游戏的功能模块
(1)退出游戏功能:
在你不想玩了的时候只需轻轻点击一下“退出”按钮,就可以很方便的退出游戏了。
该功能的设置就是为了更加方便用户使用,更具
有实用性,更加人性化。
(2)判断胜负功能:
对于五子棋游戏来说,这是一个最基本并且不可缺少的功能。
当黑白两方任意一方先实现“五子连珠”时,则程序会判断获胜方为该方,并且显示出“黑(白)方胜利”的字样。
(3)悔棋功能:
这个功能也是根据游戏的实际需求而存在的,在现实生活中难免有失误下错了棋,那么就需要悔棋。
此功能提供了悔棋功能,使得下棋的灵活性有所提高。
玩家若想悔棋,则只需选择悔棋按钮便可以重新下过刚才的棋。
(4)重新开始功能:
为了适应玩家的需要,设置了“重新开始”按钮。
点击此按钮,之前的游戏进程全部清空,游戏将重新开始。
2.2性能需求
该款五子棋游戏功能简单,需要满足重新开始、悔棋、退出功能。
2.3系统平台需求
编程语言:
java
操作系统:
WindowsxpWindows7系列开发工具:
eclipse
3五子棋的相关基础
3.1五子棋解释
引用《辞海》中所言,五子棋是“棋类游戏,棋具与围棋相同,两人对局,轮流下子,先将五子连成一行者为胜。
”。
五子棋的名称:
日文亦有“连五子、五子连、串珠、五目、五目碰、五格、五石、五法、五联、京棋”等多种称谓,英文则称之为FIR(FiveInARow的缩写)、Gomoku(日语“五目”的罗马拼音)、
Gobang、connect5、mo-rphion。
捷克语piskvorky,韩语omok、韩国人还称之为情侣棋。
3.2五子棋基本规则
(1)五子棋行棋时,黑棋先下第一子,由天元开始,后白棋在黑棋周围的交叉点的落子。
接着黑方再以天元中心的25个交叉点的范围内落盘面的第三子,之后黑白双方相互顺序子。
(2)最先在棋盘线交点横向,纵向,斜向形成已方的五个棋子连续的一方为胜。
(3)出现禁手对方指出后将判负,其中包括两个或两个以上的活三,活四,长连均称之为禁手。
(4)禁手只对黑棋有效,白棋无禁手。
(5)黑方禁手形成时,白方需立即指出,黑方将被判负。
若白方未发现黑方禁手存在而继续应子,其后指出黑方禁手不能判黑方负。
(6)黑方连五与禁手同时形成,因黑方已连成五即黑方已获胜,故禁手规则失效。
(7)在对局中,在盘上落下的子又拿起来,此动作称为拔子,若拔子将被判为负。
(8)在对局中棋子掉落在棋盘上将被判负。
若推子或蹭子,以盘面第一落点为准。
用手将棋子推正不算违犯规则。
(9)在对局中,一方自行中止比赛如:
中途退场,将被判负。
(10)在对局中对方宣布认输,本局获胜。
(11)超过比赛规定所用时间限制,将被判为负:
正式比赛期间,迟到时间超过比赛容许时间将被判负。
(12)如下至最终一子仍不分胜负则定为平局。
(13)中盘期间双方同意和局提议,判定为平局。
3.3五子棋常用术语
(1)着:
也称“步”。
对局中把一个棋子按照规则放到某一交叉点,称之为一着棋。
一着是否完成有两种规则:
在执行落子无悔规则是,以行棋者的手离开棋子为一着已完成。
在执行限时规则时,以行棋者按下棋钟作为一着已完成。
(2)PASS :
五子棋中引入的英文名称,即应该行棋的一方主动放弃此次行棋的机会,由对方继续行棋。
(3)先手:
对方必须应答的着法,如对方形成活三必须阻止其形成活四。
(4)绝对先手:
相对先手而言,即形成同色连四或嵌五,对方必须应着,就是绝对先手。
绝对先手又叫“冲”。
(5)VCF:
(VictoryofContinusFour的缩写)意思是利用连续冲四取胜之意。
利用连续不断的冲四或嵌五的绝对先手,制止形成连五获得胜利的一种方法。
在对局接近尾声或排局解题中一种常见的取胜技巧。
(6)追下取胜:
是指白棋利用黑棋禁手取胜的战术。
白1 冲四,迫使黑2
形成“四、四”禁手(即冲四,活四禁手),这种取胜方法叫做追下取胜。
(7)自由取胜:
追下取胜以外的取胜方法,即未利用黑棋禁手战术而取胜。
(8)一子双杀:
是指对局中一方落子后出现两个叫杀点即两个获胜点,而使对方无法防守的情形。
一般是有两个冲四活三点,白棋的双活三,双四均可称为一子双杀。
(9)阳线:
棋盘上可见的横线与直线的总称。
(10)阴线:
也称“斜线”。
是棋盘上不可见的斜行线。
(11)“四、三”:
指同时具备两个先手,其中一个四,另一个是活三。
(12)“活三”、“嵌五”、“冲四”:
参见五子棋重要棋形讲座。
13. 禁手:
对局中禁止使用的战术或被判为负的行棋手段。
(14)开局:
也称“布局”。
布局阶段大体为七至十几着之内。
种类繁多,职业连珠五子棋有二十四种开局。
(15)局面:
亦称“局势”。
为对局中某一段时间内双方子力的配置情况。
(16)优势:
是指足以取胜的优势局面,其对方即为败势。
(17)妙着:
对局中走出的一步精妙的着法。
既合乎逻辑又出人意料,有使局面顿时改观的效果,对局势的发展及对局的质量都有重大影响。
(18)好着:
也称“佳着”。
对局中成功的某一步。
(19)正着:
对局的某一局面中的正确着法。
(20)劣着:
对局中,导致严重不利后果的一步错误着法。
(21)败着:
也称“失着”“漏着”。
对局中造成局面恶化的一步严重错误着
法
(22)等着:
对局中具有等待性的一步着法,主要意图是等待有利时机。
(23)废着:
也称“空着”。
对局中不起作用的着法。
实际上指浪费时间毫无
疑义的错着。
(24)抢先:
对局中利用反活三或冲四的强制手段夺取主动权的着法。
(25)打谱:
按照棋谱演练着法,是提高棋艺水平的重要方法之一。
(26)复局:
也叫“复着”。
对局结束又重演对局的过程。
一般用以研究、比较双方的成败得失和着法的优劣。
4开发工具、环境及其技术
4.1java简介
java是由sunMicrosystems公司于1995年5月推出的java面向对象程序设计语言(以下简称java语言)和java平台的总称。
java技术也不断更新。
java技术是一门编程语言,也是一个平台,它基于java虚拟机技术,借助这个东西建立了跨平台的优势。
java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。
java的特点
(1)java语言是简单的。
java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用java。
另一方面,java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。
特别地,java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。
(2)java语言是一个面向对象的。
java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。
java语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。
总之,java语言是一个纯的面向对象程序设计语言。
(3)Java语言是分布式的。
java语言支持Internet应用的开发,在基本的
java应用编程接口中有一个网络应用编程接口(),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。
java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
(4)java语言是健壮的。
java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。
对指针的丢弃是java的明智选择。
java的安全检查机制使得java更具健壮性。
(5)java语言是安全的。
java通常被用在网络环境中,为此,java提供了一个安全机制以防恶意代码的攻击。
除了java语言具有的许多安全特性以外,
java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制
(类SecurityManager)让java应用设置安全哨兵。
(6)java语言是体系结构中立的。
java程序(后缀为java的文件)在java平台上被编译为体系结构中立的字节码格式(后缀为class的文件), 然后可以在实现这个java平台的任何系统中运行。
这种途径适合于异构的网络环境和软件的分发。
(7)java语言是可移植的。
这种可移植性来源于体系结构中立性,另外,
java还严格规定了各个基本数据类型的长度。
java系统本身也具有很强的可移植性,java编译器是用java实现的,java的运行环境是用ANSIC实现的。
(8)java语言是解释型的。
如前所述,java程序在java平台上被编译为字节码格式,然后可以在实现这个java平台的任何系统中运行。
在运行时,java平台中的java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
(9)java是高性能的。
与那些解释型的高级脚本语言相比,java的确是高性能的。
事实上,java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。
(10)java语言是多线程的。
在java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。
通常有两种方法来创建线程:
其一,使用型构为Thread(Runnable)的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。
值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。
线程的活动由一组方法来控制。
java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。
(11)java语言是动态的。
java语言的设计目标之一是适应于动态变化的环境。
java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。
这也有利于软件的升级。
另外,java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
4.2java编程环境
4.2.1环境变量
(1)java(TM)SEDevelopmentKits,即JDK。
(2)设置环境变量:
右击 我的电脑->属性->高级->环境变量,这时候可以看到以下的环境变量:
Path:
系统在任何路径下都可以识别java命令。
classPath:
为java加载类(包括class,lib)的路径,只有类在classPath中,
java命令才能识别。
java_HOME:
java的安装路径。
这三个变量是必须正确设置的,否则java命令将可能不会正常运行,具体设置如下:
Path:
C:
\ProgranFiles\java\jdk1.6.0_01\binclasspath:
ProgranFiles\java\jdk1.6.0_01\lib\dt.jar;ProgranFiles\java\jdk1.6.0_01\
lib\tools.jar
java_HOME:
ProgranFiles\java\jdk1.6.0_01
5程序设计思路与实现
5.1程序设计思路
5.1.1设计思想
(1)本程序要实现五子棋的游戏功能,必须先有一个棋盘,所以,通过继承JPanel,然后在JPanel上画出一个11*11的棋盘,另外还有三个按钮:
重新开局、悔棋、退出游戏,提醒用户进行相应的操作。
当然,JPanel必须放在
JFrame中,所以,又通过继承JFrame得到一个实例。
(2)对于下棋的操作,通过对JPanel增加鼠标事件监听器MouseListener,每次当用户点击鼠标时,先取得点击的坐标值,然后换算成对应棋盘上(即棋盘数组)的位置(数组的下标)。
(3)判断此处是否已经有棋子,如果有则提示玩家重新下子,否则通过
java里的画图函数在此处画上棋子,重新刷新输出棋盘。
(4)判断该颜色棋子的上下左右是否满足连续五个,是的话提醒相应玩家获胜,不是的话,更换玩家下棋。
(5)对于玩家的更换是程序自动的,每次用户点击鼠标后,若本局还未结束则会变换玩家,从而画出对应黑方白方的棋子,直到有一方获胜程序技术。
5.1.2程序设计分析
(1)本款游戏有重新开始、悔棋、退出三个选项,玩家可以根据具体需要选择使用。
(2)绘制棋盘,11条横线,11条竖线,在直线交点处下棋子(实心黑白圆形)。
(3)首先程序会自动开始游戏黑方可以直接落子,方便快捷。
(4)棋盘处于鼠标监听状态,当鼠标在棋盘上有点击操作的时候,程序会获得鼠标点击的坐标然后换算成对应的棋盘的位置,再判断此处是否有棋子,假如没有,那么在此处画出对应颜色的实心棋子,假如已经有棋子了,则提示玩家此处已经有棋子请重新下棋。
(5)当任何一方有五个棋子沿着横,竖,斜连在一起时,系统自动判断赢棋,并显示黑方或白方胜利。
棋局结束后,任何一方均不能继续操作。
(6)在任意一方五个连续的子形成一条直线后,系统会自动弹出窗口并且显示出字母“恭喜,黑(白)棋赢了”
(7)程序流程如下图5-1
图5-1:
程序流程图
5.2程序设计
这个游戏程序包含两个类:
棋盘类,用于绘画棋盘及棋子。
主程序类,窗口的创建和整个逻辑程序代码。
5.2.1设计思路
(1)首先编写一个类StartCheesJFrame,主要用来显示主窗体界面,包括工具条面板,重新开始,悔棋,退出按钮,菜单栏,系统菜单,重新开始,悔棋,和退出菜单项。
设置设置界面关闭事件。
并编写一个内部类MyItemListener来监听按钮和菜单项单击事件。
(2)编写ChessBoardextendsJPanel,通过定义构造函数,来设置背景颜色为橘黄色。
然后在主框架类中创建ChessBoard对象,并添加到主框架中。
(3)在ChessBoard中覆盖paintComponent方法来进行绘制。
绘制11*11
网格的棋盘,绘制前先定义边距、行数、列数、网格宽度等常量。
(4)编写Point类,包括棋子的x,y索引,颜色.定义构造函数和相应的get
方法。
(5)在ChessBoard中创建Point[],然后在paintComponent方法中绘制棋子数组(注意将索引转换成坐标)。
(6)为ChessBoard实现监听器MouseListener,覆盖相应抽象方法。
在构造方法中增加监听器(addMouseListener...)。
(7)编写mousePressed方法的内容,预先定义isBlack表示下的是黑棋还是白棋,PointCount表示当前棋子的个数
(8)在mousePressed中获得下的坐标,转换成索引,再创建Point对象,添加到PointList中。
再重新绘制。
(9)添加相应的判断:
不能画到棋盘外,下过的地方不能再下(需要辅助方法findPoint...)
(10)再添加胜利的判断isWin, 添加标记变量gameOver. 在
mousePressed方法的最前面调用加入gameOver的判断,在mousePressed方法的最后调用isWin,返回true则给出消息提示,gameOver设置为true。
5.2.2程序代码和功能实现棋盘类代码:
importjavax.swing.*;importjava.awt.*;
importjava.awt.event.MouseListener;
importjava.awt.event.MouseMotionListener;importjava.awt.event.MouseEvent;
/*
五子棋-棋盘类
*/
publicclassChessBoardextendsJPanelimplementsMouseListener{publicstaticfinalintMARGIN=30;//边距
publicstaticfinalintGRID_SPAN=35;//网格间距
publicstaticfinalintROWS=10;//棋盘行数publicstaticfinalintCOLS=10;//棋盘列数
Point[]chessList=newPoint[(ROWS+1)*(COLS+1)];//初始每个数组元素为null
booleanisBlack=true;//默然开始是黑棋先下booleangameOver=false;//游戏是否结束intchessCount;//当前棋盘的棋子个数
intxIndex,