某学院面向对象程序设计实训报告_第1页
某学院面向对象程序设计实训报告_第2页
某学院面向对象程序设计实训报告_第3页
某学院面向对象程序设计实训报告_第4页
某学院面向对象程序设计实训报告_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

广西科技大学鹿山学院课程设计报告广西科技大学鹿山学院面向对象程序设计实训报告题目:网络络中国象象棋系别:电气与与计算机机工程系系专业班级::计软软1411班姓名:邓康言言学号:20014114099成绩评定::指导教师签签字:20116年1月10日广西科技大学鹿山学院java实训报告目录目录1、 需求求分析 11.1开发的的背景 11.2算法 11.3要求 12、 总体体分析与与设计 12.1总体体设计方方案 12.2功能描描述 22.2.11服务器器端 22.2.22客户端端 22.3算法设设计 32.5系统流流程图 43、数数据结构构设计 43.1功能能模块的的设计 43.1.11服服务器端端框架类类设计 43.1.22服务务器线程程设计 83.1.33服务务器代理理线程设设计 83.1.44棋子子的开发发类设计计 133.1.55客户户端的框框架类设设计 143.1.66客户户端的框框架类设设计 163.1.77棋子子的规则则类设计计 193.1.88棋盘盘的规则则类设计计 224、系统实实现 264.1服务务器端界界面 264.2客户户端界面面 264.3未未启动服服务器,客客户端连连接失败败 274.4服务务器启动动 274.5服服务器启启动客户户端成功功连接 284.6显显示在线线用户 284.7不不允许重重名 294.8发起起挑战 294.9拒绝绝挑战 304.10接接受挑战战 304.11对战战走棋 314.12不能能向正在在下棋的的用户发发起挑战战 314.13赢棋棋 324.14认输 324.15服务器器关闭 33总结 33参考文献 34需求分析1.1开发的的背景·中国象棋棋有着悠悠久的历历史,象象棋爱好好者更是是不计其其数,但但是由于于人们的的工作地地点从、时时间的限限制,原原始的那那种面对对面的下下棋方式式已经不不再适应应人们的的生活,人人们已经经开始走走向网络络象棋博博弈·网络象棋棋有着很很多的优优点,通通过网络络象棋,对对弈的双双方是网网络上任任意的两两个象棋棋爱好者者,甚至至是不认认识。网网络让对对弈的范范围更加加的广泛泛,让象象棋爱好好者可以以与更多多的象棋棋爱好者者切磋棋棋艺。1.2算法 ·指定服服务器端端口号 ·支持多多人同时时在线 ··显示在线线用户信信息·显示当前前在线所所有用户户·从在线用用户列表表中选择择玩家进进行挑战战·接受或拒拒绝挑战战1.3要求 ·用Jaava语语言实现现系统,源源程序要要有适当当的注释释,使程程序容易易阅读 ·函数功功能要划划分好(结结构化程程序设计计) ·可以增增加新功功能模块块总体分析与与设计2.1总体设设计方案案·系统功能能模块图图:2.2功能描描述2.2.11服务器器端·可以指定定服务器器端口号号。·可以支持持多人同同时在线线。·可以显示示在线用用户信息息。·不允许玩玩家同名名2.2.22客户端端·能够通通过主机机IP号号及端口口号登陆陆到服务务器。·可以显示示当前在在线所有有用户。·可以从在在线用户户列表中中选择玩玩家进行行挑战。·可以接受受或拒绝绝挑战。·如果对方方在和其其他玩家家对弈中中,则应应该给与与相应的的提示信信息。·象棋规则则一定要要严密。·棋子样式式采用最最普通的的橡胶式式象棋。棋棋子为黑黑色,字字为红色色和白色色2.3算法设设计本程序功能能模块根根据程序序设计的的需要。综综合程序序的实用用性、智智能化的的考虑。将将程序划划分为88个模块块来写。(1)服务务器端的的框架设设计类(2)服务务器线程程类(3)服务务器代理理线程类类(4)棋子子类的开开发类(5)客户户端的框框架设计计类(6)客户户端线程程类(7)棋子子的规则则类(8)棋盘盘的设计计类2.5系统流流程图3、数数据结构构设计3.1功能能模块的的设计3.1.11服服务器端端框架类类设计imporrtjjavaa.uttil..*;imporrtjjavaa.awwt.**;///界面包包imporrtjjavaa.awwt.eevennt.**;///事件处处理包imporrtjjavaax.sswinng.**;///图形化化界面包包imporrtjavvax..swiing..eveent..*;///图形形化界面面包事件件进行处处理imporrtjjavaa.neet.**;///网络包包imporrtjavva.iio.**;///IO流流publiicclaassSerrverrexttenddsJJFraameimpplemmenttsAActiionLListteneer{ JLabbeljlPPortt=neewJJLabbel(("端口号号");;//创创建提示示输入端端口号标标签 JTexxtFiielddjttfPoort==newwJTTexttFieeld(("94457"");///用于于输入端端口号的的文本框框 JButttonnjbbStaart==newwJBButtton(("启动动");;//创创建"启启动"按按钮 JButttonnjbbStoop=nnewJBuuttoon(""关闭"");///创建建"关闭闭"按钮钮 JPanneljpss=neewJJPannel(();///创建建一个JJPannel对对象 JLisstjjlUsserOOnliine==newwJLiist(();///创建建用于显显示当前前用户的的JLiist JScrrolllPannejjspxx=neewJJScrrolllPanne(jjlUsserOOnliine));///将显示示当前用用户的JJLisst放在在JSccrolllPaane中中 JSpllitPPaneejsspz==newwJSSpliitPaane((JSpplittPanne.HHORIIZONNTALL_SPPLITT,jsspx,,jpss);///创建建JSpplittPanne对象象 ServverSSockketss;;//声声明SeerveerSoockeet引用用 ServverTThreeadst;;//声声明SeerveerThhreaad引用用 VecttoronllineeLisst=nnewVecctorr();;//创创建存放放当前在在线用户户的Veectoor对象象 publlicSerrverr() { thiis.iinittiallCommponnentt();;//初初始化控控件 thiis.aaddLListteneer());///为相应应的控件件注册事事件监听听器 thiis.iinittiallFraame(();///初始始化窗体体 thiis.ssetDDefaaulttClooseOOperratiion((JFrramee.EXXIT__ON__CLOOSE)); } publlicvoiidiinittiallCommponnentt() { jpss.seetLaayouut(nnulll);///设为为空布局局 jlPPortt.seetBooundds(220,220,550,220);; jpss.addd(jjlPoort));///添加用用于提示示输入端端口号的的标签 thiis.jjtfPPortt.seetBooundds(885,220,660,220);; jpss.addd(tthiss.jttfPoort));///添加用用于输入入端口号号的文本本框 thiis.jjbSttartt.seetBooundds(118,550,660,220);; jpss.addd(tthiss.jbbStaart));///添加""开始""按钮 thiis.jjbSttop..settBouundss(855,500,600,200); jpss.addd(tthiss.jbbStoop);;//添添加"关关闭"按按钮 thiis.jjbSttop..settEnaableed(ffalsse);;//将将"关闭闭"按钮钮设为不不可用 } publlicvoiidaaddLListteneer()) { thiis.jjbSttartt.adddAcctioonLiisteenerr(thhis));///为"开开始"按按钮注册册事件监监听器 thiis.jjbSttop..adddActtionnLisstenner((thiis);;//为为"关闭闭"按钮钮注册事事件监听听器 } publlicvoiidiinittiallFraame(() { thiis.ssetTTitlle(""象棋服务务器端"");///设置置窗体标标题 Imaageimaage==newwImmageeIcoon(""icoo.giif")).geetImmagee();; thiis.ssetIIconnImaage((imaage)); thiis.aadd((jsppz);;//将将JSpplittPanne添加加到窗体体中 jsppz.ssetDDiviiderrLoccatiion((2500); jsppz.ssetDDiviiderrSizze(44);///设置置分割线线的位置置和宽度度 thiis.ssetBBounnds((20,,20,,4200,3220);; thiis.ssetVVisiiblee(trrue));///设置可可见性 thiis.aaddWWinddowLListteneer(///为窗窗体关闭闭事件注注册监听听器 neewWWinddowAAdappterr() { ppubllicvoiidwwinddowCClossingg(WiindoowEvventte)) {{ if(sst===nulll)///当服服务器线线程为空空时直接接退出 { Sysstemm.exxit((0);;//退退出 retturnn; } tryy { Vecctorrv==onllineeLisst; inttsiize==v.ssizee();; forr(intti==0;ii<siize;;i+++) { //当当不为空空时,向向在线用用户发送送离线信信息 SerrverrAgeentTThreeadtemmpSaat=((SerrverrAgeentTThreead))v.gget((i);; temmpSaat.ddoutt.wrriteeUTFF("<<#SEERVEER_DDOWNN#>""); temmpSaat.fflagg=faalsee;///终止服服务器代代理线程程 } st..flaag=ffalsse;///终止止服务器器线程 st==nulll; ss..cloose(();///关闭闭SerrverrSocckett v.ccleaar());///将在线线用户列列表清空空 reffresshLiist(();///刷新新列表 } cattch((Exccepttionneee) { ee..priintSStacckTrracee();; } Sysstemm.exxit((0);;//退退出 }} } );; } publlicvoiidaactiionPPerfformmed((ActtionnEveente) { if((e.ggetSSourrce(()===thiis.jjbSttartt) {///当单击击"启动动"按钮钮时 thhis..jbSStarrt_eevennt()); } elsseif(ee.geetSoourcce())==tthiss.jbbStoop) {///单击""关闭""按钮后后 thhis..jbSStopp_evventt();; } } publlicvoiidjjbSttartt_evventt() { //单单击"启启动"按按钮的业业务处理理代码 inttpoort==0; tryy { ///获得用用户输入入的端口口号,并并转化为为整型 poort==Inttegeer.pparsseInnt(thiis.jtffPorrt.ggetTTextt()..triim())); } cattch((Exccepttionneee) {///端口号号不是整整数,给给出提示示信息 JOOptiionPPanee.shhowMMesssageeDiaalogg(thiis,""端口号号只能是是整数"","错错误",, JJOpttionnPanne.EERROOR_MMESSSAGEE); reeturrn; } if((porrt>6655335|||porrt<00) {///断口号号不合法法,给出出提示信信息 JOOptiionPPanee.shhowMMesssageeDiaalogg(thiis,""端口号号只能是是0-6655335的整整数",,"错误误", JJOpttionnPanne.EERROOR_MMESSSAGEE); reeturrn; } tryy { thhis..jbSStarrt.ssetEEnabbledd(faalsee);///将开开始按钮钮设为不不可用 thhis..jtffPorrt.ssetEEnabbledd(faalsee);///将用用于输入入端口号号的文本本框设为为不可用用 thhis..jbSStopp.seetEnnablled((truue);;//将将停止按按钮设为为可用 sss=neewSServverSSockket((porrt);;//创创建SeerveerSoockeet对象象 stt=neewSServverTThreead((thiis);;//创创建服务务器线程程 stt.sttartt();;//启启动服务务器线程程 ///给出服服务器启启动成功功的提示示信息 JOOptiionPPanee.shhowMMesssageeDiaalogg(thiis,""服务器器启动成成功",,"提示示", JJOpttionnPanne.IINFOORMAATIOON_MMESSSAGEE); } cattch((Exccepttionneee) { ///给出服服务器启启动失败败的提示示信息 JOOptiionPPanee.shhowMMesssageeDiaalogg(thiis,""服务器器启动失失败",,"错误误", JJOpttionnPanne.EERROOR_MMESSSAGEE); thhis..jbSStarrt.ssetEEnabbledd(trrue));///将开始始按钮设设为可用用 thhis..jtffPorrt.ssetEEnabbledd(trrue));///将用于于输入端端口号的的文本框框设为可可用 thhis..jbSStopp.seetEnnablled((fallse));///将停止止按钮设设为不可可用 } } publlicvoiidjjbSttop__eveent(() { //单单击"关关闭"按按钮的业业务处理理代码 tryy { Veectoorvv=onnlinneLiist;; inntssizee=v..sizze()); foor(intti==0;ii<siize;;i+++) {///向在在线用户户发送离离线信息息 SServverAAgenntThhreaadttemppSatt=(SServverAAgenntThhreaad)vv.geet(ii); ttemppSatt.doout..wriiteUUTF(("<##SERRVERR_DOOWN##>")); ttemppSatt.fllag==fallse;;//关关闭服务务器代理理线程 } stt.fllag==fallse;;//关关闭服务务器线程程 stt=nuull;; sss.cllosee();;//关关闭SeerveerSoockeet v..cleear(();///将在在线用户户列表清清空 reefreeshLListt();;//刷刷新列表表 thhis.jbbStaart..settEnaableed(ttruee);///将开开始按钮钮设为可可用 thiis.jjtfPPortt.seetEnnablled((truue);;//将将用于输输入端口口号的文文本框设设为可用用 thhis..jbSStopp.seetEnnablled((fallse));///将停止止按钮设设为不可可用 } cattch((Exccepttionneee) { eee.prrinttStaackTTracce()); } } publlicvoiidrrefrreshhLisst()) { //更更新在线线用户列列表的业业务处理理代码 Vecctorrv==newwVecctorr();; inttsiize==thiis.oonliineLListt.siize((); forr(intti==0;ii<siize;;i+++) {///遍历在在线列表表 SeerveerAggenttThrreaddteempSSat==(SeerveerAggenttThrreadd)thhis..onllineeLisst.gget((i);; Sttrinngttempps=ttemppSatt.scc.geetInnetAAddrresss()..toSStriing((); teempss=teempss+"||"+ttemppSatt.geetNaame(();///获得得所需信信息 v..addd(teempss);///添加加到Veectoor中 } thiis.jjlUsserOOnliine..settLisstDaata((v);;//更更新列表表数据 } publlicstaaticcvoiidmmainn(Sttrinngaargss[])) { newwSeerveer()); }}说明:此服服务器端端类既为为服务器器的运行行类,用用户通过过该类进进入服务务器的主主界面。进进行相应应的操作作。3.1.22服务务器线程程设计/*服务器器线程**/imporrtjavva.uutill.*;;imporrtjavaa.awwt.**;imporrtjavva.aawt..eveent..*;imporrtjavvax..swiing..*;imporrtjavvax..swiing..eveent..*;imporrtjjavaa.neet.**;imporrtjavva.iio.**;publiicclaassSerrverrThrreaddexxtenndsThrreadd{ Servverfattherr;///声明明Serrverr的引用用 ServverSSockketss;;//声声明SeerveerSoockeet的引引用 boolleannfllag==truue;///线程程存在为为truue publlicSerrverrThrreadd(Seerveerffathher)) {//构构造器 thiis.ffathher==fattherr; ss==fattherr.sss;///和服务务器端关关联 } publlicvoiidrrun(() { whiile((flaag)///定义义一个死死循环。为为fallse时时跳出 { trry { SSockketsc==ss..accceptt();;//等等待客户户端连接接 SServverAAgenntThhreaadssat==newwSeerveerAggenttThrreadd(faatheer,ssc);; ssat..staart(();///创建建并启动动服务器器代理线线程 } caatchh(Exxcepptioonee)///tryycaatchh捕获异异常 { ee.prrinttStaackTTracce());///打印异异常,可可有可无无 } } }}类功能说明明:服务务器线程程类在服服务器启启动后创创建并启启动的第第一个线线程,该该线程主主要用于于接收客客户端的的连接,并并为每一一个连接接分配一一个服务务器代理理线程。3.1.33服务务器代理理线程设设计【部分代码码(过长长不适复复制完)】::/*服务器器代理线线程*////先想到到需要用用什么函函数imporrtjjavaa.uttil..*;imporrtjjavaa.awwt.**;///界面包包imporrtjjavaa.awwt.eevennt.**;///事件处处理包imporrtjjavaax.sswinng.**;///图形化化界面包包imporrtjjavaax.sswinng.eevennt.**;///图形化化界面包包事件进进行处理理imporrtjjavaa.neet.**;///网络包包imporrtjjavaa.ioo.*;;//IIO流publiiccclasssSServverAAgenntThhreaadeexteendssThhreaad///同服服务器类类一样{ Servverfattherr;///声明SServver的的引用 Sockketsc;;//声声明Soockeet的引引用。用用他来与与客户端端一一对对应。分分配给它它资源 DataaInpputSStreeamdinn;///声明数数据输入入流与输输出流的的引用 DataaOuttputtStrreammdoout;; boolleannfllag==truue;///控制制线程的的标志位位 publlicSerrverrAgeentTThreead((Serrverrfaatheer,SSockketsc)) { thiis.ffathher==fattherr; thiis.ssc=ssc; tryy { diin=nnewDattaInnputtStrreamm(scc.geetInnputtStrreamm()));///创建数数据输入入流 doout==newwDaataOOutpputSStreeam((sc..gettOuttputtStrreamm()));///创建数数据输出出流 } cattch((Exccepttionne)) { e..priintSStacckTrracee();; } } publlicvoiidrrun(() { whiile((flaag)///线程程在存活活期。就就是死循循环。 { trry { SStriingmsgg=diin.rreaddUTFF()..triim());///接收客客户端传传来的信信息 iif(mmsg..staartssWitth(""<#NNICKK_NAAME##>")))///收到新新用户的的信息 {{ thiis.nnickk_naame((msgg); }} eelseeiff(mssg.sstarrtsWWithh("<<#CLLIENNT_LLEAVVE#>>"))){///收到用用户离开开的信息息 thiis.cclieent__leaave((msgg); }} eelseeiff(mssg.sstarrtsWWithh("<<#TIIAO__ZHAAN#>>"))){///收到用用户发出出的挑战战信息 thiis.ttiaoo_zhhan((msgg); }} eelseeiff(mssg.sstarrtsWWithh("<<#TOONG__YI##>"))){///收到到接受挑挑战的信信息 thiis.ttongg_yii(mssg);; }} eelseeiff(mssg.sstarrtsWWithh("<<#BUUTONNG_YYI#>>"))){///收到拒拒绝挑战战的信息息 thiis.bbutoong__yi((msgg); }} eelseeiff(mssg.sstarrtsWWithh("<<#BUUSY##>"))){///收到到被挑战战者忙的的信息 thiis.bbusyy(mssg);; }} eelseeiff(mssg.sstarrtsWWithh("<<#MOOVE##>"))){///收到到走棋的的信息 thiis.mmovee(mssg);; }} eelseeiff(mssg.sstarrtsWWithh("<<#REENSHHU#>>"))){///收到某某用户认认输的信信息 thiis.rrensshu((msgg); }} } caatchh(Exxcepptioonee) { ee.prrinttStaackTTracce()); } } } publlicvoiidnnickk_naame((Strringgmssg) { tryy { Sttrinngnnamee=mssg.ssubsstriing((13));///获得用用户的昵昵称 thhis..settNamme(nnamee);///用该该昵称给给该线程程取名 Veectoorvv=faatheer.oonliineLListt;///获得在在线用户户列表 boooleeanisCChonngMiing==fallse;; inntssizee=v..sizze());///获得用用户列表表的大小小 foor(iinti=00;i<<sizze;ii++)) {///遍历历列表,查查看是否否已经有有该用户户名 SServverAAgenntThhreaadttemppSatt=(SServverAAgenntThhreaad)vv.geet(ii); iif(ttemppSatt.geetNaame(().eequaals((namme))) {{ isCChonngMiing==truue;///有重重名,将将标志位位设为ttruee breeak;; }} } iff(issChoongMMingg==ttruee)///如果重重名 { ddoutt.wrriteeUTFF("<<#NAAME__CHOONGMMINGG#>"");///将重重名信息息发送给给客户端端 ddin..cloose(();///关闭闭数据输输入流 ddoutt.cllosee();;//关关闭数据据输出流流 ssc.cclosse());///关闭SSockket fflagg=faalsee;///终止该该服务器器代理线线程 } ellse///如果果不重名名 { vv.addd(tthiss);///将该该线程添添加到在在线列表表 ffathher..reffresshLiist(();///刷新新服务器器在线信信息列表表 SStriingnicckLiistMMsg=="";; ssizee=v..sizze());///获得在在线列表表大小 ffor((intti==0;ii<siize;;i+++) {{ SerrverrAgeentTThreeadtemmpSaat=((SerrverrAgeentTThreead))v.gget((i);; nicckLiistMMsg==nicckLiistMMsg++"|""+teempSSat..gettNamme()); }}//将将在线列列表内容容住组织织成字符符串 nnickkLisstMssg=""<#NNICKK_LIIST##>"++nicckLiistMMsg;; VVecttortemmpv==fattherr.onnlinneLiist;; ssizee=teempvv.siize((); ffor((intti==0;ii<siize;;i+++) {{//遍遍历在线线列表 SerrverrAgeentTThreeadsattTemmp=((SerrverrAgeentTThreead))temmpv..gett(i)); sattTemmp.ddoutt.wrriteeUTFF(niickLListtMsgg);///将最最新的列列表信息息发送到到各个客客户端 if((sattTemmp!==thiis) {///给其他他客户端端发送新新用户上上线的信信息 sattTemmp.ddoutt.wrriteeUTFF("<<#MSSG#>>"+tthiss.geetNaame(()+""上线了了");; } }} } } cattch((IOEExceeptiione) { e..priintSStacckTrracee();; } }服务器代理理线程类类功能及及实现::服务器器代理线线程主要要是用于于接收客客户端传传来的信信息,并并将该信信息转发发给相对对应的另另一个客客户端。服服务器为为所有客客户端都都分配了了一个该该类线程程,单独独为特定定客户端端进行服服务。同同时每一一个服务务器代理理线程都都有能位位移标示示其的名名称3.1.44棋子子的开发发类设计计imporrtjjavaa.uttil..*;imporrtjjavaa.awwt.**;imporrtjjavaax.sswinng.**;publiiccclasssQQiZii //定定义棋子子的属性性{ privvateeCoolorrcoolorr;///棋子的的颜色 privvateeSttrinngnnamee;///棋子的的名字,即即是什么么棋 privvateeinntxx;///所在的的x方向向位置 将用二二维数组组实现 privvateeinntyy;///所在的的y方向向位置将用二维维数组实实现 privvateeboooleeanfoccus==fallse;;//是是否被选选中,以以至于只只能选一一子走 publlicQiZZi())//无无参函数数 { } publlicQiZZi(CColoorccoloor,SStriingnamme,iintx,iinty)///颜色色,名字字,坐标标 { //构构造器 thiis.ccoloor=ccoloor; thiis.nnamee=naame;; thiis.xx=x;; thiis.yy=y;; thiis.ffocuus=ffalsse;///为未未选中状状态 } publlicCollorgettCollor(()///获得棋棋子颜色色的方法法 { retturnnthhis..collor;; } publlicvoiidssetCColoor(CColoorccoloor)///设置置棋子颜颜色的方方法 { thiis.ccoloor=ccoloor; } publlicStrringggeetNaame(()///获得棋棋子名字字的方法法 { retturnnthhis..namme; } publlicvoiidssetNNamee(Sttrinngnnamee)///设置棋棋子名字字的方法法 { thiis.nnamee=naame;; } publlicinttgeetX(()///获得棋棋子x方方向位置置的方法法 { retturnnthhis..x; } publlicvoiidssetXX(inntxx)///设置棋棋子x方方向位置置的方法法 { thiis.xx=x;; } publlicinttgeetY(()///获得棋棋子y方方向位置置的方法法 { retturnnthhis..y; } publlicvoiidssetYY(inntyy)///设置棋棋子y方方向位置置的方法法 { thiis.yy=y;; } publlicboooleaanggetFFocuus())//判判断棋子子是否被被选中的的方法 { retturnnfoocuss; } publlicvoiidssetFFocuus(bboolleannfoocuss)///设置棋棋子选中中状态的的方法 { thiis.ffocuus=ffocuus; }}棋子类功能能实现::该类主主要包含含有棋子子的属性性及一些些关于属属性的小小方法3.1.55客户户端的框框架类设设计部分代码::imporrtjjavaa.awwt.**;imporrtjjavaa.awwt.eevennt.**;imporrtjjavaax.sswinng.**;imporrtjavvax..swiing..eveent..*;imporrtjavva.uutill.*;;imporrtjavva.iio.**;imporrtjjavaa.neet.**;publiicclaassXiaangQQiexttenddsJJFraameimpplemmenttsAActiionLListteneer //设设置控件件{ publlicstaaticcfinnalCollorbgCColoor=newwCoolorr(2445,2250,,1600);///棋盘盘的背景景色。RRGB调调色 publlicstaaticcfinnalCollorfoccusbbg=newwCoolorr(2442,2242,,2422);///棋子子选中后后的背景景色。RRGB调调色 publlicstaaticcfinnalCollorfoccusccharr=newwCoolorr(966,955,911);///棋子子选中后后的字符符颜色。RRGB调调色 publlicstaaticcfinnalCollorcollor11=newwCoolorr(2449,1183,,1733);///红方方的颜色色。RGGB调色色 publlicstaaticcfinnalCollorcollor22=Coolorr.whhitee;///白方的的颜色直直接定义义 JLabbeljlHHostt=neewJJLabbel(("主机机IP"");///创建建提示输输入主机机名的标标签 JLabbeljlPPortt=neewJJLabbel(("端口口号"));/////创创建提示示输入端端口号标标签 JLabbeljlNNickkNamme=nnewJLaabell("昵昵称"");///创建建提示输输入昵称称的标签签 JTexxtFiielddjttfHoost==newwJTTexttFieeld(("1227.00.0..1"));///创建输输入主机机名的文文本框,默默认值是是"1227.00.0..1" JTexxtFiielddjttfPoort==newJJTexxtFiieldd("994577");;//创创建输入入端口号号的文本本框,默默认值是是99999 JTexxtFiielddjttfNiickNNamee=neewJJTexxtFiieldd("康康言先森森");;//创创建输入入昵称的的文本框框,默认认值是PPlayy1 JButttonnjbbConnnecct=nnewJBuuttoon(""连接"));///创建""连接""按钮 JButttonnjbbDissconnnecct=nnewJBuuttoon(""断开"));///创建""断开""按钮 JButttonnjbbFaiil=nnewJBuuttoon(""认输"));///创建""认输""按钮 JButttonnjbbChaalleengee=neewJJButttonn("挑挑战战");;//创创建"挑挑战"按按钮 JCommboBBoxjcbbNicckLiist==newwJCoombooBoxx();;//创创建存放放当前用用户的下下拉列表表框 JButttonnjbbYChhalllengge=nnewJBuuttoon(""接受挑挑战"));///创建""接受挑挑战"按按钮 JButttonnjbbNChhalllengge=nnewJBuuttoon(""拒绝挑挑战"));///创建""拒绝挑挑战"按按钮 intwiddth==60;;//设设置棋盘盘两线之之间的距距离 QiZii[][[]qqiZii=neewQQiZii[9]][100];///创建建棋子数数组 QiPaanjjpz==newwQiiPann(qiiZi,,widdth,,thiis);;//创创建棋盘盘 //JPPaneeljjpz==newwJPPaneel());///创建一一个JPPaneel,暂暂时代替替棋盘 JPanneljpyy=neewJJPannel(();///创建建一个JJPannel JSpllitPPaneejssp=nnewJSpplittPanne(JJSpllitPPanee.HOORIZZONTTAL__SPLLIT,,jpzz,jppy);;//创创建一个个JSpplittPanne boolleanncaaiPaan=ffalsse;///可否否走棋的的标志位位 intcollor==0;///0代表红红棋,11代表白白棋 Sockketsc;;//声声明Soockeet引用用 ClieentAAgenntThhreaadccat;;//声声明客户户端代理理线程的的引用 publlicXiaangQQi())//构构造XiianggQi方方法 { thiis.iinittiallCommponnentt();;//初初始化控控件 thiis.aaddLListteneer());///为相应应控件注注册事件件监听器器 thiis.iinittiallStaate(();///初始始化状态态 thiis.iinittiallQiZZi());///初始化化棋子 thiis.iinittiallFraame(();///初始始化窗体体 } publlicvoiidiinittiallCommponnentt() { jpyy.seetLaayouut(nnulll);///设为为空布局局 thiis.jjlHoost..settBouundss(100,100,500,200); jpyy.addd(tthiss.jllHosst);;//添添加"主主机IPP"标签签 thiis.jjtfHHostt.seetBooundds(770,110,880,220);; jpyy.addd(tthiss.jttfHoost));///添加用用于输入入主机名名的文本本框 thiis.jjlPoort..settBouundss(100,400,500,200); jpyy.addd(tthiss.jllPorrt);;//添添加"端端口号""标签 thiis.jjtfPPortt.seetBooundds(770,440,880,220);; jpyy.addd(tthiss.jttfPoort));///添加用用于输入入端口号号的文本本框 thiis.jjlNiickNNamee.seetBooundds(110,770,550,220);; jpyy.addd(tthiss.jllNicckNaame));///添加""玩家昵昵称"标标签 thiis.jjtfNNickkNamme.ssetBBounnds((70,,70,,80,,20)); jpyy.addd(tthiss.jttfNiickNNamee);///添加加用于输输入昵称称的文本本框 thiis.jjbCoonneect..settBouundss(100,1000,880,220);; jpyy.addd(tthiss.jbbConnnecct);;//添添加"连连接"按按钮 thiis.jjbDiiscoonneect..settBouundss(1000,1100,,80,,20)); jpyy.addd(tthiss.jbbDissconnnecct);;//添添加"断断开"按按钮 thiis.jjcbNNickkLisst.ssetBBounnds((20,,1300,1330,220);; jpyy.addd(tthiss.jccbNiickLListt);///添加加用于显显示当前前用户的的下拉列列表框 thiis.jjbChhalllengge.ssetBBounnds((10,,1600,800,200); jpyy.addd(tthiss.jbbChaalleengee);///添加加"挑战战"按钮钮 thiis.jjbFaail..settBouundss(1000,1160,,80,,20)); jpyy.addd(tthiss.jbbFaiil);;//添添加"认认输"按按钮 thiis.jjbYCChalllennge..settBouundss(5,,1900,866,200); jpyy.addd(tthiss.jbbYChhalllengge);;//添添加"接接受挑战战"按钮钮 thiis.jjbNCChalllennge..settBouundss(1000,1190,,86,,20)); jpyy.addd(tthiss.jbbNChhalllengge);;//添添加"拒拒绝挑战战"按钮钮 jpzz.seetLaayouut(nnulll);///将棋棋盘设为为空布局局 jpzz.seetBooundds(00,0,,7000,7000);;//设设置大小小 } publlicvoiidaaddLListteneer()) { thiis.jjbCoonneect..adddActtionnLisstenner((thiis);;//为为"连接接"按钮钮注册事事件监听听器 thiis.jjbDiiscoonneect..adddActtionnLisstenner((thiis);;//为为"断开开"按钮钮注册事事件监听听器 thiis.jjbChhalllengge.aaddAActiionLListteneer(tthiss);///为""挑战""按钮注注册事件件监听器器 thiis.jjbFaail..adddActtionnLisstenner((thiis);;//为为"认输输"按钮钮注册事事件监听听器 thiis.jjbYCChalllennge..adddActtionnLisstenner((thiis);;//为为"同意意挑战""按钮注注册事件件监听器器 thiis.jjbNCChalllennge..adddActtionnLisstenner((thiis);;//为为"拒绝绝挑战""按钮注注册事件件监听器器 } publlicvoiidiinittiallStaate(() { thiis.jjbDiiscoonneect..settEnaableed(ffalsse);;//将将"断开开"按钮钮设为不不可用 thiis.jjbChhalllengge.ssetEEnabbledd(faalsee);///将""挑战""按钮设设为不可可用 thiis.jjbYCChalllennge..settEnaableed(ffalsse);;//将将"接受受挑战""按钮设设为不可可用 thiis.jjbNCChalllennge..settEnaableed(ffalsse);;//将将"拒绝绝挑战""按钮设设为不可可用 thiis.jjbFaail..settEnaableed(ffalsse);;//将将"认输输"按钮钮设为不不可用 }客户端主类类框架的的功能及及实现::客户端端主类为为客户端端的运行行类,用用户通过过运行该该类连接接服务器器,也是是通过在在该类的的窗体中中与其他他玩家进进行对弈弈。其与与服务器器端主类类的开发发类似。3.1.66客户户端的框框架类设设计部分代码::/*客户端端线程类类*/imporrtjjavaa.awwt.**;imporrtjjavaa.awwt.eevennt.**;imporrtjjavaax.sswinng.**;imporrtjjavaax.sswinng.eevennt.**;imporrtjjavaa.uttil..*;imporrtjjavaa.ioo.*;;imporrtjjavaa.neet.**;publiiccclasssCClieentAAgenntThhreaadeexteendssThhreaad{ XianngQiifaatheer;///声明明XiaangQQi的引引用 boolleannfllag==truue;///控制制线程的的标志位位 DataaInpputSStreeamdinn;///声明数数据输入入输出流流的引用用 DataaOuttputtStrreammdoout;; StriingtiaaoZhhanZZhe==nulll;///用于于记录正正在挑战战的对手手 publlicCliienttAgeentTThreead((XiaangQQiffathher)) { thiis.ffathher==fattherr; tryy { diin=nnewDattaInnputtStrreamm(faatheer.ssc.ggetIInpuutSttreaam()));///创建建数据输输入输出出流 doout==newwDaataOOutpputSStreeam((fattherr.scc.geetOuutpuutSttreaam())); Sttrinngnnamee=faatheer.jjtfNNickkNamme.ggetTTextt()..triim());///获得昵昵称 doout..wriiteUUTF(("<##NICCK_NNAMEE#>""+naame));///发送昵昵称到服服务器 } cattch((Exccepttionne)) { e..priintSStacckTrracee();; } } publlicvoiidrrun((){ whiile((flaag){{ trry{ SStriingmsgg=diin.rreaddUTFF()..triim());///获得服服务器发发来的信信息 iif(mmsg..staartssWitth(""<#NNAMEE_CHHONGGMINNG#>>"))){///收到重重名的信信息 thiis.nnamee_chhonggminng()); }} eelseeiff(mssg.sstarrtsWWithh("<<#NIICK__LISST#>>"))){///收到昵昵称列表表 thiis.nnickk_liist((msgg); }} eelseeiff(mssg.sstarrtsWWithh("<<#SEERVEER_DDOWNN#>"")){{//当当收到服服务器离离开的信信息 thiis.sservver__dowwn()); }} eelseeiff(mssg.sstarrtsWWithh("<<#TIIAO__ZHAAN#>>"))){///当收到到挑战的的信息 thiis.ttiaoo_zhhan((msgg); }} eelseeiff(mssg.sstarrtsWWithh("<<#TOONG__YI##>"))){ thiis.ttongg_yii();;//当当该用户户收到对对方接受受挑战的的信息时时 }} eelseeiff(mssg.sstarrtsWWithh("<<#BUUTONNG_YYI#>>"))){ thiis.bbutoong__yi(();///当该该用户收收到对方方拒绝挑挑战的信信息时 }} eelseeiff(mssg.sstarrtsWWithh("<<#BUUSY##>"))){///当收收到对方方忙的信信息时 thiis.bbusyy();; }} eelseeiff(mssg.sstarrtsWWithh("<<#MOOVE##>"))){///当收收到走棋棋的信息息时 thiis.mmovee(mssg);; }} eelseeiff(mssg.sstarrtsWWithh("<<#REENSHHU#>>"))){///当收到到认输的的信息时时 thiis.rrensshu((); }} } caatchh(Exxcepptioonee){ee.prrinttStaackTTracce());} } } publlicvoiidnnamee_chhonggminng()){ tryy{ JOOptiionPPanee.shhowMMesssageeDiaalogg(thhis..fattherr,"该该玩家名名称已经经被占用用,请重重新填写写!",, "错错误",,JOpptioonPaane..ERRROR__MESSSAGGE);;//给给出重名名的提示示信息 diin.cclosse());///关闭数数据输入入流 doout..cloose(();///关闭闭数据输输出流 thhis..fattherr.jttfHoost..settEnaableed(!!fallse));///将用于于输入主主机名的的文本框框设为可可用 thhis..fattherr.jttfPoort..settEnaableed(!!fallse));///将用于于输入端端口号的的文本框框设为可可用 thhis..fattherr.jttfNiickNNamee.seetEnnablled((!faalsee);///将用用于输入入昵称的的文本框框设为可可用 thhis..fattherr.jbbConnnecct.ssetEEnabbledd(!ffalsse);;//将将"连接接"按钮钮设为可可用 thhis..fattherr.jbbDissconnnecct.ssetEEnabbledd(!ttruee);///将""断开""按钮设设为不可可用 thhis..fattherr.jbbChaalleengee.seetEnnablled((!trrue));///将"挑挑战"按按钮设为为不可用用 thhis..fattherr.jbbYChhalllengge.ssetEEnabbledd(faalsee);///将""接受挑挑战"按按钮设为为不可用用 thhis..fattherr.jbbNChhalllengge.ssetEEnabbledd(faalsee);///将""拒绝挑挑战"按按钮设为为不可用用 thhis..fattherr.jbbFaiil.ssetEEnabbledd(faalsee);///将""认输""按钮设设为不可可用 faatheer.ssc.cclosse());///关闭SSockket faatheer.ssc=nnulll; faatheer.ccat==nulll; fllag==fallse;;//终终止该客客户端代代理线程程 } cattch((IOEExceeptiione){{e.pprinntSttackkTraace(();}} } publlicvoiidnnickk_liist((Strringgmssg){{ Strringgs==msgg.suubsttrinng(113);;//分分解并得得到有用用信息 Strringg[]na==s.sspliit(""\\||");; Vecctorrv==newwVeectoor());///创建VVecttor对对象 forr(inntii=0;;i<nna.llenggth;;i+++){ iff(naa[i]].trrim(().llenggth(()!==0&&&(!nna[ii].ttrimm()..equualss(faatheer.jjtfNNickkNamme.ggetTTextt()..triim()))))){ vv.addd(nna[ii]);;//将将昵称全全部添加加到Veectoor中 } } fattherr.jccbNiickLListt.seetMoodell(neewDDefaaulttCommboBBoxMModeel(vv));;//设设置下拉拉列表的的值 } publlicvoiidsservver__dowwn()){ thiis.ffathher..jtffHosst.ssetEEnabbledd(!ffalsse);;//将将用于输输入主机机名的文文本框设设为可用用 thiis.ffathher..jtffPorrt.ssetEEnabbledd(!ffalsse);;;///将用于于输入端端口号的的文本框框设为可可用 thiis.ffathher..jtffNicckNaame..settEnaableed(!!fallse));///将用于于输入昵昵称的文文本框设设为可用用 thiis.ffathher..jbCConnnectt.seetEnnablled((!faalsee);///将""连接""按钮设设为可用用 thiis.ffathher..jbDDiscconnnectt.seetEnnablled((!trrue));///将"断断开"按按钮设为为不可用用 thiis.ffathher..jbCChalllennge..settEnaableed(!!truue);;//将将"挑战战"按钮钮设为不不可用 thiis.ffathher..jbYYChaalleengee.seetEnnablled((fallse));///将"接接受挑战战"按钮钮设为不不可用 thiis.ffathher..jbNNChaalleengee.seetEnnablled((fallse));///将"拒拒绝挑战战"按钮钮设为不不可用 thiis.ffathher..jbFFaill.seetEnnablled((fallse));///将"认认输"按按钮设为为不可用用 thiis.fflagg=faalsee;///终止该该客户端端代理线线程 fattherr.caat=nnulll; JOpptioonPaane..shoowMeessaageDDiallog((thiis.ffathher,,"服务务器停止止!!!!",""提示"", JJOpttionnPanne.IINFOORMAATIOON_MMESSSAGEE);///给出出服务器器离开的的提示信信息 } 3.1.77棋子子的规则则类设计计部分代码(只只列了車車和马的的方法。其其他棋子子类似)::/*规则类类不引诱诱任何方方法*//publiicclaassGuiiZe{ QiZii[][[]qqiZii;///声明棋棋子的数数组 boolleanncaanMoove==fallse;;//棋棋子是否否能移动动 inti; intj; publlicGuiiZe((QiZZi[]][]qiZZi)///构造造棋子方方法 { thiis.qqiZii=qiiZi;; } publlicboooleaanccanMMovee(inntsstarrtI,,inttsttarttJ,iintenddI,iintenddJ,SStriingnamme)///起始始位置的的横纵坐坐标,结结束为止止的横纵纵坐标,棋棋子的名名字 { inttmaaxI;;//定定义一些些辅助变变量

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论