ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:254.64KB ,
资源ID:12576749      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12576749.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(java五子棋的设计与实现.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

java五子棋的设计与实现.docx

1、java五子棋的设计与实现安阳工学院JAVA课程综合项目报告项目题目:五子棋专业班级:学生姓名:学生学号:指导教师姓名:2012年6月安阳工学院计算机学院制目 录一、 系统目标 11.1系统使用范围要求 11.2 功能要求 11.3 性能需求 1二、系统设计思路 22.1界面棋盘设计 22.2算法设计 2三、系统详细设计 33.1工作原理图 33.2类图 43.3具体类方法介绍 5四、系统实现 12五、系统设计总结 16六、参考文献 17五子棋一、 系统目标 1.1系统使用范围要求 此系统为智力游戏,适合于各类游戏爱好者。由于其经典性及其游戏的简单性,各类人士都可以也都爱玩。人们在与电脑对战享

2、受娱乐的同时,也会体会到自己的智力也会有所提升。 1.2 功能要求 该款游戏主要由一下几个模块组成: (1)人机对弈模式:选择该模式可以实现人与电脑之间的对弈,电脑会智能的选择该在哪处下子,并会在每次下棋结束后判断是否有哪方已经获胜,如果获胜则结束本局游戏,并提示玩家游戏结束。 (2)人人对弈模式:选择该模式可以实现人与人之间的对弈,系统会提示哪方先下,然后玩家之间交替的下棋,同样系统会在下完每次棋后判断是否有哪方已经获胜,如果获胜则结束本局游戏,并提示玩家游戏结束。 (3)更换棋盘背景:该功能可以根据玩家的爱好任意更换棋盘的背景颜色,由于每个人对颜色的喜好不一样,因此这个功能也是非常必需的。

3、也行更换一种玩家所喜欢的颜色,玩家能发挥得更好。(4)更换棋盘大小:该功能可以根据玩家的水平更换棋盘大小,由于每个人水平不同,需要的棋盘大小也不一样,有的几个回合就可以结束的可以用小棋盘,棋力差不多相当的可以用中等或者大棋盘。1.3 性能需求 该款五子棋游戏功能虽然简单,但最主要的还是实现了人人对弈模式和人机对弈两种模式,所以从这个角度来说,该款游戏需要能很好的在两种模式间良好的转换。虽然系统不大,但要在满足玩家的基本要求的情况下,电脑有一定的智能,能给于新手一定的帮助。二、系统设计思路2.1界面棋盘设计 在对棋盘界面设计方面要考虑简洁友好,符合游戏者需求。棋子的设计方面系统中设置了两种棋子颜

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

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

6、获胜方的落子代码判断获胜方是谁。 由于不考虑禁手问题,在实现“连五”过程中,我们可以考虑完成“双四”,“四三”,“双三”,“冲四”,“活三”,“活四”来实现目的。 活四:有两个点能形成“连五”的四就是活四; 冲四:只有一个点能形成“连五”的四叫做“冲四”,或者叫做“单四”; 活三:己方在落一子就能形成“活四”的三叫做“活三”。“活三”分为“连活三”和“跳活三”。连活三:在棋盘某一条阳线或阴线上有同色三子相连,且在此三子两端延长线上有一端至少有一个,另一端至少有两个无子的交叉点与此三子紧密相连。跳活三:中间仅间隔一个无子交叉点的连三,但两端延长线均至少有一个无子的交叉点与此三子相连。 双三:由于

7、黑方走一着在无子交叉点上同时形成二个或二个以上黑方 活 的局面。 双四:由于黑方走一着在无子交叉点上同时形成二个或二个以上黑方 四 的局面。 四三:指某一方同时具备两个先手,其中一个是“ 四”,一个是 活三 。 在实现上面这些高级算法的时候,我们需要一个基础,就是对制定位置周围情况进行检测。在棋盘上面,棋子存在8个移动方向,检测时需要对每个方向进行检测。为了简单直观,这里将每步棋子的移动生成一个新的棋子。三、系统详细设计3.1工作原理图 图3.1工作原理图3.2类图 图3.2类图一图3.3类图二图3.4类图三 图3.5类图四3.3具体类方法介绍main方法创建了ChessFrame类的一个实例

8、对象,用类ChessFrame创建五子棋游戏主窗体和菜单import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class ChessFrame extends JFrame implements ActionListener private String strsize=标准棋盘,改进棋盘,扩大棋盘;private S

9、tring strmode=人机对战,人人对战;public static boolean iscomputer=true,checkcomputer=true;private int width,height;private ChessModel cm;private MainPanel mp;构造五子棋游戏的主窗体public ChessFrame() this.setTitle(五子棋游戏); cm=new ChessModel(1); mp=new MainPanel(cm); Container con=this.getContentPane(); con.add(mp,Center

10、); this.setResizable(false); this.addWindowListener(new ChessWindowEvent(); MapSize(14,14); JMenuBar mbar = new JMenuBar(); this.setJMenuBar(mbar); JMenu gameMenu = new JMenu(游戏); mbar.add(makeMenu(gameMenu, new Object 开局, null,棋盘,null,模式, null, 退出 , this); JMenu lookMenu =new JMenu(外观); mbar.add(ma

11、keMenu(lookMenu,new Object 类型一,类型二,类型三 ,this); JMenu helpMenu = new JMenu(版本); mbar.add(makeMenu(helpMenu, new Object 关于 , this);构造五子棋游戏的主菜单public JMenu makeMenu(Object parent, Object items, Object target) JMenu m = null; if(parent instanceof JMenu) m = (JMenu)parent; else if(parent instanceof Strin

12、g) m = new JMenu(String)parent); else return null; for(int i = 0; i items.length; i+) if(itemsi = null) m.addSeparator(); else if(itemsi = 棋盘) JMenu jm = new JMenu(棋盘); ButtonGroup group=new ButtonGroup(); JRadioButtonMenuItem rmenu; for (int j=0;jstrsize.length;j+) rmenu=makeRadioButtonMenuItem(str

13、sizej,target); if (j=0) rmenu.setSelected(true); jm.add(rmenu); group.add(rmenu); m.add(jm); else if(itemsi = 模式) JMenu jm = new JMenu(模式); ButtonGroup group=new ButtonGroup(); JRadioButtonMenuItem rmenu; for (int h=0;hstrmode.length;h+) rmenu=makeRadioButtonMenuItem(strmodeh,target); if(h=0) rmenu.

14、setSelected(true); jm.add(rmenu); group.add(rmenu); m.add(jm); else m.add(makeMenuItem(itemsi, target); return m;构造五子棋游戏的菜单项public JMenuItem makeMenuItem(Object item, Object target) JMenuItem r = null; if(item instanceof String) r = new JMenuItem(String)item); else if(item instanceof JMenuItem) r =

15、(JMenuItem)item; else return null; if(target instanceof ActionListener) r.addActionListener(ActionListener)target); return r;用类ChessModel实现了整个五子棋程序算法的核心import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import

16、javax.swing.JPanel;class ChessModel 规定棋盘的宽度、高度、棋盘的模式private int width,height,modeChess;规定棋盘方格的横向、纵向坐标private int x=0,y=0;棋盘方格的横向、纵向坐标所对应的棋子颜色,数组arrMapShow只有3个值:1,2,3,-1,其中1代表该棋盘方格上下的棋子为黑子,2代表该棋盘方格上下的棋子为白子,3代表为该棋盘方格上没有棋子,-1代表该棋盘方格不能够下棋子private int arrMapShow;交换棋手的标识,棋盘方格上是否有棋子的标识符private boolean isOd

17、d,isExist;public ChessModel() 该构造方法根据不同的棋盘模式(modeChess)来构建对应大小的棋盘public ChessModel(int modeChess) this.isOdd=true; if(modeChess = 1) PanelInit(14, 14, modeChess); if(modeChess = 2) PanelInit(18, 18, modeChess); if(modeChess = 3) PanelInit(22, 22, modeChess); 按照棋盘模式构建棋盘大小private void PanelInit(int wi

18、dth, int height, int modeChess) this.width = width; this.height = height; this.modeChess = modeChess; arrMapShow = new intwidth+1height+1; for(int i = 0; i = width; i+) for(int j = 0; j = height; j+) arrMapShowij = -1; 用类MainPanel主要完成如下功能:1、构建一个面板,在该面板上画上棋盘;2、处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等)import

19、 java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class MainPanel extends JPanel implements MouseListener,MouseMotionListener设定棋盘的宽度和高度private int width,height; private ChessModel cm;根据棋盘模式

20、设定面板的大小MainPanel(ChessModel mm) cm=mm; width=cm.getWidth(); height=cm.getHeight(); addMouseListener(this);根据棋盘模式设定棋盘的宽度和高度public void setModel(ChessModel mm) cm = mm; width = cm.getWidth(); height = cm.getHeight();根据坐标计算出棋盘方格棋子的信息(如白子还是黑子),然后调用draw方法在棋盘上画出相应的棋子public void paintComponent(Graphics g)

21、super.paintComponent(g); for(int j = 0; j = height; j+) for(int i = 0; i = width; i+) int v = cm.getarrMapShow()ij; draw(g, i, j, v); 根据提供的棋子信息(颜色、坐标)画棋子public void draw(Graphics g, int i, int j, int v) int x = 20 * i+20; int y = 20 * j+20; 画棋盘 if(i!=width & j!=height) g.setColor(Color.darkGray); g.

22、drawRect(x,y,20,20); 画黑色棋子 if(v = 1 ) g.setColor(Color.gray); g.drawOval(x-8,y-8,16,16); g.setColor(Color.black); g.fillOval(x-8,y-8,16,16); 画白色棋子 if(v = 2 ) g.setColor(Color.gray); g.drawOval(x-8,y-8,16,16); g.setColor(Color.white); g.fillOval(x-8,y-8,16,16); if(v =3) g.setColor(Color.cyan); g.draw

23、Oval(x-8,y-8,16,16); 响应鼠标的点击事件,根据鼠标的点击来下棋,根据下棋判断胜负等public void mousePressed(MouseEvent evt) int x = (evt.getX()-10) / 20; int y = (evt.getY()-10) / 20; System.out.println(x+ +y); if (evt.getModifiers()=MouseEvent.BUTTON1_MASK) cm.play(x,y); System.out.println(cm.getisOdd()+ +cm.getarrMapShow()xy); r

24、epaint(); if(cm.judgeSuccess(x,y,cm.getisOdd() cm.showSuccess(this); evt.consume(); ChessFrame.iscomputer=false; 判断是否为人机对弈 if(ChessFrame.iscomputer&!cm.getisExist() puterDo(cm.getWidth(),cm.getHeight(); repaint(); if(cm.judgeSuccess(cm.getX(),cm.getY(),cm.getisOdd() cm.showDefeat(this); evt.consume(

25、); public void mouseClicked(MouseEvent evt)public void mouseReleased(MouseEvent evt)public void mouseEntered(MouseEvent mouseevt)public void mouseExited(MouseEvent mouseevent)public void mouseDragged(MouseEvent evt) 响应鼠标的拖动事件public void mouseMoved(MouseEvent moveevt) int x = (moveevt.getX()-10) / 20

26、; int y = (moveevt.getY()-10) / 20; cm.readyplay(x,y); repaint(); import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;响应退出窗口class ChessWindowEvent extends WindowAdapterpublic void windowClosing(WindowEvent e) System.exit(0);ChessWindowEvent()四、系统实现程序开发界面如图4.1图4.1程序开发界面运行程序结果如图4.2:

27、图4.2运行界面棋盘界面一共有三种如下图所示标准棋盘: 改进棋盘:图4.2棋盘一 图4.5棋盘三扩大棋盘:图4.5棋盘三外观类型一共三种如下图所示外观类型一: 外观类型二:图4.6外形一 图4.7外形二 外观类型三:图4.8外形三人机对战如图4.9所示:图4.9人机对战对战结果如图4.10所示:图4.10结果图版本如图4.11所示:图4.11版本五、系统设计总结 一个编程语言最强大的地方不是它是容易学,或者难学,而是它拥有一个强大的库。JAVA是一个完全面向对象的语言,JAVA的命名规则是很容易让人接受的。而且容易被编程人员记住。经过实践训练,对JAVA的综合应用能力有了较大的提高,另外对JA

28、VA的特点有了更深层次的认识。这次实践中使用的代码虽然不长,但类与类之间也有很强的逻辑关系,这就是面向对象语言的最大优势,这样可使我们更轻松的运用JAVA。 经过努力,查阅相关资料,终于完成该课题,虽然效果不是很好,但亲手做过之后还是很有成就感的。 设计过程中 ,将我本学期所学的JAVA知识得到巩固和应用,在设计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。它还让我学会了在网上查阅那些无限的资料。通过对此课题的开发,使我对用JCreator开发平台有了一个比较清楚的认识,体会到

29、理论和实践的重要性。由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如用户界面设计不够美观,没有能设置禁手,没有能设置悔棋,异常出错处理比较差等多方面问题,这些都有待进一步完善和提高。对于文中出现的不足和系统中出现的问题敬请老师指导。通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。同时我渐渐的复习了Java使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。在此感谢我的指导老师许研,她在课题的研究上不遗余力的给予指导。她严谨的治学态度深深的影响了我,老师精心的指导和严格的教诲,无论从学术水平还是学术造诣上都使我受益匪浅!六、参考文献1耿祥义.JAVA大学实用教程北京:电子工业出版社,2005.3;2朱战立,沈伟Java程序设计实用指南北京:电子工业出版社,2005.1;3唐大仕.Java程序设计.北京:北方交通大学出版社,2007.6;4叶核亚. JAVA2程序设计实用教程北京:电子工业出版社,2008.4;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1