课程设计(论文)任务书_第1页
课程设计(论文)任务书_第2页
课程设计(论文)任务书_第3页
课程设计(论文)任务书_第4页
课程设计(论文)任务书_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、 课程设计(论文)任务书 信息工程 学院学院物联网工程 专专业业 2016-2班班一、课程设计一、课程设计( (论文论文) )题目:题目: 人机对弈五子棋游戏 二、课程设计二、课程设计( (论文论文) )工作:工作:自 20182018 年 1212 月 2424 日起至 20182018 年 1212 月 2828 日止三、课程设计三、课程设计( (论文论文) ) 地点地点: : 5-202 四、课程设计四、课程设计( (论文论文) )内容要求:内容要求:1 1本课程设计的目的本课程设计的目的(1)使学生掌握软件开发的基本工作流程; (2)巩固 JAVA 程序设计课程所学的内容; (3)培养

2、学生的计算机思维能力以及合作的精神;(4)培养学生分析、解决问题的能力;(5)提高学生的科技论文写作能力。 2 2课程设计的任务及要求课程设计的任务及要求1 1)基本要求:)基本要求:(1)研究课程设计任务,并进行系统需求分析;(2)对系统进行总体设计,分解系统功能模块,进行任务分配,以实现分工合作;(3)实现各功能模块代码; (4)系统组装,测试、完善系统。2 2)创新要求:)创新要求: 在基本要求达到后,可进行创新设计,如改进界面、增加功能或进行代码优化。 3 3)课程设计论文编写要求)课程设计论文编写要求(1)要按照书稿的规格打印誊写课程设计论文(2)论文包括封面、设计任务书(含评语)、

3、摘要、目录、设计内容、设计小结(3)论文装订按学校的统一要求完成4 4)参考文献:)参考文献:(1)丁振凡,JAVA 语言程序设计(第 2 版),清华大学出版社(2)丁振凡,JAVA 语言程序设计实验指导与习题解答,清华大学出版社(3)http:/ 5)课程设计进度安排)课程设计进度安排内容内容 天数天数 地点地点系统总体设计 1 实验室软件设计及调试 1 实验室答辩及撰写报告 1 实验室、图书馆 学生签名:学生签名: 2015 年 6 月 25 日课程设计课程设计( (论文论文) )评审意见评审意见(1) 课程设计过程(20 分):优()、良()、中()、一般()、差( );(2) 是否完成

4、调试,系统运行效果(30 分):优()、良()、中()、 一般( )、差( );(3)回答问题(20 分):优()、良()、中()、一般()、差();(4)课程设计报告(30 分):优()、良()、中()、一般()、差 ( );(5)格式规范性及考勤是否降等级:是()、否() 评阅人评阅人: 职称职称:教授 2018 年 12 月 29 日 目录目录1 1、课程设计的目的及目标、课程设计的目的及目标 .1 11.1 课程设计的目的:课程设计的目的:.1 11.2 课程设计的目标:课程设计的目标:.1 12 2、概要设计、概要设计 .1 12.1 开发工具及环境开发工具及环境.1 12.2 任务

5、及需求分析任务及需求分析 .1 12.3 工作原理工作原理 .2 23 3、 具体实现具体实现 .3 33.1 类设计类设计 .3 34 4、运行调试与分析讨论、运行调试与分析讨论 .5 55 5、设计体会与小结、设计体会与小结 .8 86 6、参考文献、参考文献 .9 9附录:(源程序)附录:(源程序) .9 911、课程设计的目的及目标1.1 课程设计的目的:课程设计的目的:本次课程设计的目的是为了让学生使用 java 语言编程的知识,JAVA 是一门编程语言也是一个平台,它基于 JAV 虚拟机技术,借助这个东西建立了跨平台优势JAVA 编程语言与众不同之处在于:JAV 程序既是编译型的(

6、转换为一种 JAVA字节码的中间语言),又是解释型(JVM 对字节码进行解析和运行)。编译只进行一次,而解释在每次运行程序时都会进行。编译后的字节码采用一种针对 JVM 优化过的机器码形式;解释器是 JVM 的实现。我们需要利用 JAVA 开发平台,学习和巩固 JAVA 知识,了解类与对象的关系,绘图以及事件处理原则。 1.2 课程设计的目标:课程设计的目标:本次课程设计所要求的五子棋游戏应达到以下几方面的要求:(1)运行程序后即刻出现棋盘并可以开始下棋;(2)人机对弈时,先手为黑棋,后手为白棋;人为先手,计算机为后手;(3)程序能响应鼠标点击并在相应位置画出棋子;(4)计算机具有一定的智能,

7、能够与人进行五子棋对弈;(5)程序可以正确判断出局面的胜负情况并及时报出结果,终止棋局;(6)尽可能实现人人对战功能;(7)重新开始:在游戏途中,可以选择重新开始,中断游戏并重新开始。2、概要设计2.1 开开发发工具及环境工具及环境装有 eclipse 的计算机一台。2.2 任务及需求分析任务及需求分析设计人机对弈五子棋程序,实现人与计算机进行五子棋对弈,具体任务如下:(1)棋盘布局设计;(2)能进行基本的五子棋操作,有图形界面,能够用鼠标进行操作;(3)编程实现棋子的绘制;(4)增加具体的功能如重开一局等功能; 2(5)胜负判断的功能,程序能对下棋的结果进行判断,分出胜负,并显示获胜方;(6

8、)运行测试程序,调试纠正运行错误。(7)游戏内容:采用无“禁手”的规则,相同颜色的棋子,五子一线为胜。2.3 工作原理工作原理(1)工作过程运行程序后,首先出现五子棋游戏窗体,用户点击游戏菜单项,出现相关子菜单,选择模式子菜单中的人机对弈便可进入人机对弈模式。然后移动鼠标,在窗体的棋盘上点击鼠标下子,即可在棋盘中相应位置显示下的对应棋子。接下来计算机会根据用户下的棋,采取穷举法选择八个方向上赢面最大的位置下子,用户与计算机谁先达到五子连成一线,谁便是获胜方。若选择模式子菜单中的人人对战便可进入人人对战模式。两个用户可同时玩游戏,同样谁先达到五子连成一线,谁便是获胜方。若双方势均力敌,可选择游戏

9、菜单项中的棋盘子菜单,点击大号棋盘或超大号棋盘,以便避免棋盘空间不足造成无法分出胜负的情况。若觉得窗体外观不太美观,可选择外观菜单中的三个选项进行选择。为了显示程序的相关制作信息,程序提供了版本菜单进行显示。具体功能实现见第四章节运行调试及分析讨论。(2)工作原理利用图形界面编程实现,利用到的知识点包括:窗体的创建和应用界面布局;事件处理,包括按钮的动作事件处理,鼠标事件,窗体事件;接口知识:事件处理中通过接口约束事件监听者必须实现相应接口中定义的方法;流程控制语句:通过条件判断区分不同事件源,作不同操作处理。棋子状态控制:通过 arrMapShow 数组来判断是下什么颜色的棋子,如果是计算机

10、下棋,则计算棋盘上某一放个八个方向上棋子的最大值,通过调用 readyplay()方法判断某位置是否可下棋。3、 具体实现总共涉及五类,分别为:ChessFrame、ChessModel、ChessWindowEvent、FiveChessAppletDemo、MainPanel 3。引入的 java 包为:import java.awt.*;import java.awt.event.*; import java.applet.*; import javax.swing.*; import java.io.PrintStream; import javax.swing.JComponent;

11、 import javax.swing.JPanel;3.1 类设计类设计(1) 类名:FiveChessAppletDemo作用:显示五子棋游戏窗体。类中含有的方法介绍: main()方法:程序运行的入口,创建了 ChessFrame 类的一个实例对象(cf),并启动屏幕显示显示该实例对象。(2) 类名:ChessFrame作用:创建五子棋游戏主窗体和菜单。该类继承 JFrame 类,实现 ActionListener 接口。类中含有的方法介绍: ChessFrame()构造方法:构造五子棋游戏的主窗体; makeMenu()方法:构造五子棋游戏的主菜单; makeMenuItem()方法:

12、构造五子棋游戏的菜单项; makeRadioButtonMenuItem()方法:构造五子棋游戏的单选按钮式菜单项; mapsize()方法:获取棋盘大小; restart()方法:重新开局; actionperformed()方法:异常的捕获及不同模式、不同棋盘大小以及下拉菜单功能的实现。(3) 类名:ChessModel作用:实现了整个五子棋程序算法的核心。采用穷举法判断八个方向上存在棋子 4的最大值进行对弈。类中含有的主要方法介绍: ChessModel()构造方法:根据不同的棋盘模式(modeChess)来构建对应大小的棋盘; PanelInit()方法:按照棋盘模式构建棋盘大小; b

13、adxy()方法:判断下子的横向、纵向坐标是否越界; chessExist()方法:计算棋盘上某一方格上八个方向棋子的最大值,(这八个方向分别是:左、右、上、下、左上、左下、右上、右下); readyplay()方法:判断该坐标位置是否可下棋子; play()方法:在该坐标位置下棋子; computerDo()方法:用穷举法判断每一个坐标点的八个方向的的最大棋子数,最后得出棋子数最大值的坐标,下子; checkMax()方法:计算棋盘上某一方格上八个方向棋子的最大值; judgeSuccess()方法:判断胜负; showSuccess()方法:赢棋后的提示; showDefeat()方法:输

14、棋后的提示。(4) 类名:MainPanel作用:构建一个面板,在该面板上画上棋盘;处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等);该类继承 JPanel 类,实现 MouseListener、MouseMotionListener 接口。类中含有的主要方法介绍: ChessModel()方法:根据棋盘模式设定面板的大小; setModel()方法:根据棋盘模式设定棋盘的宽度和高度; paintComponent()方法:根据坐标计算出棋盘方格棋子的信息(如白子还是黑子),然后调用 draw 方法在棋盘上画出相应的棋子; draw()方法:根据提供的棋子信息(颜色、坐标)

15、画棋子; mousePressed ()方法:响应鼠标的点击事件,根据鼠标的点击来下棋,根据下棋判断胜负、判断是否人机对弈等; mouseMoved()方法:响应鼠标的拖动事件。 (5) 类名: ChessWindowEvent 5作用:响应退出窗口。该类继承WindowAdapter。类中含有的方法介绍: windowClosing()方法:处理窗口关闭; ChessWindowEvent ()构造方法:提供无参构造方法。3.2 对弈策略对弈策略采用 readyplay()方法判断该位置是否可以下棋,然后用穷举法判断每一个坐标点的八个方向,即左、右、上、下、左上、左下、右上、右下,棋子的最大

16、值,最后得出最大值的坐标,下子。最后采用 judgeCuccess()方法,判断八个方向上是否满五个同色棋子,若有,则成功,反之则失败。4、运行调试与分析讨论 图图 4-14-1 程序运行初始界面程序运行初始界面 图图 4-24-2 人机人机/ /人人对弈模式选择界面人人对弈模式选择界面 6 图图 4-34-3 人机对弈界面人机对弈界面 图图 4-44-4 两种结果信息显示界面两种结果信息显示界面 图图 4-54-5 棋盘选择界面棋盘选择界面 7 图图 4-64-6 视图类型选择界面视图类型选择界面 图图 4-74-7 程序版本信息选择界面程序版本信息选择界面 8 图图 4-84-8 程序版本

17、信息介绍界面程序版本信息介绍界面5、设计体会与小结本次实验我们做的是人机对弈五子棋,这是上课时曾经了解过的相关内容,但不可否认的是,理解起来确实存在一定的困难。课程设计是将所有学过的甚至没有学过的知识集合起来,并且运用到实际的运用当中,使得整个过程进行的难度较大,最后敲定的代码也很长,较为复杂,以致于在调试过程中,出现了很多问题,代码不断出错,运行之后的界面功能不全,计算机下棋的算法太过简单,甚至一度出现无从下手,不知从何修改的困境但所有的一切都不能成为实现道路上的障碍,所以后来我们通过不停的讨论、翻书,上网参考别人的代码,不断优化,最后问题都被一一解决。由于此次时间仓促,依旧存在很多不足,比

18、如很多功能并不能全部实现,对弈的策略比较简单等。此次课程设计,我们深刻的了解到对知识运用熟练的重要性和团队团结协作的重要性,它们是做好一个项目的基石。通过努力和团结协作完成的完整代码带给我们的成就感是不可比拟的,希望下次我们能做的更好。小组成员:胡子凌、范整整、吴越男、吴嘉懿6、参考文献1 丁振凡,JAVA 语言程序设计,清华大学出版社.2 丁振凡,JAVA 语言程序设计实验指导与习题解答,清华大学出版社.3 Charles Petzold. Windows 程序设计. 北京大学出版社,2002. 4 陈明,Java 语言程序设计,清华大学出版社. 9附录:(源程序)package keshe

19、;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;/* *main 方法创建了 ChessFrame 类的一个实例对象(cf), *并启动屏幕显示显示该实例对象。 */ public class FiveChessAppletDemo public static void main(String arg

20、s) ChessFrame cf= new ChessFrame(); cf.show(); /* *类 ChessFrame 主要功能是创建五子棋游戏主窗体和菜单 */ class ChessFrame extends JFrame implements ActionListener private String strsize=20 x15,30 x20,40 x30; private String strmode=人机对弈,人人对弈; public static boolean iscomputer=true,checkcomputer=true; private int width,h

21、eight; 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); this.setResizable(false); this.addWindowListener(new ChessWindowEvent(); MapSize(20,15); JMen

22、uBar mbar=new JMenuBar(); this.setJMenuBar(mbar); JMenu gameMenu=new JMenu(游戏);mbar.add(makeMenu(gameMenu,new Object 开局, 棋盘,模式,null,退出 ,this); JMenu lookMenu=new JMenu(视图); mbar.add(makeMenu(lookMenu,new Object Metal,Motif,Windows ,this); JMenu helpMenu=new JMenu(帮助); 10mbar.add(makeMenu(helpMenu,ne

23、w 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 String) m=new JMenu(String)parent); else return null; for(int i= 0;iitems.length;i+) if(itemsi= null) m.addSeparator();

24、else if(itemsi = 棋盘) JMenu jm=new JMenu(棋盘); ButtonGroup group=new ButtonGroup(); JRadioButtonMenuItem rmenu; for(int j=0;jstrsize.length;j+) rmenu=makeRadioButtonMenuItem(strsizej,target); if(j=0) rmenu.setSelected(true); jm.add(rmenu); group.add(rmenu); m.add(jm); else if(itemsi= 模式) JMenu jm=new

25、JMenu(模式); ButtonGroup group=new ButtonGroup(); JRadioButtonMenuItem rmenu; for(int h=0;hstrmode.length;h+) rmenu=makeRadioButtonMenuItem(strmodeh,target); if(h=0)rmenu.setSelected(true); jm.add(rmenu); group.add(rmenu); m.add(jm); else m.add(makeMenuItem(itemsi,target);return m;/构造五子棋游戏的菜单项 public

26、JMenuItem makeMenuItem(Object item,Object target) JMenuItem r= null; if(item instanceof String) r=new JMenuItem(String)item); 11else if(item instanceof JMenuItem) r=(JMenuItem)item; else return null; if(target instanceof ActionListener) r.addActionListener(ActionListener)target);return r; /构造五子棋游戏的单

27、选按钮式菜单项 public JRadioButtonMenuItem makeRadioButtonMenuItem( Object item,Object target) JRadioButtonMenuItem r= null; if(item instanceof String) r=new JRadioButtonMenuItem(String)item);else if(item instanceof JRadioButtonMenuItem) r=(JRadioButtonMenuItem)item; else return null; if(target instanceof

28、ActionListener) r.addActionListener(ActionListener)target); return r; public void MapSize(int w,int h) setSize(w*20+50,h*20+100); if(this.checkcomputer) this.iscomputer=true; elsethis.iscomputer=false; mp.setModel(cm); mp.repaint(); public boolean getiscomputer() return this.iscomputer; public void

29、restart() int modeChess=cm.getModeChess(); if(modeChess= 1) cm=new ChessModel(modeChess); MapSize(cm.getWidth(),cm.getHeight(); else System.out.println(u81EAu5B9Au4E49); public void actionPerformed(ActionEvent e) String arg=e.getActionCommand(); try 12if(arg.equals(Windows) UIManager.setLookAndFeel(

30、 com.sun.java.swing.plaf.windows.WindowsLookAndFeel); else if(arg.equals(Motif) UIManager.setLookAndFeel( com.sun.java.swing.plaf.motif.MotifLookAndFeel); else UIManager.setLookAndFeel( javax.swing.plaf.metal.MetalLookAndFeel); SwingUtilities.updateComponentTreeUI(this); catch(Exception ee) if(arg.e

31、quals(20 x15) this.width=20; this.height=15; cm=new ChessModel(1); MapSize(this.width,this.height); SwingUtilities.updateComponentTreeUI(this); if(arg.equals(30 x20) this.width=30; this.height=20; cm=new ChessModel(2);MapSize(this.width,this.height); SwingUtilities.updateComponentTreeUI(this); if(ar

32、g.equals(40 x30) this.width=40; this.height=30; cm=new ChessModel(3); MapSize(this.width,this.height); SwingUtilities.updateComponentTreeUI(this); if(arg.equals(人机对弈) this.checkcomputer=true;this.iscomputer=true; cm=new ChessModel(cm.getModeChess(); MapSize(cm.getWidth(),cm.getHeight(); SwingUtiliti

33、es.updateComponentTreeUI(this); if(arg.equals(人人对弈) this.checkcomputer=false; this.iscomputer=false; cm=new ChessModel(cm.getModeChess(); MapSize(cm.getWidth(),cm.getHeight(); SwingUtilities.updateComponentTreeUI(this); if(arg.equals(开局) restart(); 13if(arg.equals(关于) JOptionPane.showMessageDialog(t

34、his, 制作者:天天都不知道吃什么小组, 关于,0); if(arg.equals(退出) System.exit(0); /* *类 ChessModel 实现了整个五子棋程序算法的核心 */ class ChessModel /棋盘的宽度、高度、棋盘的模式(如 2015) private int width,height,modeChess; /棋盘方格的横向、纵向坐标 private int x=0,y=0; /棋盘方格的横向、纵向坐标所对应的棋子颜色,/数组 arrMapShow 只有 4 个值:1,2,3,-5,/其中 1 代表该棋盘方格上下的棋子为黑子, /2 代表该棋盘方格上下

35、的棋子为白子, /3 代表为该棋盘方格上没有棋子, /-5 代表该棋盘方格不能够下棋子private intarrMapShow; /交换棋手的标识,棋盘方格上是否有棋子的标识符 private boolean isOdd,isExist;public ChessModel() /该构造方法根据不同的棋盘模式(modeChess)来构建对应大小的棋盘 public ChessModel(int modeChess) this.isOdd=true; if(modeChess= 1) PanelInit(20,15,modeChess); if(modeChess= 2) PanelInit(3

36、0,20,modeChess); if(modeChess= 3) PanelInit(40,30,modeChess); /按照棋盘模式构建棋盘大小 private void PanelInit(int width, 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 = width+20| x= height+2

37、0| y0; /计算棋盘上某一方格上八个方向棋子的最大值, /这八个方向分别是:左、右、上、下、左上、左下、右上、右下 public boolean chessExist(int i,int j) if(this.arrMapShowij=1| this.arrMapShowij=2) return true; return false;/判断该坐标位置是否可下棋子 public void readyplay(int x,int y) if(badxy(x,y) return; if(chessExist(x,y) return; this.arrMapShowxy=3; /在该坐标位置下棋子

38、 public void play(int x,int y) if(badxy(x,y) return; if(chessExist(x,y) this.isExist=true; return; else 15this.isExist=false; if(getisOdd() setisOdd(false); this.arrMapShowxy=1; else setisOdd(true); this.arrMapShowxy=2; /计算机走棋 /* *说明:用穷举法判断每一个坐标点的四个方向的的最大棋子数, 最后得出棋子数最大值的坐标,下子 */ public void computer

39、Do(int width,int height) int max_black,max_white,max_temp,max=0; setisOdd(true); System.out.println(计算机走棋 .); for(int i= 0;i=width; i+) for(int j=0;j max) max=max_temp; this.x=i; this.y=j; setX(this.x); setY(this.y); this.arrMapShowthis.xthis.y=2;/记录电脑下子后的横向坐标public void setX(int x) this.x=x; /记录电脑下

40、子后的纵向坐标 public void setY(int y) this.y=y; /获取电脑下子的横向坐标public int getX() return this.x; /获取电脑下子的纵向坐标public int getY() return this.y; /计算棋盘上某一方格上八个方向棋子的最大值, /这八个方向分别是:左、右、上、下、左上、左下、右上、右下public int checkMax(int x, int y,int black_or_white) int num=0,max_num,max_temp=0; int x_temp=x,y_temp=y; int x_temp

41、1=x_temp,y_temp1=y_temp; /judge right 16for(int i=1;ithis.width) break;if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break; /judge left x_temp1=x_temp; for(int i=1;i5;i+) x_temp1-=1; if(x_temp10) break; if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break; if(num5) max_tem

42、p=num;/judge up x_temp1=x_temp; y_temp1=y_temp; num=0; for(int i=1;i5;i+) y_temp1-=1; if(y_temp10) break; if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break; /judge down y_temp1=y_temp; for(int i=1;ithis.height) break; if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break;

43、 17if(nummax_temp&num5)max_temp=num;/judge left_up x_temp1=x_temp; y_temp1=y_temp; num=0; for(int i=1;i5;i+) x_temp1-=1; y_temp1-=1; if(y_temp10|x_temp10) break; if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break; /judge right_down x_temp1=x_temp; y_temp1=y_temp; for(int i=1;ithis

44、.height | x_temp1this.width) break; if(this.arrMapShowx_temp1y_temp1=black_or_white) num+; else break; if(nummax_temp&num5) max_temp=num;/judge right_up x_temp1=x_temp; y_temp1=y_temp; num=0; for(int i=1;i5;i+)x_temp1+=1; y_temp1-=1; if(y_temp1this.width) break; if(this.arrMapShowx_temp1y_temp1=

45、black_or_white) num+; elsebreak; /judge left_down x_temp1=x_temp; y_temp1=y_temp; 18for(int i=1;ithis.height | x_temp1max_temp&num5) max_temp=num; max_num=max_temp; return max_num;/判断胜负 public boolean judgeSuccess(int x,int y,boolean isodd) int num=1; int arrvalue; int x_temp=x,y_temp=y; if(isod

46、d) arrvalue=2; else arrvalue=1; int x_temp1=x_temp,y_temp1=y_temp; /判断右边 for(int i=1;ithis.width) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; /判断左边 x_temp1=x_temp; for(int i=1;i6;i+)x_temp1-=1; if(x_temp10) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; i

47、f(num=5) return true; 19/判断上方x_temp1=x_temp; y_temp1=y_temp; num=1; for(int i=1;i6;i+) y_temp1-=1; if(y_temp10) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; /判断下方 y_temp1=y_temp; for(int i=1;ithis.height) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; if(n

48、um=5) return true;/判断左上 x_temp1=x_temp; y_temp1=y_temp; num=1; for(int i=1;i6;i+) x_temp1-=1;y_temp1-=1; if(y_temp10|x_temp10) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; /判断右下 x_temp1=x_temp; y_temp1=y_temp; for(int i=1;ithis.height | x_temp1this.width) break; if(this.arrMap

49、Showx_temp1y_temp1=arrvalue) num+; else break; if(num=5) return true;/判断右上 x_temp1=x_temp; y_temp1=y_temp; num=1; for(int i=1;i6;i+) x_temp1+=1; y_temp1-=1; if(y_temp1this.width) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; /判断左下x_temp1=x_temp; y_temp1=y_temp; for(int i=1;ithi

50、s.height | x_temp10) break; if(this.arrMapShowx_temp1y_temp1=arrvalue) num+; else break; if(num=5) return true; return false;/赢棋后的提示 public void showSuccess(JPanel jp) JOptionPane.showMessageDialog(jp,你赢了,好厉害!,win, JOptionPane.INFORMATION_MESSAGE); /输棋后的提示 public void showDefeat(JPanel jp) JOptionPa

51、ne.showMessageDialog(jp,你输了,请重新开始!,lost, 21JOptionPane.INFORMATION_MESSAGE); /* *类 MainPanel 主要完成如下功能: * 1、构建一个面板,在该面板上画上棋盘; * 2、处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等) */ class MainPanel extends JPanel implements MouseListener,MouseMotionListener private int width,height;/棋盘的宽度和高度 private ChessModel cm;/根据棋盘模式设定面板的大小 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(); /根据坐标计算出棋盘方格棋子的信息(如白子还

温馨提示

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

评论

0/150

提交评论