某学院面向对象程序设计实训报告13922.docx

上传人:you****now 文档编号:62757638 上传时间:2022-11-22 格式:DOCX 页数:74 大小:1.35MB
返回 下载 相关 举报
某学院面向对象程序设计实训报告13922.docx_第1页
第1页 / 共74页
某学院面向对象程序设计实训报告13922.docx_第2页
第2页 / 共74页
点击查看更多>>
资源描述

《某学院面向对象程序设计实训报告13922.docx》由会员分享,可在线阅读,更多相关《某学院面向对象程序设计实训报告13922.docx(74页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、广西科技大学鹿山学院课程设计报告 广西科技大学鹿山学院面向对象程序设计实训报告题 目: 网络络中国象象棋 系 别: 电气与与计算机机工程系系 专业班级: 计软软1411班 姓 名: 邓康言言 学 号: 20014114099 成绩评定: 指导教师签签字: 20116 年 1 月10 日73广西科技大学鹿山学院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 功能能

2、模块的的设计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拒

3、绝绝挑战304.10接接受挑战战304.11 对战战走棋314.12 不能能向正在在下棋的的用户发发起挑战战314.13 赢棋棋324.14 认输324.15 服务器器关闭33总 结33参考文献341、 需求分析1.1 开发的的背景中国象棋棋有着悠悠久的历历史,象象棋爱好好者更是是不计其其数,但但是由于于人们的的工作地地点从、时时间的限限制,原原始的那那种面对对面的下下棋方式式已经不不再适应应人们的的生活,人人们已经经开始走走向网络络象棋博博弈网络象棋棋有着很很多的优优点,通通过网络络象棋,对对弈的双双方是网网络上任任意的两两个象棋棋爱好者者,甚至至是不认认识。网网络让对对弈的范范围更加加的广

4、泛泛,让象象棋爱好好者可以以与更多多的象棋棋爱好者者切磋棋棋艺。1.2 算法指定服服务器端端口号支持多多人同时时在线显示在线线用户信信息显示当前前在线所所有用户户从在线用用户列表表中选择择玩家进进行挑战战接受或拒拒绝挑战战1.3 要求用Jaava语语言实现现系统,源源程序要要有适当当的注释释,使程程序容易易阅读函数功功能要划划分好(结结构化程程序设计计)可以增增加新功功能模块块2、 总体分析与与设计2.1 总体设设计方案案系统功能能模块图图: 2.2 功能描描述 2.2.11服务器器端可以指定定服务器器端口号号。可以支持持多人同同时在线线。可以显示示在线用用户信息息。不允许玩玩家同名名2.2.

5、22客户端端 能够通通过主机机IP号号及端口口号登陆陆到服务务器。可以显示示当前在在线所有有用户。可以从在在线用户户列表中中选择玩玩家进行行挑战。可以接受受或拒绝绝挑战。如果对方方在和其其他玩家家对弈中中,则应应该给与与相应的的提示信信息。象棋规则则一定要要严密。棋子样式式采用最最普通的的橡胶式式象棋。棋棋子为黑黑色,字字为红色色和白色色2.3 算法设设计- 本程序功能能模块根根据程序序设计的的需要。综综合程序序的实用用性、智智能化的的考虑。将将程序划划分为88个模块块来写。(1)服务务器端的的框架设设计类(2)服务务器线程程类(3)服务务器代理理线程类类(4)棋子子类的开开发类(5)客户户端

6、的框框架设计计类(6)客户户端线程程类(7)棋子子的规则则类(8)棋盘盘的设计计类2.5 系统流流程图- 3、 数数据结构构设计3.1 功能能模块的的设计3.1.11 服服务器端端框架类类设计imporrt jjavaa.uttil.*;imporrt jjavaa.awwt.*;/界面包包imporrt jjavaa.awwt.eevennt.*;/事件处处理包imporrt jjavaax.sswinng.*;/图形化化界面包包imporrt javvax.swiing.eveent.*;/图形形化界面面包事件件进行处处理imporrt jjavaa.neet.*;/网络包包imporrt

7、 javva.iio.*;/IO流流publiic claass Serrverr exttendds JJFraame impplemmentts AActiionLListteneerJLabbel jlPPortt=neew JJLabbel(端 口 号号);/创创建提示示输入端端口号标标签JTexxtFiieldd jttfPoort=neww JTTexttFieeld(94457);/用于于输入端端口号的的文本框框JButttonn jbbStaart=neww JBButtton(启动动);/创创建启启动按按钮JButttonn jbbStoop=nnew JBuuttoon(关

8、闭);/创建建关闭闭按钮钮JPannel jpss=neew JJPannel();/创建建一个JJPannel对对象JLisst jjlUsserOOnliine=neww JLiist();/创建建用于显显示当前前用户的的JLiistJScrrolllPanne jjspxx=neew JJScrrolllPanne(jjlUsserOOnliine);/将显示示当前用用户的JJLisst放在在JSccrolllPaane中中JSpllitPPanee jsspz=neww JSSpliitPaane(JSpplittPanne.HHORIIZONNTALL_SPPLITT,jsspx,j

9、pss);/创建建JSpplittPanne对象象ServverSSockket ss;/声声明SeerveerSoockeet引用用ServverTThreead st;/声声明SeerveerThhreaad引用用Vecttor onllineeLisst=nnew Vecctorr();/创创建存放放当前在在线用户户的Veectoor对象象publlic Serrverr()thiis.iinittiallCommponnentt();/初初始化控控件thiis.aaddLListteneer();/为相应应的控件件注册事事件监听听器thiis.iinittiallFraame();/初

10、始始化窗体体thiis.ssetDDefaaulttClooseOOperratiion(JFrramee.EXXIT_ON_CLOOSE);publlic voiid iinittiallCommponnentt()jpss.seetLaayouut(nnulll);/设为为空布局局jlPPortt.seetBooundds(220,220,550,220);jpss.addd(jjlPoort);/添加用用于提示示输入端端口号的的标签thiis.jjtfPPortt.seetBooundds(885,220,660,220);jpss.addd(tthiss.jttfPoort);/添加用

11、用于输入入端口号号的文本本框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);/将将关闭闭按钮钮设为不不可用publlic voiid aaddLListteneer()thiis.jjbSttartt.adddAcctioonLiisteene

12、rr(thhis);/为开开始按按钮注册册事件监监听器thiis.jjbSttop.adddActtionnLisstenner(thiis);/为为关闭闭按钮钮注册事事件监听听器publlic voiid iinittiallFraame()thiis.ssetTTitlle(象棋-服务务器端);/设置置窗体标标题Imaage imaage=neww ImmageeIcoon(icoo.giif).geetImmagee();thiis.ssetIIconnImaage(imaage);thiis.aadd(jsppz);/将将JSpplittPanne添加加到窗体体中jsppz.ssetD

13、DiviiderrLoccatiion(2500);jsppz.ssetDDiviiderrSizze(44);/设置置分割线线的位置置和宽度度thiis.ssetBBounnds(20,20,4200,3220);thiis.ssetVVisiiblee(trrue);/设置可可见性thiis.aaddWWinddowLListteneer(/为窗窗体关闭闭事件注注册监听听器neew WWinddowAAdappterr()ppubllic voiid wwinddowCClossingg(WiindoowEvventt e)if(sst=nulll)/当服服务器线线程为空空时直接接退出Sy

14、sstemm.exxit(0);/退退出retturnn;tryyVecctorr v=onllineeLisst;intt siize=v.ssizee();forr(intt i=0;iisiize;i+)/当当不为空空时,向向在线用用户发送送离线信信息SerrverrAgeentTThreead temmpSaat=(SerrverrAgeentTThreead)v.gget(i);temmpSaat.ddoutt.wrriteeUTFF();temmpSaat.fflagg=faalsee;/终止服服务器代代理线程程st.flaag=ffalsse;/终止止服务器器线程st=nulll

15、;ss.cloose();/关闭闭SerrverrSocckettv.ccleaar();/将在线线用户列列表清空空reffresshLiist();/刷新新列表cattch(Exccepttionn eee)ee.priintSStacckTrracee();Sysstemm.exxit(0);/退退出);publlic voiid aactiionPPerfformmed(ActtionnEveent e)if(e.ggetSSourrce()=thiis.jjbSttartt)/当单击击启动动按钮钮时thhis.jbSStarrt_eevennt();elsse if(ee.geetSo

16、ourcce()=tthiss.jbbStoop)/单击关闭按钮后后thhis.jbSStopp_evventt();publlic voiid jjbSttartt_evventt()/单单击启启动按按钮的业业务处理理代码intt poort=0;tryy/获得用用户输入入的端口口号,并并转化为为整型poort=Inttegeer.pparsseInnt(thiis.jtffPorrt.ggetTTextt().triim();cattch(Exccepttionn eee)/端口号号不是整整数,给给出提示示信息JOOptiionPPanee.shhowMMesssageeDiaalogg(

17、thiis,端口号号只能是是整数,错错误, JJOpttionnPanne.EERROOR_MMESSSAGEE);reeturrn;if(porrt6655335|porrt00)/断口号号不合法法,给出出提示信信息JOOptiionPPanee.shhowMMesssageeDiaalogg(thiis,端口号号只能是是0-6655335的整整数,错误误, JJOpttionnPanne.EERROOR_MMESSSAGEE);reeturrn;tryythhis.jbSStarrt.ssetEEnabbledd(faalsee);/将开开始按钮钮设为不不可用thhis.jtffPorrt

18、.ssetEEnabbledd(faalsee);/将用用于输入入端口号号的文本本框设为为不可用用thhis.jbSStopp.seetEnnablled(truue);/将将停止按按钮设为为可用sss=neew SServverSSockket(porrt);/创创建SeerveerSoockeet对象象stt=neew SServverTThreead(thiis);/创创建服务务器线程程stt.sttartt();/启启动服务务器线程程/给出服服务器启启动成功功的提示示信息JOOptiionPPanee.shhowMMesssageeDiaalogg(thiis,服务器器启动成成功,提示

19、示, JJOpttionnPanne.IINFOORMAATIOON_MMESSSAGEE);cattch(Exccepttionn eee)/给出服服务器启启动失败败的提示示信息JOOptiionPPanee.shhowMMesssageeDiaalogg(thiis,服务器器启动失失败,错误误, JJOpttionnPanne.EERROOR_MMESSSAGEE);thhis.jbSStarrt.ssetEEnabbledd(trrue);/将开始始按钮设设为可用用thhis.jtffPorrt.ssetEEnabbledd(trrue);/将用于于输入端端口号的的文本框框设为可可用th

20、his.jbSStopp.seetEnnablled(fallse);/将停止止按钮设设为不可可用publlic voiid jjbSttop_eveent()/单单击关关闭按按钮的业业务处理理代码tryyVeectoor vv=onnlinneLiist;innt ssizee=v.sizze();foor(intt i=0;iisiize;i+)/向在在线用户户发送离离线信息息SServverAAgenntThhreaad ttemppSatt=(SServverAAgenntThhreaad)vv.geet(ii);ttemppSatt.doout.wriiteUUTF();ttempp

21、Satt.fllag=fallse;/关关闭服务务器代理理线程stt.fllag=fallse;/关关闭服务务器线程程stt=nuull;sss.cllosee();/关关闭SeerveerSoockeetv.cleear();/将在在线用户户列表清清空reefreeshLListt();/刷刷新列表表thhis.jbbStaart.settEnaableed(ttruee);/将开开始按钮钮设为可可用 thiis.jjtfPPortt.seetEnnablled(truue);/将将用于输输入端口口号的文文本框设设为可用用 thhis.jbSStopp.seetEnnablled(falls

22、e);/将停止止按钮设设为不可可用cattch(Exccepttionn eee)eee.prrinttStaackTTracce();publlic voiid rrefrreshhLisst()/更更新在线线用户列列表的业业务处理理代码Vecctorr v=neww Vecctorr();intt siize=thiis.oonliineLListt.siize();forr(intt i=0;iisiize;i+)/遍历在在线列表表SeerveerAggenttThrreadd teempSSat=(SeerveerAggenttThrreadd)thhis.onllineeLisst.

23、gget(i);Sttrinng ttempps=ttemppSatt.scc.geetInnetAAddrresss().toSStriing();teempss=teempss+|+ttemppSatt.geetNaame();/获得得所需信信息v.addd(teempss);/添加加到Veectoor中thiis.jjlUsserOOnliine.settLisstDaata(v);/更更新列表表数据publlic staaticc voiid mmainn(Sttrinng aargss)neww Seerveer();说明:此服服务器端端类既为为服务器器的运行行类,用用户通过过该类进

24、进入服务务器的主主界面。进进行相应应的操作作。3.1.22 服务务器线程程设计/*服务器器线程*/imporrt javva.uutill.*;imporrt javaa.awwt.*;imporrt javva.aawt.eveent.*;imporrt javvax.swiing.*;imporrt javvax.swiing.eveent.*;imporrt jjavaa.neet.*;imporrt javva.iio.*;publiic claass SerrverrThrreadd exxtennds ThrreaddServver fattherr; /声明明Serrverr的引

25、用用ServverSSockket ss;/声声明SeerveerSoockeet的引引用boolleann fllag=truue;/线程程存在为为truuepubllic SerrverrThrreadd(Seerveer ffathher)/构构造器thiis.ffathher=fattherr;ss=fattherr.sss;/和服务务器端关关联publlic voiid rrun()whiile(flaag)/定义义一个死死循环。为为fallse时时跳出trrySSockket sc=ss.accceptt();/等等待客户户端连接接SServverAAgenntThhreaad s

26、sat=neww SeerveerAggenttThrreadd(faatheer,ssc);ssat.staart();/创建建并启动动服务器器代理线线程caatchh(Exxcepptioon ee)/tryy caatchh捕获异异常ee.prrinttStaackTTracce();/打印异异常,可可有可无无类功能说明明:服务务器线程程类在服服务器启启动后创创建并启启动的第第一个线线程,该该线程主主要用于于接收客客户端的的连接,并并为每一一个连接接分配一一个服务务器代理理线程。3.1.33 服务务器代理理线程设设计【部分代码码(过长长不适复复制完)】:/*服务器器代理线线程*/先想到到

27、需要用用什么函函数imporrt jjavaa.uttil.*;imporrt jjavaa.awwt.*;/界面包包imporrt jjavaa.awwt.eevennt.*;/事件处处理包imporrt jjavaax.sswinng.*;/图形化化界面包包imporrt jjavaax.sswinng.eevennt.*;/图形化化界面包包事件进进行处理理imporrt jjavaa.neet.*;/网络包包imporrt jjavaa.ioo.*;/IIO流publiic cclasss SServverAAgenntThhreaad eexteendss Thhreaad /同服服务

28、器类类一样Servver fattherr;/声明SServver的的引用Sockket sc;/声声明Soockeet的引引用。用用他来与与客户端端一一对对应。分分配给它它资源DataaInpputSStreeam dinn;/声明数数据输入入流与输输出流的的引用DataaOuttputtStrreamm doout;boolleann fllag=truue;/控制制线程的的标志位位publlic SerrverrAgeentTThreead(Serrverr faatheer,SSockket sc)thiis.ffathher=fattherr;thiis.ssc=ssc;tryydi

29、in=nnew DattaInnputtStrreamm(scc.geetInnputtStrreamm();/创建数数据输入入流doout=neww DaataOOutpputSStreeam(sc.gettOuttputtStrreamm();/创建数数据输出出流cattch(Exccepttionn e)e.priintSStacckTrracee();publlic voiid rrun()whiile(flaag)/线程程在存活活期。就就是死循循环。trrySStriing msgg=diin.rreaddUTFF().triim();/接收客客户端传传来的信信息iif(mmsg.s

30、taartssWitth()/收到新新用户的的信息thiis.nnickk_naame(msgg);eelsee iff(mssg.sstarrtsWWithh()/收到用用户离开开的信息息thiis.cclieent_leaave(msgg);eelsee iff(mssg.sstarrtsWWithh()/收到用用户发出出的挑战战信息thiis.ttiaoo_zhhan(msgg);eelsee iff(mssg.sstarrtsWWithh()/收到到接受挑挑战的信信息thiis.ttongg_yii(mssg);eelsee iff(mssg.sstarrtsWWithh()/收到拒拒

31、绝挑战战的信息息thiis.bbutoong_yi(msgg);eelsee iff(mssg.sstarrtsWWithh()/收到到被挑战战者忙的的信息thiis.bbusyy(mssg);eelsee iff(mssg.sstarrtsWWithh()/收到到走棋的的信息thiis.mmovee(mssg);eelsee iff(mssg.sstarrtsWWithh()/收到某某用户认认输的信信息thiis.rrensshu(msgg);caatchh(Exxcepptioon ee)ee.prrinttStaackTTracce();publlic voiid nnickk_naam

32、e(Strringg mssg)tryySttrinng nnamee=mssg.ssubsstriing(13);/获得用用户的昵昵称thhis.settNamme(nnamee);/用该该昵称给给该线程程取名Veectoor vv=faatheer.oonliineLListt;/获得在在线用户户列表boooleean isCChonngMiing=fallse;innt ssizee=v.sizze();/获得用用户列表表的大小小foor(iint i=00;isizze;ii+)/遍历历列表,查查看是否否已经有有该用户户名SServverAAgenntThhreaad ttemppSa

33、tt=(SServverAAgenntThhreaad)vv.geet(ii);iif(ttemppSatt.geetNaame().eequaals(namme)isCChonngMiing=truue;/有重重名,将将标志位位设为ttrueebreeak;iff(issChoongMMingg=ttruee)/如果重重名ddoutt.wrriteeUTFF();/将重重名信息息发送给给客户端端ddin.cloose();/关闭闭数据输输入流ddoutt.cllosee();/关关闭数据据输出流流ssc.cclosse();/关闭SSockketfflagg=faalsee;/终止该该服务器

34、器代理线线程ellse/如果果不重名名vv.addd(tthiss);/将该该线程添添加到在在线列表表ffathher.reffresshLiist();/刷新新服务器器在线信信息列表表SStriing nicckLiistMMsg=;ssizee=v.sizze();/获得在在线列表表大小ffor(intt i=0;iisiize;i+)SerrverrAgeentTThreead temmpSaat=(SerrverrAgeentTThreead)v.gget(i);nicckLiistMMsg=nicckLiistMMsg+|+teempSSat.gettNamme();/将将在线列列表

35、内容容住组织织成字符符串nnickkLisstMssg=+nicckLiistMMsg;VVecttor temmpv=fattherr.onnlinneLiist;ssizee=teempvv.siize();ffor(intt i=0;iisiize;i+)/遍遍历在线线列表SerrverrAgeentTThreead sattTemmp=(SerrverrAgeentTThreead)temmpv.gett(i);sattTemmp.ddoutt.wrriteeUTFF(niickLListtMsgg);/将最最新的列列表信息息发送到到各个客客户端if(sattTemmp!=thiis)

36、/给其他他客户端端发送新新用户上上线的信信息sattTemmp.ddoutt.wrriteeUTFF(+tthiss.geetNaame()+上线了了.);cattch(IOEExceeptiion e)e.priintSStacckTrracee();服务器代理理线程类类功能及及实现:服务器器代理线线程主要要是用于于接收客客户端传传来的信信息,并并将该信信息转发发给相对对应的另另一个客客户端。服服务器为为所有客客户端都都分配了了一个该该类线程程,单独独为特定定客户端端进行服服务。同同时每一一个服务务器代理理线程都都有能位位移标示示其的名名称3.1.44 棋子子的开发发类设计计imporrt

37、jjavaa.uttil.*;imporrt jjavaa.awwt.*;imporrt jjavaax.sswinng.*;publiic cclasss QQiZii/定定义棋子子的属性性privvatee Coolorr coolorr;/棋子的的颜色privvatee Sttrinng nnamee;/棋子的的名字,即即是什么么棋privvatee innt xx;/所在的的x方向向位置将用二二维数组组实现privvatee innt yy;/所在的的y方向向位置 将 用二维维数组实实现privvatee boooleean foccus=fallse;/是是否被选选中,以以至于只只能选一一子走publlic QiZZi()/无无参函数数publlic QiZZi(CColoor ccoloor,SStriing namme,iint x,iint y)/颜色色,名字字,坐标标/构构造器thiis.ccoloor=ccoloor;thiis.nnamee=naame;thiis.xx=x;thiis.yy=y;thiis.ffocuus=ffalsse;/为未未选中状状态publlic Collor gettCollor()/获得棋棋子颜色色的方法法r

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文献 > 商业计划书

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁