java课程设计报告实验报告-自娱自乐五子棋.doc

上传人:夺命阿水 文档编号:9393 上传时间:2022-06-23 格式:DOC 页数:26 大小:133.77KB
返回 下载 相关 举报
java课程设计报告实验报告-自娱自乐五子棋.doc_第1页
第1页 / 共26页
java课程设计报告实验报告-自娱自乐五子棋.doc_第2页
第2页 / 共26页
java课程设计报告实验报告-自娱自乐五子棋.doc_第3页
第3页 / 共26页
java课程设计报告实验报告-自娱自乐五子棋.doc_第4页
第4页 / 共26页
java课程设计报告实验报告-自娱自乐五子棋.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《java课程设计报告实验报告-自娱自乐五子棋.doc》由会员分享,可在线阅读,更多相关《java课程设计报告实验报告-自娱自乐五子棋.doc(26页珍藏版)》请在课桌文档上搜索。

1、-Java课程设计说明书 -五子棋小游戏目录1课程设计的目的3课程设计思路3(1)棋盘界面设计3(2)算法设计3(3)五子棋规则3程序流程图3程序的设计方法3程序中主要方法的说明3程序中类及成员变量的说明3主要成员变量属性3java源文件及其功能3五子棋游戏中的注册监听3游戏整体设计3(1)五子棋的游戏主界面3(2)机器人局部的设计3(3)五子棋面板的设计3设计结果与分析3设计体会3参考文献3附录:程序源代码3. z.-课程设计的目的学习任何知识得目的都是要将它运用到实践中去,所以我们要运用已有的知识,独立得将这个课程设计完成,只有这样,我们才能将知识变本钱领,变成属于自己得东西,通过一个学习

2、得学习,我们已经有可一定得Java根底,现在我们就要利用这些根底,来完成课程设计。这次课程设计我主要研究了利用已学的Java知识编辑一个五子棋小游戏。通过此次课程设计,来稳固所学Java语言根本知识,增进Java语言编辑根本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用。课程设计思路(1)棋盘界面设计在对棋盘界面设计方面要考虑简洁友好,符合游戏者需求。棋子的设计方面系统中设置了两种棋子颜色,yellow或者red,游戏者可自行选择。棋子怎样画出来,怎样使棋子按我们所想的方式来绘制出来是设计的主要难题。运行时要求当每次点击鼠标的时候就在点击鼠标的地方画一个棋子,所以得定义一

3、个棋子的类使点击鼠标时系统把棋子绘制出来。这样主界面里的棋子就确定了,而且也确定了几个所需要的类。可以先定义好这些类了。有了以上的准备就可以把棋盘绘制出来了,下棋时每次在适当位置点击鼠标的时候就在所点击的位置上画出你这个角色的颜色,然后计算时机自动的下棋,计算机自动下棋要有一个控制变量来控制能不能下棋。人可以随意的下子,可是计算机就要计算在哪个位置下子了。这里由计算机下子的算法来确定,人人对战的话就不象单机游戏一样,要计算机来判断人下子之后计算机下那一个地方了,人人对战只要在双方下子的时候判断赢棋情况,当然还要同步的控制两个人下棋的顺序,这样的话就要用到线程了,各自都继承或实现线程类或接口,以

4、便各自能随时单独控制接发消息。(2)算法设计对于五子棋游戏,无论人机对战,还是双人对战,都需要判断棋盘上是否存在五子连珠情况,这既是游戏名字的由来,也是游戏完毕的标志。判断五子连珠的原理是从横,竖,左斜线,右斜线4条线上判断是否存在5个相连的同类棋子。对战一方落子后,在该处向8个方向检测连续的同类棋子,如果检测到直线方向上存在5个连续的同类棋子包含本位置棋子,则判断为“连五并完毕检测循环。基于检测结果,可以判断游戏是否完毕,并根据获胜方的落子代码判断获胜方是谁。由于不考虑禁手问题,在实现“连五过程中,我们可以考虑完成“双四,“四三,“双三,“冲四,“活三,“活四来实现目的。(3)五子棋规则1本

5、游戏可选择人与人对战模式。2下法:两人分别执黑白两色棋子,轮流在棋盘上选择一个无子的穿插点落子,无子的穿插点又被称为空点。3输赢判断:黑、白双方有一方的五个棋子在横、竖或斜方向上连接成一线即为该方赢。程序流程图开场初始化主控制黑方白方白方下子黑方下子判断胜负完毕胜利未分出胜利程序的设计方法程序中主要方法的说明1. ChessPad()的返回类型是初始化棋盘,功能是设置棋盘颜色。2. Voidpaint(Graphicsg)的返回类型是对棋子等图像进展初始化,功能是设置棋子大小,颜色等。3. PublicvoidmousePressed(MouseEvente)的返回类型是鼠标的实践监听,功能是

6、单击实践。4. publicvoidpaint(Graphicsg)的返回类型是画出图像,功能是控制图像的大小围。5. publicvoidmousePressed(MouseEvente)的返回类型是处理按下鼠标的事件,功能是选中下棋的位置。6. publicvoidmouseReleased(MouseEvente)的返回类型是处理鼠标离开的事件,功能是本步下棋完毕。7. publicvoidmouseE*ited(MouseEvente)的返回类型处理鼠标离开棋盘时,功能是鼠标离开组件不实现任何事件。8. publicvoidmouseClicked(MouseEvente)的返回类型是

7、处理发生单击的事件,功能是实现下棋以及重新开场游戏。程序中类及成员变量的说明类表及其子类父类1. ChessFrame类的作用是创立五子棋游戏主窗体和菜单,父类是JFrame。2. ChessModel类的作用是实现了整个五子棋程序算法的核心。3. MainPanel类的作用是构建一个面板,在该面板上画上棋盘;处理在该棋盘上的鼠标事件如鼠标左键点击、鼠标右键点击、鼠标拖动等,父类是JPanel。4. ChessWindowEvent类的作用是事件响应,父类是WindowAdapter。主要成员变量属性1. Int i 的描述是控制棋子颜色。2. Button Button 的描述是重新开局。3

8、. Te*tField te*t_1 的描述是请黑棋下子4. Te*tField te*t_2 的描述是请白棋下子。5. Te*tField te*t_3 的描述是这是第+i+步。java源文件及其功能1. Chess的功能是本程序的主函数,初始化棋盘。2. Autoplay的功能是实现电脑可以自动下棋。3. Scan的功能是扫描整个棋盘记录连在一起的黑白棋子数,为判断胜负效劳。4. Sort的功能是实现人与电脑有次序的下棋。5. Judge的功能是判断人与人之间的胜负。6. Evaluate的功能是电脑估计,为电脑下棋提供帮助。五子棋游戏中的注册监听1.对角色选择按钮注册ActionList

9、ener监听,设置用户的角色。定义黑子int类型0,白子1。2.对按钮开场、重置注册ActionListener监听,如果点击开场,用户进入下棋状态,有一方赢了,棋盘上则不能再点击棋子。点击重置,则开场新的一轮。3.对鼠标注册mouseClicked监听,鼠标点击棋盘时获取下棋的位置。4.classServerThreadimplementsRunnable类监听线程,监听是否有客户端法过信息来。1属性:Vectorthreads向量存储线程,Socketsocket效劳端口,DataInputStreamin输入流,DataOutputStreamout输出流,intnid用户ID。2方法:

10、构造器publicServerThread(Socketsocket,Vectorthreads),实现信息的输入、输出,和publicvoidrun()监听客户端是否发信息过来,当客户离开时向,其他客户发信息,把客户端的信息发给其他客户。游戏整体设计(1)五子棋的游戏主界面五子棋主界面包括ChessBot.java,ChessMap.java,ChessPanel.java和Console.java四个文件。ChessMap是该五子棋游戏的主运行类,其中有运行整个程序的main方法,该文件生成了ChessMap类的一个实例,从而生成了五子棋游戏的界面ChessMap类将所有的功能集中到菜单栏

11、中,并通过调用其他模块来实现五子棋游戏的各个功能。(2)机器人局部的设计机器人局部的设计是由ChessBot.java类来实现的。该java类首先导入了三个函数,分别是math,lang和awt。该程序定义了棋盘的边长,棋盘的边长通过定义一个私有的int型变量来实现。将机器人定义成一个方法,通过0和1来确定按下的棋子是机器人自己下的,还是敌人的棋子。该ChessBot类中还包括了重开一局的方法,该方法通过for循环语句来实现,即重置棋子。另外一个方法是悔棋,悔棋同样是通过for语句循环来实现,首先通过二维数组算出最后一步棋下的位置,然后通过Step-实现。最后一个方法是计算当前位置type方是

12、否有nn子相连,相连的情况。当横向五子连珠,纵向五子连珠,左斜线五子连珠或者是右斜线五子连珠时,比赛完毕,同时显示出获胜方的棋子颜色。四种方向的连珠用for循环语句分别写出其二维数组也就是棋子的位置,从而进展判断棋子有几个棋子相连。使用endfor语句完毕for循环,利用return语句,重复判断棋子的位置以及是否连珠。(3)五子棋面板的设计首先导入awt等java包。ChessPanel继承JPanel的属性类。定义一系列的私有变量,如棋盘的背景位图,黑棋子的位图,白棋子的位图,以及插入棋子的位置。该java包还调用了重开一局的方法,以及悔棋的方法。publicvoidshowMousePo

13、s(Pointp)是用来调试用,显示鼠标位置。publicPointaddChess(int*,inty,inttype)是调试下一步棋,参数为插入点像素坐标。publicPointaddChess(int*,inty,inttype,booleanisMatri*)实现的功能是算下一步棋,isMatri*位true参数为插入点棋格坐标,否则参数为插入点像素坐标。当游戏完毕的时候使用Graphicsg调用方法,在游戏过程中如果是黑方或是白方获胜在棋盘中就会显示是哪方获胜。设计结果与分析当进入到游戏当中可以选择是哪个颜色的棋先出,选择好之后便可以单机开场进展下棋,如果在游戏过程中出现什么问题可以

14、单机再来一局重新开场游。五子棋游戏的主界面如下图:设计体会通过这次课程设计,我进一步加深对根底理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。同时我渐渐的复习了Java使用方法和编程语法,之后的编程过程也相对得心应手,根本完成了预期方案的要求。在此感谢我的指导教师原玥教师,她在课题的研究上不遗余力的给予指导。她严谨的治学态度深深的影响了我,使我受益匪浅!这个课设题对我来说有一定的挑战性,因为我自己也不知道自己到底学到了一个什么样的境界。但可以肯定,这个课设题的要求绝对在我的能力围以上。之所以选择这个题目是想逼着自己去查更多的资

15、料,学到更多的东西。结果也确实是这样的,我在这次课设中学到了不少东西,也理解了许多原来不理解的东西。尽管这个系统做的并不是则的完善。对于Java中的引用,初始化类等,开场我并不是非常的理解,知道就这么做就能实现相应的功能了,并没有很深刻的去理解它为什么要这么做。但是真正的要用Java去做一个东西不理解它是不行的,而且其间这课设涉及到了Java中的绝大多数的知识点,如Java图形用户界面设计、Java中的多线程程序设计、Java输入输出流,要应用这些东西更要求我去好好理解Java的这些规则。经过了长时间的反复编写调试,课本和网上查阅相关资料相关文章,终于完成了整个课程设计。在这个过程中,在把书本

16、上的知识给系统的复习了一下的同时,同时也发现了自己的太多缺乏,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。在这次课程设计中,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的构造,编程者更要有严谨地态度。还有通过设计过程量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题参考文献1国君,磊,洋.Java2程序设计根底M北京:清华大学出版社20092埃史尔,昊鹏.Java编程思

17、想(第4版)M.北京:机械工业出版社20073钟尉,马文强,丹丹.Java从入门到精通M.北京:清华大学出版社20084Y.DanielLiang,万波,海红,潘蓉.Java语言程序设计:根底篇原书第6版M.北京:机械工业出版社20085IanF.Darwin,关丽荣,晓坤.Java经典实例第2版M.北京:中国电力出版社20096丁振凡.Java语言实用教程M.北京:北京邮电大学出版社20057广彬,孟红蕊,永宝.Java课程设计案例精编M.北京:清华大学出版社2005附录:程序源代码import java.awt.Checkbo*;import java.awt.Checkbo*Group;

18、 import java.awt.Color;import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent; import java.awt.event.ItemListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java*.swing.JB

19、utton;import;import java*.swing.JFrame;import java*.swing.JPanel; publicclass FivChese e*tends JFrame /* * */privatestaticfinallongserialVersionUID = 1L; CheseGame CG; FivChese () this.CG= new CheseGame(); addMouseListener(CG); add(CG); publicstaticvoid main(String args) FivChese fivechese= new FivC

20、hese (); fivechese.setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE); fivechese.setSize(900, 900); fivechese.setTitle(雷晓设计的五子棋); fivechese.setVisible(true); fivechese.setResizable(true); class CheseGame e*tends JPanel implements MouseListener,ItemListener /* * */privatestaticfinallongserialVersionUID =

21、 1L;int map = newint2020; Colorcolor=Color.BLACK,Color.WHITE,Color.LIGHT_GRAY; /棋子坐标int* = -1; inty = -1; /判定是白棋还是黑棋intflag = 1; /判定胜负intwinner = 3; JButton btn1 = new JButton(开场); /游戏开场 JButton btn2 = new JButton(再来一局);/游戏重置inti; intj;/确定白棋先还是黑棋先 Checkbo*Group cbg = new Checkbo*Group(); Checkbo* ch

22、b1 = new Checkbo*(黑棋先开场,cbg,true); Checkbo* chb2 = new Checkbo*(白棋先开场,cbg,false); Overridepublicvoid itemStateChanged(ItemEvent ie) / throw new UnsupportedOperationE*ception(Not supported yet.); if(chb1.getState() flag = 1; else flag = 2; class GameStart implements ActionListener publicvoid actionPe

23、rformed(ActionEvent ae) if(ae.getSource() = btn1) /str.equals(Start) start(); repaint(); btn1.setEnabled(false); btn2.setEnabled(true); chb1.setEnabled(false); chb2.setEnabled(false); if(ae.getSource() = btn2) start(); repaint(); chb1.setEnabled(true); chb2.setEnabled(true); CheseGame() this.setLayo

24、ut(null); chb1.setBounds(650, 50, 100, 30); chb2.setBounds(650, 100, 100, 30); chb1.addItemListener(this); chb2.addItemListener(this); btn1.setBounds(650,150,100,30); btn1.addActionListener(new GameStart(); btn2.setBounds(650, 200, 100, 30); btn2.addActionListener(new GameStart(); btn2.setEnabled(fa

25、lse); this.add(btn1); this.add(btn2); this.add(chb1); this.add(chb2); void start() for(inti = 0;i 20;i+) for(intj = 0;j 20;j+) mapij = 0; winner = 0; Boolean win(int*,inty) intscore = 1; for(inti = *;i *-4;)/横向*- if(i = 0) break; if(mapiy != map-iy) break; score+; if(score = 5) returntrue; elsescore

26、 = 1; for(intj = y; j y-4;)/纵向y- if(j = 0) break; if(map*j != map*-j) break; score+; if(score = 5) returntrue; elsescore = 1; for(inti = *;i *+4;)/斜向*+、y+ for(intj = y;j *-4;)/斜向*-、y- for(intj = y;j y-4;) if(i = 0|j=0) i = *-4; break; if(mapij != map-i-j) i = *-4; break; score+; if(score = 5) return

27、true; elsescore = 1; for(inti = *;i *-4;)/斜向*-、y+ for(intj = y;j y+4;) if(i=0 | j=19) i = *-4;break; if(mapij != map-i+j) i = *-4; break; score+; for(inti = *;i y-4;) if(i=19|j=0) i = *+4;break; if(mapij != map+i-j) i = * + 4; break; score+; if(score = 5) returntrue; elsereturnfalse; publicvoid pain

28、tComponent(Graphics g) super.paintComponent(g); setBackground(color2); /画棋盘for(inti = 1;i = 20;i+) g.setColor(color0); g.drawLine(30, i*30 ,600 , i*30); g.drawLine(i*30,30, i*30, 600); /画棋子for(inti = 0;i 20;i+) for(intj = 0;j =0&*=0&y=19) if(flag = 1&map*y = 0) map*y = 1; if(win(*,y)winner = 1; flag

29、 = 2; elseif(flag = 2&map*y = 0) map*y = 2; if(win(*,y) winner = 2; flag = 1; repaint(); Overridepublicvoid mouseReleased(MouseEvent me) / throw new UnsupportedOperationE*ception(Not supported yet.); Overridepublicvoid mouseEntered(MouseEvent me) / throw new UnsupportedOperationE*ception(Not supported yet.); Overridepublicvoid mouseE*ited(MouseEvent me) / throw new UnsupportedOperationE*ception(Not supported yet.); . z.

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

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号