java象棋课程设计

上传人:Sc****h 文档编号:131760562 上传时间:2022-08-07 格式:DOC 页数:33 大小:1.39MB
收藏 版权申诉 举报 下载
java象棋课程设计_第1页
第1页 / 共33页
java象棋课程设计_第2页
第2页 / 共33页
java象棋课程设计_第3页
第3页 / 共33页
资源描述:

《java象棋课程设计》由会员分享,可在线阅读,更多相关《java象棋课程设计(33页珍藏版)》请在装配图网上搜索。

1、课程名称:JAVA 课程设计题目:系名:专业班级:“网络象棋 ”游戏的设计与开发信息工程系软件工程姓名:学号:指导教师 :2012年 6 月 18 日课程设计任务书学生姓名:专业班级:指导教师:工作单位:信息工程系设计题目 : “网络象棋 ”游戏的设计与开发初始条件:网络象棋,网络版的棋类游戏。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)使用 JAVA开发一个网络版的象棋游戏。该游戏包括网络功能,棋盘功能和辅助功能。本系统使用 JAVA SWING技术和事件处理机制进行棋盘界面的设计,开发和功能实现 , 使用 Socket 网络编程和多线程技术进行多客户端之

2、间的对战。系统总体架构如下:网络象棋网络管理棋盘功能辅助功能系统功能点说明如下:编号功能名功能描述1网络功能通过网络通信,实现多客户端对战绘制棋盘绘制棋盘与棋子2棋盘功能下棋功能点击棋子,可以走动下棋规则设计相应算法,控制不同棋子的走法悔棋通过记录走棋步骤,实现悔棋3辅助功能截屏关键步骤,实现截屏录制可以录制每一步下棋的视频4系统打包系统打包,制作安装程序设计报告撰写格式要求:一、课程设计说明书(或报告书)正文内容【设计题目】 例如: “即时通 ”网络通信系统的设计与开发【开发环境 】硬件环境:微机系列,内存在1G 以上,软件环境:【开发工具 】 NetBeans IDEMicrosoftWi

3、ndows XP【完成时间 】【需求分析 】分析阐述要实现的系统应具有什么样的功能。【系统总体设计方案 】在明确了所要解决的问题后,很自然地就要提出自己解决问题的思路和方案。让读者了解方案的总体设计和关键技术。要阐述自己的设计方案,说明为什么要选择或设计这样的方案。具体包括:系统总的设计思路,体系结构 , 总体架构 , 功能模块图;各功能模块所要达到的设计目标的简单介绍;设计的数据字典(数据库、表的结构) ;使用的设计软硬件环境和开发技术和平台等。【系统详细设计 】在这部分中,要将整个开发工作的内容进行详细的介绍。一般按照功能模块分成几部分来介绍。每部分应包括文字叙述、界面图片、关键实现技术(

4、操作或代码)等几个方面综合说明问题。【系统调试和测试 】调试:介绍设计过程中遇到的问题和解决方法。测试:介绍如何测试系统,测试中发现的问题和解决方案。【结束语 】这部分篇幅不大,对整个设计中做的工作、获得的成果、心得体会等做一个简单小结。【参考文献 】罗列在设计过程中查阅的文献名称注意:参考文献罗列的格式为资料编号 ?作者姓名 ?文献或期刊名称 ?出版社名称,文献的出版时间或期刊的期号例如:文献1 吕凤翥,马皓 . Java 语言程序设计 (第 2 版 )M. 北京:清华大学出版社,2010期刊2 石振国 . 用 JSP 实现对 Web 数据库的访问 J. 计算机应用, 2010(05):5-

5、8.二、课程设计说明书(或报告书)正文的书写格式简介一、 正文标题层次正文题序层次是文章结构的框架,一般采用社会通用的论文书写形式。即章条序码统一用阿拉伯数字表示,题序层次可以分为若干级,各级号码之间加小圆点,末尾一级的后面不加小圆点,层次分级一般不超过四级为宜,示例如下:第一级(章)123第二级(条)1.12.13.11.2 2.2 3.2 第三级(条)1.1.12.1.13.1.11.1.2 2.1.2 3.1.2 1.2.12.2.13.2.11.2.22.2.23.2.2二、表格每个表格应有自己的表序与表题,表序与表题间空一格。例如:表 1.1XXXX,且表题与表序应写在表格的上方正中

6、处。三、插图插图图面要整齐、美观,插图应与正文呼应,不能脱节。每幅插图应有图序与图题,图序编号要连续,图序与图题间空一格且要放在插图下方居中处。四、公式公式应另起一行写在稿纸的中央。时间安排:日期任务课程内容6.18-19棋盘界面的绘制Eclipse/NetBeans 使用Swing 技术6.19-20实现棋子的走动事件代理6.20-21棋子规则实现Socket,Thread,JavaOO6.25辅助功能实现JAVA数据结构6.26-27网络通讯install4j使用6.28系统打包 验收指导教师签字:2012 年6 月14日系主任签字:2012年 6月15 日1 目标用 JAVA开发一个象棋

7、游戏。让我们熟悉JAVA基本事件处理,学会java面向对象的设计。以及java各种控件及图像用户的界面的设计使用,分别掌握基本工具继承抽象类接口。输入输出,流程控制,开发环境,实现简单的功能设计,帮助熟练的掌握有关java的知识结构体系。通过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型,对面向对象中的继承和多态的概念要理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。2 软件开发环境与技术简介2.1开发工具介绍EclipseEclipse 是一个开放源代码的、基于Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建

8、开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java 开发工具( JavaDevelopment Kit , JDK )。虽然大多数用户很乐于将Eclipse当作Java 集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。Eclipse还包括插件开发环境(Plug-in DevelopmentEnvironment , PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而

9、言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于Java 开发工具。尽管 Eclipse 是使用 Java 语言开发的,但它的用途并不限于Java 语言;例如,支持诸如C/C+ 和 COBOL等编程语言的插件已经可用,或预计将会推出。Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。2.2硬件环境1操作系统: Microsoft Windows XP 。2内存: 1G内存以上。2.3软件环境开发工具选用Eclipse3 系统需求分析提供棋盘和棋子;设定棋子的走棋规则;该哪方走棋时,旁边会有提示哪方走棋;可以悔棋;判断胜负;4 系统总体设

10、计4.1 棋盘模板中国象棋是双方在有着9 调竖线和 10 条横线的棋盘上对弈,竖线和横线的交叉称为棋点或对弈点。河界将棋盘分成两等份,每一边都有一块有9 个点组成的九宫。4.2 棋子模板利用一个二位数组,画出各个棋子。4.3 棋子规则模板规定各个棋子的走法规则,使每个棋子都是在棋点上行走,而不是在方格中行走如棋子“将”,“帥”和“士”只能在九宫内移动,并且“将”和“帅”每一步只可以水平或垂直移动一个棋点;“士”只能在九宫内移动,并且它每一步只可以沿着对角线移动一个棋点;“象”必须一次沿着对角线方向走两个棋点,但它不能过河也不能跳过或穿越障碍,即“象”不能别眼,“马”没一步只可以水平或垂直移动两

11、个棋点,但必须按对角线向左或向右移动。中国象棋的“马”不能跳过障碍,即马不能别腿。“车”可以水平或垂直方向移动人一个无障碍的点。“炮”移动起来和车类似,但它必须跳过一个棋子来吃掉对方的一个棋子,被跳过的那个棋子称为桥或者屏风。“兵”每步只能向前移动一个棋子过河以后,它便增加了向左右移动的能力,并不允许向后移动。4.4 悔棋模板当用户走错棋时,可以允许用户回到上一步走棋的状态,以实现悔棋的功能。5 系统详细设计5.1棋盘的设计首先设计好画布的大小,以及标题,颜色之类的public Gui()this .add(c);this .setTitle(中国象棋 );this .setSize(600,

12、 600);this .setResizable(false);this .setLocationRelativeTo(null );this .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );this .setVisible(true );this .c.addMouseListener( this.c);再在设计好的画布上,画出线条,设计出棋盘,由于棋盘中间有所谓的“河”,所以并不能单纯的用两个for循环画出棋盘的格子,所以选择在中间断掉,空出河界,再在后面下方继续利用fou 循环画出棋盘的另外一方。这样画出来的只有上下两个部分for (in

13、t y=50;y550;y+=50)g.drawLine(100, y,500, y);/画竖线线for (int x=100;x=500;x+=50)g.drawLine(x,50,x,250);for (int x=100;x0)/向下走for (int i=1;r1+i0)/向上走for (int i=1;r1 -ir2;i+) if(this.chessmanr1 -ic1!=0) j+;if (j=0&c1=c2)flag= true;if (c1-c20)/向左走for (int i=1;c1 -ic2;i+) if(this.chessmanr1c1 -i!=0)j+;if (c

14、2-c10)for (int i=1;c1+ic2;i+)/向右走 if(this.chessmanr1c1+i!=0)j+;if (this .chessmanr2c20)flag= false;“炮”的走法设计。if (r2-r10)/向下走for (int i=1;r1+i0)/向上走for (int i=1;r1 -ir2;i+) if (this .chessmanr1 -ic1!=0) j+;if (j=0&c1=c2&this .chessmanr2c2=0)flag= true ;if (j=1&c1=c2&this .chessmanr2c27)flag= true ;if

15、(c1-c20)/向左走for (int i=1;c1 -ic2;i+) if (this .chessmanr1c1 -i!=0) j+;if (c2-c10)/向右走for (int i=1;c1+ic2;i+) if (this .chessmanr1c1+i!=0) j+;if (j=0&r1=r2&this .chessmanr2c2=0)flag= true ;if (j=1&r1=r2&this .chessmanr2c2!=0)flag= true ;if (this .chessmanr2c20)flag= false;break ;“马”的走法设计。马走动的方法是一直一斜,

16、即先横着或直着走一格,然后再斜着走一个对角线,俗称“马走日”。马一次可走的选择点可以达到四周的八个点,故有“八面威风”之说。如果在要去的方向有别的棋子挡住,马就无法走过去,俗称“蹩马腿”。if (r1-r2=2&c1-c2=1& this .chessmanr1-1c1=0)/上左flag= true ;if (r1-r2=2&c2-c1=1& this .chessmanr1-1c1=0)/上右flag= true ;if (r2-r1=2&c1-c2=1& this .chessmanr1+1c1=0)/下左flag= true ;if (r2-r1=2&c2-c1=1& this .ch

17、essmanr1+1c1=0)/下右flag= true ;if (r1-r2=1&c1-c2=2& this .chessmanr1c1 -1=0)/左上flag= true ;if (r2-r1=1&c1-c2=2& this .chessmanr1c1 -1=0)/左下flag= true ;if (r1-r2=1&c2-c1=2& this .chessmanr1c1+1=0)/右上flag= true ;if (r2-r1=1&c2-c1=2& this .chessmanr1c1+1=0)/右下flag= true ;if (this .chessmanr2c20)flag= fa

18、lse;“象”的走法设计。相(象)的主要作用是防守,保护自己的帅(将)。它的走法是每次循对角线走两格,俗称“象走田”。相(象)的活动范围限于“河界”以内的本方阵地,不能过河,且如果它走的“田”字中央有一个棋子,就不能走,俗称“塞象眼”。if (r1-r2=2&c1 -c2=2& this .chessman(r1+r2)/2(c1+c2)/2=0)/左上flag= true ;if (r1-r2=2&c2 -c1=2& this .chessman(r1+r2)/2(c1+c2)/2=0)/右上flag= true ;if (r2-r1=2&c1 -c2=2& this .chessman(r

19、1+r2)/2(c1+c2)/2=0)/左下flag= true ;if (r2-r1=2&c2 -c1=2& this .chessman(r1+r2)/2(c1+c2)/2=0)/右下flag= true ;if (r2=6)flag= false;if (t%2=0)flag= false;if (this .chessmanr2c20)flag= false;“士”的走法设计。仕(士)是帥(将)的贴身保镖,它也只能在九宫内走动。它的行棋路径只能是九宫内的斜线。if (r2-r1=1&c2 -c1=1|r1-r2=1&c1 -c2=1|c1-c2=1&r2 -r1=1|c2-c1=1&r

20、1 -r2=1)flag= true ;if (r2=3|c2=2|c2=6)flag= false;if (this .chessmanr2c20)flag= false;“帥”的走法设计。帅和将是棋中的首脑,是双方竭力争夺的目标。它只能在“九宫”之内活动,可上可下,可左可右,每次走动只能按竖线或横线走动一格。帅与将不能在同一直线上直接对面,否则走方判负。if(r2 -r1=1&c1=c2|r1 -r2=1&c1=c2|c1 -c2=1&r1=r2|c2 -c1=1&r1=r2)flag= true ;if (r2=3|c2=2|c2=6)/ if (r22|c25)flag= false;

21、if(r2 -r10)/将对帅for (int i=1;r1+ir2;i+)if (this .chessmanr1+ic1!=0)j+;if (j=0&c1=c2&this .chessmanr2c2=12)flag= true;if (this .chessmanr2c20)flag= false;“卒”的走法设计。兵(卒)在未过河前,只能向前一步步走,过河以后,除不能后退外,允许左右移动,但也只能一次一步。if (r1=3|r1=4)if(r2 -r1=1&c1=c2)flag= true ;elseif(r2 -r1=1&c1=c2|c1 -c2=1&r1=r2|c2 -c1=1&r1

22、=r2)flag= true ;if(this.chessmanr2c20)flag= false;每个棋子都有其特定的范围,当鼠标点击在其范围内,触及鼠标点击事件,棋子便能走动,当鼠标点击其他区域时,对应无反应。int b = (e.getX() - 50) % 50;int row = (e.getY() - 50) / 50;int col = (e.getX() - 50) / 50;this.repaint();/ 重画棋盘t -;elsereturn;if (e.getX() 520 | e.getY() 520) return;if (e.getY() 70 & e.getY()

23、 120 & e.getY() 170& e.getY() 220 & e.getY() 270 & e.getY() 320 & e.getY() 370 & e.getY() 420 &e.getY() 470 & e.getY() 120 & e.getX() 170 & e.getX() 220 & e.getX() 270 & e.getX() 320 & e.getX() 370 & e.getX() 420 & e.getX() 470 & e.getX() 520 & e.getX() 530) return;for (int i = 0; i = 9; i+) for (in

24、t j = 0; j = 8; j+) if (i * 50 + 80 e.getX() &col = i;/列e.getX() i * 50 + 120) if (j *50 + 30 e.getY() & e.getY() j* 50 + 70) row = j;/行if (this.isSelected = false) /没有选中子if (this.chessmanrowcol = 0) return;/选中子,记录信息this.r = row;this.c = col;this.isSelected = true; else/走子悔棋功能的设计先在画布上设计出一块悔棋的区域,当点击该

25、区域时,象棋便回到上一步象棋所走的状态,从而实现悔棋。该区域代码要放在鼠标点击事件,点击该区域时,便实现悔棋功能。public void mouseClicked(MouseEvent e)boolean flag = this.go(this.r, this.c, row, col);if (flag = true) this.undot0=this.r;this.undot1=this.c;this.undot2=this.chessmanthis.rthis.c;this.undot3=row;this.undot4=col;this.undot5=this.chessmanrowcol

26、;int temp = this.chessmanthis.rthis.c;this.chessmanthis.rthis.c= 0;this.chessmanrowcol= temp;this.repaint();/ 重画棋盘t+;5.4 将军的遍历每触击一下鼠标点击事件,就会对棋盘里面的将军是否存在进行遍历,假如发现一方将军消失,则会弹出对话框,提醒对方赢棋,里面的内容为对方赢的字样for(int m=0;m10;m+)for(int n=0;n9;n+)if(this.chessmanmn=5|this.chessmanmn=12)w+;y=m;z=n;if(w=1&this.chess

27、manyz=5)JOptionPane.showMessageDialog(null, 红方输 , 中国象棋 ,JOptionPane.INFORMA TION_MESSAGE,null);if(w=1&this.chessmanyz=12)JOptionPane.showMessageDialog(null,白方输 , 中国象棋 ,JOptionPane.INFORMA TION_MESSAGE,null);6 系统测试以及运行结果设计出的象棋基本能按照中国的象棋的规则走法来运行,先走的一方为红方,每该哪方走的时候,棋盘的左边都有字样提醒该方下棋。该象棋还拥有悔棋的功能,以帮助用户每当不小心

28、走错棋时,可帮助用户回到上一步。以实现悔棋的效果。7. 总结设计过程及答辩回答问题记载:(至少三个问题)1刚刚开始设计出象棋,红(白)方可以随意走多少步而没有走子限制。如何实现红白两方是轮流走的?以及棋盘旁边是如何提醒该哪方走?答:首先定义一个全局变量t,当无论红白两方走动一步时,变量t 都会自增加1。根据这样的变化,我们可以这么设计,当t 为偶数时,我们规定红方走,当t 为奇数时,我们规定白方走,所以我们可以在红方的棋子后面加上这样的一条语句if (t%2=0) flag= false;白方棋子的后面加上if (t%2=1) flag= false;这样便可实现棋子走动是两方轮流走。同理,当

29、t 为偶数时,我们在画布上显示红方字样,提醒该红方走。当t 为奇数时,画布上显示白方字样,提醒白方走。2.如何实现当一方吃吃掉另外一方的将军,游戏会弹出一个对话框,提醒哪方胜利?答:在鼠标点击事件中,每当完成一个鼠标点击事件,我们都来对棋盘上剩下的子进行遍历,主要是判断两方的将军这个棋子是否存在,当一方的的将军被吃掉时,很显然可以遍历出该方的将军在棋盘上消失,所以弹出对话框提醒另外一方胜利。如何在棋盘中对将军的遍历,通过两个for 循环。for (int m=0;m10;m+)for (int n=0;n9;n+)if (this .chessmanmn=5| this .chessmanmn

30、=12)w+;y=m;z=n;3.如何实现悔棋功能?答:每当走一步棋之前,我们把该状态的棋子状态储存起来,包括起始状态。每当触击鼠标点击事件里面的悔棋时,触发悔棋功能,把 chessman 数组恢复到走棋之前的状态,再重画棋盘。这样便可实现了悔棋功能。指导教师评语:签名:2012年6月日附录:程序核心源代码public classGui extends JFrame private JButton ok=new JButton( 确定 );private MyCanvas c=new MyCanvas();public Gui()this .add(c);this .setTitle(中国象棋

31、 );this .setSize(600, 600);this .setResizable(false);this .setLocationRelativeTo(null );this .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );this .setVisible(true );public static void main(String args) new Gui();package com.itjob;importjava.awt.RenderingHints;importjava.awt.event.MouseEvent;importj

32、avax.swing.JOptionPane;publicvoidmouseClicked(MouseEvente)System.out .println(e.getX()+ t+e.getY()+t+e.getButton();inta=(e.getY()-50)% 50;intb=(e.getX()-50)% 50;introw=(e.getY()-50)/50;intcol=(e.getX()-50)/50;if(e.getX()20)&(e.getY()120)/ 点击悔棋if ( t !=0) this. chessman this. undo t -10this. undo t -11=this. undo t -12;this. chessman this. undo t -13this. undo t -14=this. undo t -15;this.rep

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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