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

上传人:叶*** 文档编号:35170096 上传时间:2022-08-20 格式:DOCX 页数:23 大小:32.11KB
返回 下载 相关 举报
java课程设计实验报告自娱自乐五子棋.docx_第1页
第1页 / 共23页
java课程设计实验报告自娱自乐五子棋.docx_第2页
第2页 / 共23页
点击查看更多>>
资源描述

《java课程设计实验报告自娱自乐五子棋.docx》由会员分享,可在线阅读,更多相关《java课程设计实验报告自娱自乐五子棋.docx(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Java课程设计说明书 -五子棋小游戏 院 系; 管理学院 专业班级: 信管151 学生学号: 2 学生姓名: 雷晓 指导教师: 伍良启 日 期 2017.01.05 成 绩: 指导老师签名: 批改日期: 目录1课程设计的目的3课程设计思路3(1)棋盘界面设计3(2)算法设计3(3)五子棋规则4程序流程图4程序的设计方法5程序中主要方法的说明5程序中类及成员变量的说明5主要成员变量(属性)6java源文件及其功能6五子棋游戏中的注册监听6游戏整体设计7(1)五子棋的游戏主界面7(2)机器人部分的设计7(3)五子棋面板的设计7设计结果与分析8设计体会8参考文献9附录:程序源代码10课程设计的目的

2、学习任何知识得目的都是要将它运用到实践中去,所以我们要运用已有的知识,独立得将这个课程设计完成,只有这样,我们才能将知识变成本领,变成属于自己得东西,通过一个学习得学习,我们已经有可一定得Java基础,现在我们就要利用这些基础,来完成课程设计。这次课程设计我主要研究了利用已学的Java知识编辑一个五子棋小游戏。通过此次课程设计,来巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用。课程设计思路(1)棋盘界面设计在对棋盘界面设计方面要考虑简洁友好,符合游戏者需求。棋子的设计方面系统中设置了两种棋子颜色,yellow或者red

3、,游戏者可自行选择。棋子怎样画出来,怎样使棋子按我们所想的方式来绘制出来是设计的主要难题。运行时要求当每次点击鼠标的时候就在点击鼠标的地方画一个棋子,所以得定义一个棋子的类使点击鼠标时系统把棋子绘制出来。这样主界面里的棋子就确定了,而且也确定了几个所需要的类。可以先定义好这些类了。有了以上的准备就可以把棋盘绘制出来了,下棋时每次在适当位置点击鼠标的时候就在所点击的位置上画出你这个角色的颜色,然后计算机会自动的下棋,计算机自动下棋要有一个控制变量来控制能不能下棋。人可以随意的下子,可是计算机就要计算在哪个位置下子了。这里由计算机下子的算法来确定,人人对战的话就不象单机游戏一样,要计算机来判断人下

4、子之后计算机下那一个地方了,人人对战只要在双方下子的时候判断赢棋情况,当然还要同步的控制两个人下棋的顺序,这样的话就要用到线程了,各自都继承或实现线程类或接口,以便各自能随时单独控制接发消息。(2)算法设计对于五子棋游戏,无论人机对战,还是双人对战,都需要判断棋盘上是否存在五子连珠情况,这既是游戏名字的由来,也是游戏结束的标志。判断五子连珠的原理是从横,竖,左斜线,右斜线4条线上判断是否存在5个相连的同类棋子。对战一方落子后,在该处向8个方向检测连续的同类棋子,如果检测到直线方向上存在5个连续的同类棋子(包含本位置棋子),则判断为“连五”并结束检测循环。基于检测结果,可以判断游戏是否结束,并根

5、据获胜方的落子代码判断获胜方是谁。由于不考虑禁手问题,在实现“连五”过程中,我们可以考虑完成“双四”,“四三”,“双三”,“冲四”,“活三”,“活四”来实现目的。(3)五子棋规则(1)本游戏可选择人与人对战模式。(2)下法:两人分别执黑白两色棋子,轮流在棋盘上选择一个无子的交叉点落子,无子的交叉点又被称为空点。(3)输赢判断:黑、白双方有一方的五个棋子在横、竖或斜方向上连接成一线即为该方赢。程序流程图开始初始化主控制黑方 白方白方下子黑方下子判断胜负结束胜利 未分出胜利 程序的设计方法程序中主要方法的说明1. ChessPad()的返回类型是初始化棋盘,功能是设置棋盘颜色。2. Voidpai

6、nt(Graphicsg)的返回类型是对棋子等图像进行初始化,功能是设置棋子大小,颜色等。3. PublicvoidmousePressed(MouseEvente)的返回类型是鼠标的实践监听,功能是单击实践。4. publicvoidpaint(Graphicsg)的返回类型是画出图像,功能是控制图像的大小范围。5. publicvoidmousePressed(MouseEvente)的返回类型是处理按下鼠标的事件,功能是选中下棋的位置。6. publicvoidmouseReleased(MouseEvente)的返回类型是处理鼠标离开的事件,功能是本步下棋结束。7. publicvoi

7、dmouseExited(MouseEvente)的返回类型处理鼠标离开棋盘时,功能是鼠标离开组件不实现任何事件。8. publicvoidmouseClicked(MouseEvente)的返回类型是处理发生单击的事件,功能是实现下棋以及重新开始游戏。程序中类及成员变量的说明类表及其子类父类1. ChessFrame类的作用是创建五子棋游戏主窗体和菜单,父类是JFrame。2. ChessModel类的作用是实现了整个五子棋程序算法的核心。3. MainPanel类的作用是构建一个面板,在该面板上画上棋盘;处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等),父类是JPane

8、l。4. ChessWindowEvent类的作用是事件响应,父类是WindowAdapter。主要成员变量(属性)1. Int i 的描述是控制棋子颜色。2. Button Button 的描述是重新开局。3. TextField text_1 的描述是请黑棋下子4. TextField text_2 的描述是请白棋下子。5. TextField text_3 的描述是这是第+i+步。java源文件及其功能1. Chess的功能是本程序的主函数,初始化棋盘。2. Autoplay的功能是实现电脑可以自动下棋。3. Scan的功能是扫描整个棋盘记录连在一起的黑白棋子数,为判断胜负服务。4. S

9、ort的功能是实现人与电脑有次序的下棋。5. Judge的功能是判断人与人之间的胜负。6. Evaluate的功能是电脑估计,为电脑下棋提供帮助。 五子棋游戏中的注册监听1.对角色选择按钮注册ActionListener监听,设置用户的角色。定义黑子int类型0,白子1。2.对按钮开始、重置注册ActionListener监听,如果点击开始,用户进入下棋状态,有一方赢了,棋盘上则不能再点击棋子。点击重置,则开始新的一轮。3.对鼠标注册mouseClicked监听,鼠标点击棋盘时获取下棋的位置。4.classServerThreadimplementsRunnable类监听线程,监听是否有客户端

10、法过信息来。(1)属性:Vectorthreads向量存储线程,Socketsocket服务端口,DataInputStreamin输入流,DataOutputStreamout输出流,intnid用户ID。(2)方法:构造器publicServerThread(Socketsocket,Vectorthreads),实现信息的输入、输出,和publicvoidrun()监听客户端是否发信息过来,当客户离开时向,其他客户发信息,把客户端的信息发给其他客户。游戏整体设计(1)五子棋的游戏主界面五子棋主界面包括ChessBot.java,ChessMap.java,ChessPanel.java和

11、Console.java四个文件。ChessMap是该五子棋游戏的主运行类,其中有运行整个程序的main方法,该文件生成了ChessMap类的一个实例,从而生成了五子棋游戏的界面ChessMap类将所有的功能集中到菜单栏中,并通过调用其他模块来实现五子棋游戏的各个功能。(2)机器人部分的设计机器人部分的设计是由ChessBot.java类来实现的。该java类首先导入了三个函数,分别是math,lang和awt。该程序定义了棋盘的边长,棋盘的边长通过定义一个私有的int型变量来实现。将机器人定义成一个方法,通过0和1来确定按下的棋子是机器人自己下的,还是敌人的棋子。该ChessBot类中还包括

12、了重开一局的方法,该方法通过for循环语句来实现,即重置棋子。另外一个方法是悔棋,悔棋同样是通过for语句循环来实现,首先通过二维数组算出最后一步棋下的位置,然后通过Step-实现。最后一个方法是计算当前位置type方是否有nn子相连,相连的情况。当横向五子连珠,纵向五子连珠,左斜线五子连珠或者是右斜线五子连珠时,比赛结束,同时显示出获胜方的棋子颜色。四种方向的连珠用for循环语句分别写出其二维数组也就是棋子的位置,从而进行判断棋子有几个棋子相连。使用endfor语句结束for循环,利用return语句,重复判断棋子的位置以及是否连珠。(3)五子棋面板的设计首先导入awt等java包。Ches

13、sPanel继承JPanel的属性类。定义一系列的私有变量,如棋盘的背景位图,黑棋子的位图,白棋子的位图,以及插入棋子的位置。该java包还调用了重开一局的方法,以及悔棋的方法。publicvoidshowMousePos(Pointp)是用来调试用,显示鼠标位置。publicPointaddChess(intx,inty,inttype)是调试下一步棋,参数为插入点像素坐标。publicPointaddChess(intx,inty,inttype,booleanisMatrix)实现的功能是算下一步棋,isMatrix位true参数为插入点棋格坐标,否则参数为插入点像素坐标。当游戏结束的时

14、候使用Graphicsg调用方法,在游戏过程中如果是黑方或是白方获胜在棋盘中就会显示是哪方获胜。设计结果与分析当进入到游戏当中可以选择是哪个颜色的棋先出,选择好之后便可以单机开始进行下棋,如果在游戏过程中出现什么问题可以单机再来一局重新开始游。五子棋游戏的主界面如图所示:设计体会通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。同时我渐渐的复习了Java使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。在此感谢我的指导老师原玥老师,她在课题的研究上不遗余力的给予指导。

15、她严谨的治学态度深深的影响了我,使我受益匪浅!这个课设题对我来说有一定的挑战性,因为我自己也不知道自己到底学到了一个什么样的境界。但可以肯定,这个课设题的要求绝对在我的能力范围以上。之所以选择这个题目是想逼着自己去查更多的资料,学到更多的东西。结果也确实是这样的,我在这次课设中学到了不少东西,也理解了许多原来不理解的东西。尽管这个系统做的并不是那么的完善。对于Java中的引用,初始化类等,开始我并不是非常的理解,知道就这么做就能实现相应的功能了,并没有很深刻的去理解它为什么要这么做。但是真正的要用Java去做一个东西不理解它是不行的,而且其间这课设涉及到了Java中的绝大多数的知识点,如Jav

16、a图形用户界面设计、Java中的多线程程序设计、Java输入输出流,要应用这些东西更要求我去好好理解Java的这些规则。经过了长时间的反复编写调试,课本和网上查阅相关资料相关文章,终于完成了整个课程设计。在这个过程中,在把书本上的知识给系统的复习了一下的同时,同时也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。在这次课程设计中,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更

17、要注重程序代码的结构,编程者更要有严谨地态度。还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题参考文献1陈国君,陈磊,刘洋.Java2程序设计基础M北京:清华大学出版社20092埃史尔,陈昊鹏.Java编程思想(第4版)M.北京:机械工业出版社20073李钟尉,马文强,陈丹丹.Java从入门到精通M.北京:清华大学出版社20084Y.DanielLiang,万波,郑海红,潘蓉.Java语言程序设计:基础篇(原书第6版)M.北京:机械工业出版社20085IanF.Darwin,关丽荣,张晓坤.Java经典实例(第2版)M.北京:中国电力出版社20096丁振凡.Jav

18、a语言实用教程M.北京:北京邮电大学出版社20057张广彬,孟红蕊,张永宝.Java课程设计案例精编M.北京:清华大学出版社2005附录:程序源代码import java.awt.Checkbox;import java.awt.CheckboxGroup; 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.ItemEve

19、nt; import java.awt.event.ItemListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JFrame;import javax.swing.JPanel; public class FivChese extends JFrame private static final long serialVersionUID = 1

20、L; CheseGame CG; FivChese () this.CG= new CheseGame(); addMouseListener(CG); add(CG); public static void main(String args) FivChese fivechese= new FivChese (); fivechese.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fivechese.setSize(900, 900); fivechese.setTitle(雷晓设计的五子棋); fivechese.setVisible(tr

21、ue); fivechese.setResizable(true); class CheseGame extends JPanel implements MouseListener,ItemListener private static final long serialVersionUID = 1L;int map = new int2020; Colorcolor=Color.BLACK,Color.WHITE,Color.LIGHT_GRAY; /棋子坐标 int x = -1; int y = -1; /判定是白棋还是黑棋 int flag = 1; /判定胜负 int winner

22、= 3; JButton btn1 = new JButton(开始); /游戏开始 JButton btn2 = new JButton(再来一局);/游戏重置 int i; int j; /确定白棋先还是黑棋先 CheckboxGroup cbg = new CheckboxGroup(); Checkbox chb1 = new Checkbox(黑棋先开始,cbg,true); Checkbox chb2 = new Checkbox(白棋先开始,cbg,false); Override public void itemStateChanged(ItemEvent ie) / thro

23、w new UnsupportedOperationException(Not supported yet.); if(chb1.getState() flag = 1; else flag = 2; class GameStart implements ActionListener public void actionPerformed(ActionEvent ae) if(ae.getSource() = btn1) /str.equals(Start) start(); repaint(); btn1.setEnabled(false); btn2.setEnabled(true); c

24、hb1.setEnabled(false); chb2.setEnabled(false); if(ae.getSource() = btn2) start(); repaint(); chb1.setEnabled(true); chb2.setEnabled(true); CheseGame() this.setLayout(null); chb1.setBounds(650, 50, 100, 30); chb2.setBounds(650, 100, 100, 30); chb1.addItemListener(this); chb2.addItemListener(this); bt

25、n1.setBounds(650,150,100,30); btn1.addActionListener(new GameStart(); btn2.setBounds(650, 200, 100, 30); btn2.addActionListener(new GameStart(); btn2.setEnabled(false); this.add(btn1); this.add(btn2); this.add(chb1); this.add(chb2); void start() for(int i = 0;i 20;i+) for(int j = 0;j 20;j+) mapij =

26、0; winner = 0; Boolean win(int x,int y) int score = 1; for(int i = x;i x-4;)/横向x- if(i = 0) break; if(mapiy != map-iy) break; score+; if(score = 5) return true; else score = 1; for(int j = y; j y-4;)/纵向y- if(j = 0) break; if(mapxj != mapx-j) break; score+; if(score = 5) return true; else score = 1;

27、for(int i = x;i x+4;)/斜向x+、y+ for(int j = y;j x-4;)/斜向x-、y- for(int j = y;j y-4;) if(i = 0|j=0) i = x-4; break; if(mapij != map-i-j) i = x-4; break; score+; if(score = 5) return true; else score = 1; for(int i = x;i x-4;)/斜向x-、y+ for(int j = y;j y+4;) if(i=0 | j=19) i = x-4; break; if(mapij != map-i

28、+j) i = x-4; break; score+; for(int i = x;i y-4;) if(i=19|j=0) i = x+4;break; if(mapij != map+i-j) i = x + 4; break; score+; if(score = 5) return true; else return false; public void paintComponent(Graphics g) super.paintComponent(g); setBackground(color2); /画棋盘 for(int i = 1;i = 20;i+) g.setColor(c

29、olor0); g.drawLine(30, i*30 ,600 , i*30); g.drawLine(i*30,30, i*30, 600); /画棋子 for(int i = 0;i 20;i+) for(int j = 0;j =0&x=0&y=19) if(flag = 1&mapxy = 0) mapxy = 1; if(win(x,y) winner = 1; flag = 2; else if(flag = 2&mapxy = 0) mapxy = 2; if(win(x,y) winner = 2; flag = 1; repaint(); Override public v

30、oid mouseReleased(MouseEvent me) / throw new UnsupportedOperationException(Not supported yet.); Override public void mouseEntered(MouseEvent me) / throw new UnsupportedOperationException(Not supported yet.); Override public void mouseExited(MouseEvent me) / throw new UnsupportedOperationException(Not supported yet.);

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

当前位置:首页 > 教育专区 > 高中资料

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

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