五子棋设计与实现毕业设计论文.docx
《五子棋设计与实现毕业设计论文.docx》由会员分享,可在线阅读,更多相关《五子棋设计与实现毕业设计论文.docx(41页珍藏版)》请在冰豆网上搜索。
五子棋设计与实现毕业设计论文
毕业设计(论文)
五子棋的设计与实现
GraduationProject(Thesis)
HarbinUniversityofCommerce
TheDesignandImplementation
ofGobang
Student
ZhouYuchun
Supervisor
LiEnlin
Specialty
ComputerScienceandTechnology
School
ComputerandInformationEngineering
2010-06-02
毕业设计(论文)任务书
姓名:
周玉春
学院:
计算机与信息工程
班级:
2006级4班
专业:
计算机科学与技术
毕业设计(论文)题目:
五子棋的设计与实现
立题目的和意义:
本程序旨在用JAVA实现一个基本于C/S模式的五子棋网络对战游戏。
玩家作为客户端通过服务器端与其它玩家进行对战,聊天等功能。
通过实现本程序加深对计算机网络编程的了解。
技术要求与工作计划:
开发环境:
Intelcore2duo1.8GHz1G内存160硬盘;Microsoft®Windows™XPProfessional;JDK1.50;Eclipse3.3.2
运行环境:
IntelPentium®2及以上处理器,32M以上内存,4G以上硬盘;Microsoft®Windows™9X/NT/XP操作系统;800*600或以上的屏幕分辨率
工作计划:
第一阶段需求分析
第二阶段系统设计
第三阶段系统实现
第四阶段论文初稿,程序调试
第五阶段论文终稿,程序修订
第六阶段准备论文答辩
时间安排:
1月--2月收集论文资料,确定毕业设计题目
3月--4月实习和调研,编写开题报告
4月--5月程序设计和调试
5月--6月论文初稿
6月--答辩论文终稿及答辩
指导教师要求:
(签字)年月日
教研室主任意见:
(签字)年月日
院长意见:
(签字)年月日
毕业设计(论文)审阅评语
一、指导教师评语:
指导老师签字:
年月日
毕业设计(论文)审阅评语
2、评阅人评语:
评阅人签字:
年月日
毕业设计(论文)答辩评语
三、答辩委员会评语:
四、毕业设计(论文)成绩:
专业答辩组负责人签字:
年月日
五、答辩委员会主任签章
答辩委员会主任单位:
(签章)
答辩委员会主任职称:
答辩委员会主任签字:
年月日
摘 要
随着互联网迅速的发展,网络游戏已经成为人们普遍生活中不可或缺的一部分,它不仅能使人娱乐,也能够开发人的智力,就像本文所主要讲的五子棋游戏一样能挖掘人们聪明的才干与脑袋的机灵程度。
本文主要讲的是用Eclipse开发工具与java开发语言开发出一个自定义界面的五子棋小游戏,本游戏程序能实现两个人对阵下棋,并且程序中能智能的判定游戏的获胜方和游戏的结束与否,实现两方进行博弈。
通过对软件的编写,更深入的理解了面向对象的概念,也体会到利用面向对象语言处理一些问题的优势。
同时也加深了对多线程,流套接字等高级技术的理解。
关键词:
Eclipse;java语言;自定义;五子棋;多线程;流套接字
Abstract
AstherapiddevelopmentofInternet,Onlinegameshavebecomeanintegralpartoftheuniversallife,Notonlydoesitmakepeopleentertainment,butalsotodeveloppeople'sintelligence,asinthispaperasthemainspokenwelcometoplaysmarttotappeople'stalentsandheadofthecleverlevel.
ThisarticleistalkingaboutEclipsedevelopmenttoolsandjavadevelopmentlanguagetodevelopacustominterfaceGobanggame,thegameprogramcanachieveagainsttwopeopleplayingchess,andbeabletodetermineintelligencethegamewinningsideandtheendofthegameornot,toachievetwosidegame.
Throughtothesoftwarecompilation,deepenunderstandingandgratothetechnologyaboveunderstandingandholding.
KeyWords:
Eclipse;java;language;intelligence;chess;multiplethread;Socket
1绪论
1.1课题背景
1.1.1背景知识
五子棋是起源于中国古代的传统黑白棋种之一。
现代五子棋日文称之为“连珠”,英文称之为“Renju”、“Gobang”或“FIR”(FiveinaRow的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。
五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为广大人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。
它是中西文化的交流点,是古今哲理的结晶。
五子棋起源于古代中国,发展于日本,风靡于欧洲。
对于它与围棋的关系有两种说法,一说早于围棋,早在“尧造围棋”之前,民间就已有五子棋游戏;一说源于围棋,是围棋发展的一个分支。
在中国的文化里,倍受人们的青睐。
古代的五子棋的棋具与围棋相同。
五子棋大约随围棋一起在我国南北朝时先后传入朝鲜、日本等地。
据日本史料文献介绍,中国古代的五子棋是经由高丽(朝鲜),于1688年至1704年的日本元禄时代传到日本的。
到日本明治32年(公元1899年),经过公开征名,“连珠”这一名称才被正式确定下来,取意于“日月如合壁,五星如连珠”。
从此,五子棋经过了不断的改良,例如棋盘由原来的纵横各十七道改为现行的纵横各十五道的五子棋专用棋盘等等。
二十世纪初,五子棋传入欧洲并迅速风靡了全欧洲。
通过一系列的变化,使五子棋这一简单的游戏系统化、规范化,最终成为今天的职业连珠五子棋,同时也成为一种国际比赛棋[1]。
1.1.2五子棋的相关基础
一、五子棋基本规则[2]
(1)五子棋行棋时,黑棋先下第一子,由天元开始,后白棋在黑棋周围的交叉点的落子。
接着黑方再以天元中心的25个交叉点的范围内落盘面的第三子,之后黑白双方相互顺序子。
(2)最先在棋盘线交点横向,纵向,斜向形成已方的五个棋子连续的一方为胜。
(3)出现禁手对方指出后将判负,其中包括两个或两个以上的活三,活四,长连均称之为禁手。
(4)禁手只对黑棋有效,白棋无禁手。
(5)黑方禁手形成时,白方需立即指出,黑方将被判负。
若白方未发现黑方禁手存在而继续应子,其后指出黑方禁手不能判黑方负。
(6)黑方连五与禁手同时形成,因黑方已连成五即黑方已获胜,故禁手规则失效。
(7)在对局中,在盘上落下的子又拿起来,此动作称为拔子,若拔子将被判为负。
(8)在对局中棋子掉落在棋盘上将被判负。
若推子或蹭子,以盘面第一落点为准。
用手将棋子推正不算违犯规则。
(9)在对局中,一方自行中止比赛如:
中途退场,将被判负。
(10)在对局中对方宣布认输,本局获胜。
(11)超过比赛规定所用时间限制,将被判为负:
正式比赛期间,迟到时间超过比赛容许时间将被判负。
(12)如下至最终一子仍不分胜负则定为平局。
(13)中盘期间双方同意和局提议,判定为平局。
二、五子棋常用术语[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)复局:
也叫“复着”。
对局结束又重演对局的过程。
一般用以研究、比较双方的成败得失和着法的优劣。
1.2开发工具、环境及技术
1.2.1JAVA简介
一、JAVA技术介绍:
Java技术[4]是一门编程语言,也是一个平台,它基于Java虚拟机技术,借助这个东西建立了跨平台的优势。
(题外话:
Java热门的原因之一就是一个跨平台的概念,和跨平台类似跨浏览器的好处也是如此,这也是现在AJAX技术流行的原因之一。
另外现在热炒的RIA富客户端的概念下的技术除了AJAX外还有Adobe的Flash/Flex,微软的SilverLight,SUN的JavaFX等,个人更看好FLash/Flex,原因是Flash插件在浏览器端占用率很高)
Java技术的重要性就不讲了,从最近流行的一个统计数据上来说,目前世界上编程语言Java、C、VB、C++依次排名前4位,这排名本身不说明什么,至少也是工业界对编程语言使用上一个侧面的反映吧。
Java编程语言[5]与众不同之处在于:
Java程序既是编译型的(转换为一种称为Java字节码的中间语言),又是解释型的(JVM对字节码进行解析和运行)。
编译只进行一次,而解释在每次运行程序时都会进行。
编译后的字节码采用一种针对JVM优化过的机器码形式;解释器是JVM的实现。
这段是摘自网上的,编译原理学的不是很好,对这门语言的背后运行机制理解到这样了。
Java平台是一种纯软件平台,它有三个版本JavaSE、JavaEE、JavaME。
JavaSE(JavaPlatform,StandardEdition)这个版本以前叫做J2SE,后来版本号从1.4直接跳到5.0,其实也就是1.5,所以就叫成JavaSE5.0。
目前Java开发人员使用较多的版本是5.0,当然还有JavaSE6.0这个更新的版本。
它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java应用程序。
JavaSE还包含了支持JavaWeb服务开发的类,并为JavaEE这个版本提供基础。
虽说桌面应用程序,Java一直不被看好,但也稍微提一下,负责桌面GUI开发的类库我知道的有:
JDK[6]自带的主要是AWT/SWING这个Java原生类库;也可以使用IBM的SWT/JFace这个第三方类库。
开发工具我了解的有:
NetBeans(最近已经是6.0final版了,做GUI有使用VB的感觉),Eclipse(SWT/JFace这个项目其实就是做Eclipse项目时扩展出来的,所以对SWT/JFace支持的也不错)。
JavaEE(JavaPlatform,EnterpriseEdition)这个版本以前叫做J2EE,也就是大家可能听得比较多的,也是Java比较流行的领域,Java的企业级版本。
JavaEE下有很多流行的开发框架,像Struts、Spring、Hibernate这种流行的所谓SSH组合等。
根据项目大小、应用领域,技术平台的选择面还是很多的,除了JavaEE,还有.Net,LAMP组合(Linux、Apatch、MySql、PHP组合),相对来说比较新Ruby在RubyonRails的框架应用,后两者可能在相对来说比较轻量级的Web领域运用成功案例比较多,更重量的企业级潜力还有待挖掘。
JavaME(JavaPlatform,MicroEdition)这个版本以前叫做J2ME。
应用领域像各种移动设备和嵌入式设备,比如:
手机、PDA、电视机顶盒和打印机。
JavaME[7]不是太熟悉,不过移动设备和嵌入式设备的开发个人觉得算是比较有意思的领域,最近比较瞩目的业界新闻有一个就是Google发布开源智能手机操作系统开发平台Android,也就是前一阵子炒得很火的GPhone(原来Google出的不是手机,而是一个手机操作系统开发平台)。
这个平台貌似会对JavaME有些冲击,按照网上的消息,Android包括:
1、高度定制的Linux操作系统内核及智能手机硬件驱动支持;2、经过Google修改过的Java虚拟机Dalvik,这里的性能比SUN的Hotspot高,支持大部分Java核心类库;3、大量智能手机开发核心类库;4、大量现成的智能手机应用软件;5、基于Eclipse的开发环境。
也是按照网上的说法,JavaEE提供了统一的编程平台,但不能调用操作系统的资源;而Android下直达操作系统,上直达应用软件,如:
浏览器、日历、地图等。
Java开发工具很多,个人使用的IDE有Eclipse和NetBeans。
Eclispe比较流行,各种插件也多,当然用起来也不错;NetBeans现在也是越做越好了,介绍这两个IDE主要是开源的,当然还有其它工具如JBuilder、IntelliJ、JCreator。
这些IDE各有优势劣势,根据你开发的项目来选择了。
2、Java的特点:
Java技术取得今天这样这样的成就,依赖于这门技术的先进性,Java技术具有下列优点:
1.简单、健壮:
许多高级语言都要由程序员进行指针运算和存储器管理。
这项工作既复杂又容易出错。
Java不需要程序员进行指针运算和存储器管理,简化了设计,减少了出错的可能性。
2.面向对象:
Java是面向对象的程序设计语言。
与面向过程的语言相比,面向对象的语言更能反映人类对世界的认识和处理模式,具有良好的代码重用性。
处理复杂、庞大而且不断变化的信息系统,必须使用面向对象的程序设计语言。
3.分布式:
目前在所有软件产品中,仅供单个计算机使用的单机版软件所占得比例越来越小。
大多数软件都可以运行在网络环境中。
Java拥有一个网络协议对象库(TCP/IP,HTTP,FTP等),可以像访问当地文件一样访问Internet上的对象。
4.改进的解释性:
为弥补解释语言速度较慢的不足,Java采用预编译的办法,将原程序生成字节代码,减轻运行时的解释工作。
另一方面,有些Java运行环境采用Just-In-Time(JIT)编译器将字节代码编译成机器码直接运行,这种运行环境对于重复执行的服务器端软件特别有效,可以达到C语言的速度。
5.安全:
Java语言在编译时删除了指针和内存分配,在运行时检查字节代码,拒绝执行非法的内存访问,超越权限的访问等。
可以防御黑客攻击。
6.平台无关:
Java通过采用虚拟机技术真正实现了与平台无关。
Java软件是真正跨平台可移植的。
7.多线程:
允许一个应用程序同时做多个任务。
8.动态性:
Java允许下载代码模块,因此,当程序运行时也能动态升级。
9.高性能:
经过实际的综合评测得出结论,Java是高性能的。
1.2.2JAVA编程环境
一、环境变量:
(1)Java(TM)SEDevelopmentKits,即JDK
(2)设置环境变量
右击我的电脑->属性->高级->环境变量
Path:
系统在任何路径下都可以识别Java命令需要设置的变量
Path:
;C:
\ProgranFiles\java\jdk1.6.0_01\bin
classpath:
为java加载类(包括class,lib)的路径,只有类在classpath中,
Java命令才能识别
classpath:
.;ProgranFiles\java\jdk1.6.0_01\lib\dt.jar
;ProgranFiles\java\jdk1.6.0_01\lib\tools.jar
JAVA_HOME:
java的安装路径
JAVA_HOME:
ProgranFiles\java\jdk1.6.0_01
二、Eclipse插件:
(1)XMLBuddy:
编辑xml文件;下载地址为;
(2)FatJar:
打包插件,可以方便的完成各种打包任务,可以包含外部的包等;
(3)Log4E:
Log4j插件,提供各种与log4j相关的任务,Log4j专用于为程序输入调试信息
(4)Lomboz:
Ecilpse的一个J2EE的插件,可以将很多java应用服务器,J2EE组件和web应用开发集成到Eclipse中,可以帮助Java开发者使用Eclipse建立,测试和部署J2ee应用。
支持jsp编写,包括语法着色和语法检查;
(5)MyEclipse:
J2EE开发插件,支持jsp,EJB,数据库操作;
(6)TomcatPlugin:
支持Tomcat插件;
2需求分析
2.1任务概述
一、目标:
建立五子棋服务器程序,游戏主机的应用程序,主要提供客户进行游戏的服务器;建立五子棋客户端程序,安装于客户端的应用程序,主要提供客户游戏、聊天的应用程序。
可满足用户异地自由选择游戏对手、游戏模式,也可以在游戏当中进行聊天,私聊、群聊、修改用户名等功能。
二、运行环境:
Windows98/2000/XP/2003操作系统下,建立游戏服务器后,根据提示安装客户端程序即可。
2.2数据需求
1.数据流条目:
系统默认用户名,或客户根据喜好可进行修改用户名。
2.数据字典:
本程序采用非数据库策略,游戏时,只把部分数据保存于内存中。
2.3功能需求
专用棋盘为十五路(15*15),盘面上横竖各15条平行线,纵横线路为黑色,构成225个交叉点。
棋盘正中为“天元”,周围4点位“星位”。
黑子113枚,白子112枚,共225枚棋子。
因棋盘的大小一般来讲对下棋的影响不大,现就将其划成19*19的围棋盘大小。
五子棋采用简易规则,在对局开始时,先由执黑一方(简称执黑方)将一枚棋子落在天元点上,然后由执白棋的一方(简称执白方)在黑棋周围的交叉点上落子。
但是为了尊重和处于礼貌,执白方通常将盘面的第二棋布在自己河界的一侧。
此后由执黑方在以天元为中心的25个交叉点的范围内布盘面的第三棋,而后由白方接手,即布盘面的第四棋。
以后如此轮流落子,直到某一方首先在棋盘的直线、横线、或斜线上形成连续5子或5子以上(五子棋中只有白方可以5子以上获胜),则该方就算获胜。
本程序基于C/S模式实现了一个拥有独立服务器端、支持多个客户端连接的网络五子棋对弈程序,其拥有常用五子棋博弈程序的基本功能,如落子、胜负判断、等待等。
客户端可以连接服务器、创建游戏、加入游戏等。
要求客户端界面简洁实用。
另外游戏要有较高的可靠性,即控制好客户端线程向服务器端发送信息的同步性。
为了提高交互性,除了对弈外,游戏还将实现玩家之间的聊天功能和一些简单的命令。
这块内容界面做出来了,但有点问题,有待提高。
3概要设计
3.1程序设计思想
3.1.1界面设计
给一个游戏,我们首先想到的是游戏的界面,所以一个清晰美观的界面可以让别人对我们所设计出来的游戏产生好感,一开始考虑界面的设计,界面包括棋盘,也就是棋子绘制的范围,然后下棋的时候一些信息,比如说网络对弈时,对方的名字,IP等腰能够看到的话就该把它显示出来,所以还要一个显示这些信息的界面,另外,也是在网络游戏是,要输入IP,姓名的信息,还要一个连接服务器(客户端)或者是开启服务器(服务器端)的按钮。
这些控制的组建应该放在一起,一开始考虑把他们放在一个面板里面,处理这些信息只要对这一个面板进行操作就可以了,但是如果这样的话可以想象,当你计算棋子所字范围的时候还要考虑到信息面板所占的空间,还有那些控制面板的空间,而且放在一起时也不好摆放,他们的背景颜色等一些属性都是一样的,那样给人的感觉也不大美观。
放在一起主要原因是对它们操作不方便,对上面每一个组建进行操作都可能影响到其他的内容,显示情况等等。
从面向对面的角度来看,这也不符合,都放在一起,那些东西都在一个雷里面,他们还可以划分成其他的类,而这里用的是JAVA对该游戏进行开发,所以每一个类都要单一,所以面板分成三个部分:
一个是棋盘类,也是主要的类,一个是消息面板的类,还有一个就是控制面板的类。
这样一来,我们就可以对它们进行单独的操作了,而且组织它们也比较方便,我们可以根据自己的风格,自己的喜好来组织它们,把整个界面做的美观清晰。
而且对它们进行操作也不影响其他组件。
把对棋盘界面设计好了,我们就应该考虑棋子了