毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx

上传人:聆听****声音 文档编号:8971493 上传时间:2023-05-16 格式:DOCX 页数:30 大小:144.86KB
下载 相关 举报
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第1页
第1页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第2页
第2页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第3页
第3页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第4页
第4页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第5页
第5页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第6页
第6页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第7页
第7页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第8页
第8页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第9页
第9页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第10页
第10页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第11页
第11页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第12页
第12页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第13页
第13页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第14页
第14页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第15页
第15页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第16页
第16页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第17页
第17页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第18页
第18页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第19页
第19页 / 共30页
毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx

《毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx》由会员分享,可在线阅读,更多相关《毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx(30页珍藏版)》请在冰点文库上搜索。

毕业设计(论文)-基于Java的五子棋游戏设计与开发.docx

安徽大学江淮学院

本科毕业论文(设计、创作)

题 目:

基于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,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2