五子棋.docx
《五子棋.docx》由会员分享,可在线阅读,更多相关《五子棋.docx(49页珍藏版)》请在冰豆网上搜索。
![五子棋.docx](https://file1.bdocx.com/fileroot1/2023-7/16/41284c0a-4036-4b75-8621-bbecccecdf7f/41284c0a-4036-4b75-8621-bbecccecdf7f1.gif)
五子棋
第一章绪论
1.1开发背景:
游戏软件是当今世界发展最迅速,最有影响力,最有潜力与活力的领域之一。游戏软件深受广大青年人喜爱,而且在发达国家中老年人也有大部分喜欢游戏的,因此游戏软件在很大程度上给予绝大部分人精神上的娱乐。第二次世界大战以后,电子计算机技术得到了突飞猛进的发展。先是由晶体管代替了笨重的真空管,后来出现了集成电路和大规模集成电路,使电子子计算机一代一代实现更新,同时软件技术也发展迅速。在美国,集中了许多计算机软件的设计人才,他们工作之余,时常喜爱编一种能与人斗智的“游戏”,以此来锻炼编程的能力。这种“游戏”花样繁多,但其特点都是利用计算机软件事先设计好的“分析”、“判断”能力反过来与人较量。由于不断修改更新,使计算机的“智力”水平与人难分高低。到了90年代,游戏软件已经为世界各国的人使用,BLACKISLAND和Blizzard.这两个强大的游戏制作组起到了巨大的带动作用,还有中国的洛河工作室在国内也起到了巨大作用,他们让很多很多人喜欢上了游戏软件,打开了这个市场。
如今游戏软件产业已经受到了广泛的关注,它年轻有潜力而且吸引人,让人们日益丰富的生活需求得以满足。
五子棋游戏更是吸引着不同年龄段的人群,无论男女老少都可以玩,都喜欢玩,而当前微型计算机已经是在广大人群中流行着,用电脑来下五子棋更是一种时尚。
五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。
有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。
在上古的神话传说中有“女娲造人,伏羲做棋”一说,《增山海经》中记载:
“休舆之山有石焉,名曰帝台之棋,五色而文状鹑卵。
”李善注引三国魏邯郸淳《艺经》中曰:
“棋局,纵横各十七道,合二百八十九道,白黑棋子,各一百五十枚”。
可见,五子棋颇有渊源。
亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中遍及开来,可以说五子棋是我们的国粹之一了。
而当前五子棋程序的发展也非常快,从最初的双人发展到人机(有AI),然后到现在的网络对战,已经受到越来越多人的喜爱和重视。
1.2课题意义:
人类之所以不断在进步,是因为我们人类一直不断的在思考,五子棋游戏程序的开发符合人类进步也是促进人类进步的一大动力之一。
五子棋游戏程序让人们方便快捷的可以下五子棋,让人们在何时都能通过下棋来提高逻辑思维能力,同时也培养儿童的兴趣以及爱好,让孩子更加聪明。
同时,五子棋游戏程序的开发也使得五子棋这个游戏得到了广泛的推广,让世界各地的人们知道五子棋,玩上五子棋,这已经不是局限。
五子棋游戏程序使得越来越多的人喜欢上了五子棋,热爱下五子棋,它是具有很好的带动性的。
随着互联网络的不断普及,越来越多的人可以在网络上就能够与他人下五子棋了。
1.3五子棋游戏的发展与现状:
目前,连珠这一棋类运动已迅速在国际上发展起来。
外国人都十分看好这一不起眼的智力游戏,并认为五子棋不仅能提高思维、开发智力、手脑并用、修身养性而且富含哲理,具有东方的神秘和西方的直观,是中西文化的交汇点。
许多国家的人对五子棋都有不同的爱称,例如韩国人把五子棋称之为“情侣棋”,言下之意是情人之间下五子棋有利于增加情感的交流;欧洲人称之为“中老年棋”,表示五子棋适合中老年人的生理特点和思维方式;美洲人喜欢将五子棋称之为“商业棋”,就是说商人谈生意时可边下棋边谈生意,棋下完了生意也谈成了。
由此可见,尽管国度不同,语言各异,但人们都可以借助五子棋这一简单而又深奥的棋艺进行交流、比赛,增进友谊。
当前,有40多个国家和地区都在下五子棋,并有各种规模和级别的比赛。
1989年8月在日本京都、1991年8月在俄罗斯联邦的莫斯科、1993年8月在瑞典、1995年8月在爱沙尼亚的塔林分别举行了第一、二、三、四届世界锦标赛。
除第三届的冠军是爱沙尼亚人之外,其余三届的冠军都是日本人。
五子棋的世界锦标赛,每两年举办一次,其申国竞争也十分激烈。
日本目前拥有自己的五子棋职业棋手,并且对连珠(五子棋)技术的研究也相当普遍和全面,就水平也正在日益增强。
同时,五子棋的理论研究与探索也呈现蓬勃发展的势头,从1858年第一部五子棋专著问世以来,目前,全世界有2000多种五子棋的书籍及期刊,分别以日文、俄文、英文、瑞典文及中文出版发行。
五子棋在我国的北京、上海、天津、云南、浙江、广东、四川、湖北、辽宁、新疆、河北等省(区)市都有很大的发展。
北京多次举办了北京地区的五子棋赛,如“思曼杯”、“京空杯”、“奇奇童杯”、“北京第六届民族团结杯”和“北京第四岂民族运动会”的五子棋比赛。
上海地区举办了“上文杯”五子棋大赛。
云南省以及其他省市亦举办过许多五子棋比赛。
所有这些赛事都越来越多地吸引了无数人们的关注,表明了根埴于中国的五子棋有着广泛的群众基础,是群众喜闻乐见的体育活动。
而现在,很多很多游戏平台上面都有五子棋游戏供我们玩,任何游戏平台上面只要有棋牌类游戏的,那么它就有五子棋在里面,网络五子棋比赛,在联众,263,QQ游戏,UC里进行了10几年了可见,五子棋游戏在网络上面是非常火暴的,而且在棋牌游戏里面玩家人数排名总会占到很前面,不愧是风靡全球的棋牌游戏啊!
在未来中,将会有越来越多的人关注五子棋,喜欢五子棋,那么将其变为商业化也会越来越多,而且还可以以教育孩子的方式来将其嵌套进去,或者用来做测试等等,可以说以后的五子棋游戏会是那么的精彩,那么的让人憧憬。
那么对于它的游戏开发和发展也将会上升到举足轻重的地位去,它的发展会是相当之快的,就让我们拭目以待吧。
1.4论文的组织结构:
本文由第一章绪论,第二章介绍软件的基本功能和特点,第三章软件的总体设计,第四章软件各个功能的设计与实现,第五章总结,参考文献和致谢七部分组成。
第一章绪论由研究背景、五子棋的发展前景、五子棋程序的基本步骤和本文的组织结构组成。
第二章介绍软件的开发工具和和软件的基本功能,另外介绍软件所要实现的目标。
第三章软件总体设计和软件的总体分析。
第四章详细分析软件各模块的设计与实现包括绘制棋盘、下棋功能、判断胜负、下棋信息、时间设置、认输以及悔棋等功能组成。
第五章介绍软件的操作以及演示。
最后第六章为总结和致谢。
第二章五子棋程序的介绍与规划
2.1软件的基本功能:
1.显示一个十九行十九列的围棋棋盘。
2.在棋盘上面在对应位置通过点击鼠标下子,棋盘上将在相应的位置上显示棋子,并且棋子在横纵交点上。
3.可以自动判断游戏是否结束,是否黑方或者是白方已经胜利,并且跳出对话框来提示玩家。
4.在游戏棋盘上方会有一个游戏信息,这个游戏信息是用来提示当前是黑白双方的哪一方下子,玩家可以根据这个提示来相应的下棋,而不会导致不清楚轮到哪一方下棋。
5.可以重新开始游戏,并且有认输功能,在下棋提示上提示哪方时点认输,哪一方就输了,并且有悔棋功能。
6.还可以对游戏时间进行设置,判断是否超出规定的时间,如果超出时间则自动判断为输。
2.2开发运行环境:
1.中心处理器:
双核1.6GHZ;
2.内存:
1G;
3.硬盘:
320G;
4.操作系统:
WINDOWSXP;
5.开发工具:
MyEclipse7.5;
6.编程语言:
JAVA。
2.3软件的开发手段以及工具的介绍:
此软件我是通过MyEclipse这个开发软件来开发的,用的是JAVA语言编写。
将会用到Swing来编程序,Swing是在JAVA的基础图形化用户界面AWT的基础上拓展的API集,Swing的功能是通过JAVA代码编写窗口程序,创建图形化的用户界面(GUI)。
Swing可以创建窗体、面版,在窗口中导入或者绘制图片,或者输入文本信息等等,结合JAVA的JDBC和/或IO操作可以实现数据的保存。
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中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。
Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。
Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。
特别是Java企业应用编程接口(JavaEnterpriseAPIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。
MyEclipse是对EclipseIDE的扩展,利用它我们可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。
它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSF,CSS,Javascript,SQL,Hibernate。
在结构上,MyEclipse的特征可以被分为7类:
1.J2EE模型
2.WEB开发工具
3.EJB开发工具
4.应用程序服务器的连接器
5.J2EE项目部署服务
6.数据库服务
7.MyEclipse整合帮助
对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。
MyEclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。
简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错。
2.4软件的实现目的:
五子棋游戏程序所要实现的目的是让我们可以在电脑上下棋,而不需要去买,可以随时玩,方便快捷。
而且能更好的推广五子棋于世界各地,此软件也在于提供给爱好五子棋的人,也吸引更多的人喜欢上五子棋,也具有很大很大的商业价值。
使五子棋游戏程序在以后的制作中功能越来越强大,外观越来越好看。
第三章软件总体设计与分析
3.1用户需求分析:
通过软件功能的分析,根据五子棋爱好者的需求,得出以下需求信息:
1.具有重新开始功能;
2.具有认输功能;
3.具有提示该轮到哪一方下棋的功能;
4.退出游戏功能;
5.判断胜负功能;
6.时间设置功能;
7.悔棋功能。
还有用户对游戏界面的要求,通过上述的用户需求,我们可以得出一个总体的设计方案。
由上述的用户需要,可以对程序的基本功能进行一个有效的分析,规定下游戏的基本功能,基本功能如下结构图。
3.2软件功能结构图:
此五子棋程序最主要的四大功能是:
下棋,判断胜负,重新开始与认输,游戏时间设置。
大体的功能如下图:
3.3软件各个功能的简要说明:
1.绘制十九行十九列的棋盘:
首先是每行每列的距离都是一样的,并且棋盘上面有八个星,棋盘中间有个天元点,跟围棋的棋盘一样。
2.棋盘上面落子:
点击鼠标以后,会在相应位置落下棋子,并被绘制出来,黑子是一个实心的黑圆,白子是一个实心的白圆加上一个等大空心的黑圆。
棋子落在交点上:
我们在下五子棋棋的时候,棋子都是会落在交点上的,而并非落在格子里面,那么我们就要规定当我点击鼠标时,选取距离鼠标所取点的最近的左上交点为绘制棋子的中心点,那么就可以实现棋子落在交点上了。
3.黑白双方轮流落子:
黑方落子以后就要轮到白方,交替进行,这是下棋的基本要求,因此我们就要弄一个互斥事件进去,让他们交替的落子。
不能落在相同位置:
当我们落子时,会不小心落到相同位置上去,那么就要出现提示,不能落在相同位置上,需要重新落子,实现的设想是当这个点已经绘制过棋子以后,我们就要给一个布尔变量,让它为假,那么只能在它为真时才能绘制棋子,否则就要重新落子到别的地方去。
4.判断输赢:
当五个相同颜色子都连在了一起的时候,我们就要判其为赢,这五个子可以在横竖方向上连起,也可以在斜方向上连起。
5.游戏信息:
我们应该在棋盘的上面设置一个游戏信息的,用来提示当前轮到哪一方下棋了,以便于玩家知道谁在下,这个功能只要在黑白双方轮流下棋功能的过程中添加一个提示信息用于显示到界面上的就可以了。
6.重新开始游戏就是把棋盘上的子全部清空,回复到一开始的时候的状态,重置之前所有的数据。
认输的功能就是在判断输赢功能的基础上添加的,让玩家对自己没信心的时候使用。
退出游戏的功能就是直接把窗口关闭就可以了。
7.时间设置:
时间设置功能要调用到线程和监听,他的主要作用是给玩家设置规定的时间,也是五子棋游戏的一个下法规则,当哪一个玩家超出了规定的时间时,那么就会判断他输了,并且弹出对话框提示以及重新开始游戏。
3.4软件设计中使用到的JAVA软件包以及类和方法:
在用JAVA设计软件的时候,使用到SUM公司提供的一些软件包,这样使得我们编写程序更加简便,以下是使用到的软件包:
Javax.swing.JFrame//javax.swing软件包提供一组“轻量级”(全部是Java语言)组件,尽量让这些组件在所有平台上的工作方式都相同。
JFrame类是java.awt.Frame的扩展版本,该版本添加了对JFC/Swing组件架构的支持。
JFrame是用来创建窗体的swing类,用来创建一个图形界面的原始窗口,并且可以设置其大小,位置等属性,是swing编程的基础类之一。
JFrame这个类中,我们将要用到的主要方法是:
setVisible();//设置窗体是否显示,里面填上true,那么窗体就可以显示出来了,如果填false,窗体不显示。
setTitle();//设置窗体的标题,需要什么标题,就在里面写上你的标题就可以了,比如我要填入五子棋作为标题,那么可以这样写:
setTitle(“五子棋”)。
setSize();//设置窗体大小,这里需要设置的窗体是一个平面的,所以设置窗体大小的时候有高度和宽度这两个像素,输入两个像素就可以确定窗体的大小了。
setLocation();//设置窗体初始显示的位置,作用是把窗体初始显示的位置摆到让用户看起来舒服的位置。
setResizable();//设置窗体的大小是否可以改变,为了方便用户使用,可让用户自己拉大或者拉小窗体,达到用户需要的要求。
setDefaultCloseOperation(JFrame_EXIT_ON_CLOSE);//设置窗体关闭方式,关闭窗体的同时结束程序,这样就不会一直占用用户的内存去运行程序,只要不玩了,程序就会自动关闭,这个是游戏软件最基础的以及最必要的一个功能作用。
Java.awt//java.awt软件包包含用于创建用户界面和绘制图形图像的所有类。
Java.awt.Toolkit//Toolkit此类是所有AbstractWindowToolkit实际实现的抽象超类。
Toolkit的子类被用于将各种组件绑定到特定本机工具包实现。
Toolkit.geiDefaultToolkit().getScreenSize().width;
Toolkit.geiDefaultToolkit().getScreenSize().height;//以上这两个方法的作用是取得我们电脑显示屏幕的宽度以及高度。
geiDefaultToolkit()为获取默认工具包,如果名为"java.awt.headless"的系统属性被设置为true,则使用Toolkit的headless实现。
如果不存在"java.awt.headless"或"java.awt.headless"被设置false,且存在名为"awt.toolkit"的系统属性,则该属性将被视为Toolkit子类的名称;否则将使用特定于平台的默认Toolkit实现。
getScreenSize()这个方法是获取屏幕的大小。
在具有多个显示屏的系统上,使用主显示屏。
从GraphicsConfiguration和GraphicsDevice可以获得多屏幕感知显示尺寸。
Javax.swing.JOptionPane//JOptionPane有助于方便地弹出要求用户提供值或向其发出通知的标准对话框。
下面用到JOptionPane的方法有以下几个:
JOptionPane.showMessageDialog();//这个方法是显示一个消息对话框,主要用来提示信息。
showMessageDialog(mf,”我要输入的信息”),这样用以提示用户现在的情况。
JOptionPane.showConfirmDialog();//这个方法跟前一个方法有点类似,不过它是有判断的。
作用是显示一个确认对话框,用户选择对话框中的选项,然后根据选项返回结果进行判断,需要判断什么,写程序的时候可以自己添加进去,功能更加强大。
JOptionPane.showInputDialog();//显示请求用户输入内容的问题消息对话框,它以parentComponent为父级。
输入值将被初始化为initialSelectionValue。
该对话框显示于Component的窗体的上部,通常位于Component之下。
显示一个信息输入对话框,它的作用是用来保存用户输入的信息。
Java.awt.event.MouseListener//MouseLinstener是鼠标监听,功能是接收用户通过鼠标所做的操作,可以取得用户点击鼠标的坐标,从而进行其他的操作。
MouseLinstener的使用方法是需要调用到JFrame的addMouseListener方法加入监听。
它有以下几个方法,是我们写程序需要用到和了解的:
mouseClicked(MouseEvente);//监听鼠标点击事件的操作,对鼠标点击以后进行处理。
mouseEntered(MouseEvente);//监听鼠标进入事件的操作,对鼠标进入某个指定区域以后进行处理。
mouseExited(MouseEvente);//监听鼠标离开事件的操作,对鼠标离开某个指定区域以后进行处理。
mousePressed(MouseEvente);//监听鼠标按下事件的操作,对鼠标按下以后进行处理,这个在我们的五子棋用需要着重用到的。
mouseReleased(MouseEvente);//监听鼠标抬起事件的操作,对鼠标按下后抬起进行处理。
鼠标点击时执行的顺序是:
mousePrssedmouseReleasedmouseClicked//由此可以判断按西与抬起是否在同一个位置。
MouseEvent类有以下两个需要用到的方法:
getX();//得到鼠标的横向位置的坐标,用于判断棋子的位置的时候是需要到的。
getY();//得到鼠标的纵向位置的坐标,用于判断棋子的位置的时候是需要到的。
Graphics类,它的功能是类似于画笔的功能,用来在窗口中绘制文字以及图形等。
他的调用是通过覆写JFrame的paint()方法来使用的,通过repaint()方法来调用。
它有以下方法:
drawstring();//绘制字符串。
drawOval();//绘制一个空心的圆形,用与绘制我们一会五子棋中的白棋需要到的。
fillOval();//绘制实心的圆形,也是用到来绘制棋子。
drawline();//绘制一条直线,用来画我们的棋盘。
drawRect();//绘制一个空心的矩形,功能按钮用到。
fillRect();//绘制一个实心的矩形。
drawImage();//绘制一个已经存在的图片,将一个图片直接显示到窗体只中去。
setColor();//设置画笔的颜色。
比如:
setColor(Color.RED),那么就把它的颜色设置成了红色。