java象棋课程设计.docx

上传人:b****1 文档编号:22793723 上传时间:2023-04-28 格式:DOCX 页数:47 大小:386.69KB
下载 相关 举报
java象棋课程设计.docx_第1页
第1页 / 共47页
java象棋课程设计.docx_第2页
第2页 / 共47页
java象棋课程设计.docx_第3页
第3页 / 共47页
java象棋课程设计.docx_第4页
第4页 / 共47页
java象棋课程设计.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

java象棋课程设计.docx

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

java象棋课程设计.docx

java象棋课程设计

 

课程名称:

JAVA课程设计

 

题目:

“网络象棋”游戏的设计与开发

系名:

信息工程系

专业班级:

软件工程

姓名:

学号:

指导教师:

 

2012年6月18日

 

课程设计任务书

学生姓名:

专业班级:

指导教师:

工作单位:

信息工程系

设计题目:

“网络象棋”游戏的设计与开发

初始条件:

《网络象棋》,网络版的棋类游戏。

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

使用JAVA开发一个网络版的象棋游戏。

该游戏包括网络功能,棋盘功能和辅助功能。

本系统使用JAVASWING技术和事件处理机制进行棋盘界面的设计,开发和功能实现,使用Socket网络编程和多线程技术进行多客户端之间的对战。

系统总体架构如下:

系统功能点说明如下:

编号

功能名

功能描述

1

网络功能

通过网络通信,实现多客户端对战

2

棋盘功能

绘制棋盘

绘制棋盘与棋子

下棋功能

点击棋子,可以走动

下棋规则

设计相应算法,控制不同棋子的走法

3

辅助功能

悔棋

通过记录走棋步骤,实现悔棋

截屏

关键步骤,实现截屏

录制

可以录制每一步下棋的视频

4

系统打包

系统打包,制作安装程序

设计报告撰写格式要求:

一、课程设计说明书(或报告书)正文内容

【设计题目】例如:

“即时通”网络通信系统的设计与开发

【开发环境】硬件环境:

微机系列,内存在1G以上,软件环境:

MicrosoftWindowsXP

【开发工具】NetBeansIDE

【完成时间】2012.6.4-----2012.6.15

【需求分析】分析阐述要实现的系统应具有什么样的功能。

【系统总体设计方案】

在明确了所要解决的问题后,很自然地就要提出自己解决问题的思路和方案。

让读者了解方案的总体设计和关键技术。

要阐述自己的设计方案,说明为什么要选择或设计这样的方案。

具体包括:

系统总的设计思路,体系结构,总体架构,功能模块图;

各功能模块所要达到的设计目标的简单介绍;

设计的数据字典(数据库、表的结构);

使用的设计软硬件环境和开发技术和平台等。

【系统详细设计】

在这部分中,要将整个开发工作的内容进行详细的介绍。

一般按照功能模块分成几部分来介绍。

每部分应包括文字叙述、界面图片、关键实现技术(操作或代码)等几个方面综合说明问题。

【系统调试和测试】

调试:

介绍设计过程中遇到的问题和解决方法。

测试:

介绍如何测试系统,测试中发现的问题和解决方案。

【结束语】

这部分篇幅不大,对整个设计中做的工作、获得的成果、心得体会等做一个简单小结。

【参考文献】罗列在设计过程中查阅的文献名称

注意:

参考文献罗列的格式为

资料编号•作者姓名•文献或期刊名称•出版社名称,文献的出版时间或期刊的期号

例如:

文献[1]吕凤翥,马皓.Java语言程序设计(第2版)[M].北京:

清华大学出版社,2010

期刊[2]石振国.用JSP实现对Web数据库的访问[J].计算机应用,2010(05):

5-8.

二、课程设计说明书(或报告书)正文的书写格式简介

一、正文标题层次正文题序层次是文章结构的框架,一般采用社会通用的论文书写形式。

即章条序码统一用阿拉伯数字表示,题序层次可以分为若干级,各级号码之间加小圆点,末尾一级的后面不加小圆点,层次分级一般不超过四级为宜,示例如下:

第一级(章)

1

2

3

……

第二级(条)

1.1

1.2…

2.1

2.2…

3.1

3.2…

……

第三级(条)

1.1.1

1.1.2…

1.2.1

1.2.2…

2.1.1

2.1.2…

2.2.1

2.2.2…

3.1.1

3.1.2…

3.2.1

3.2.2…

……

二、表格每个表格应有自己的表序与表题,表序与表题间空一格。

例如:

表1.1XXXX,且表题与表序应写在表格的上方正中处。

三、插图插图图面要整齐、美观,插图应与正文呼应,不能脱节。

每幅插图应有图序与图题,图序编号要连续,图序与图题间空一格且要放在插图下方居中处。

四、公式公式应另起一行写在稿纸的中央。

时间安排:

日期

任务

课程内容

6.18-19

棋盘界面的绘制

Eclipse/NetBeans使用

Swing技术

6.19-20

实现棋子的走动

事件代理

6.20-21

棋子规则实现

 Socket,Thread,JavaOO

 JAVA数据结构

6.25

辅助功能实现

6.26-27

网络通讯

6.28

系统打包验收

install4j使用

指导教师签字:

2012年6月14日

系主任签字:

2012年6月15日

 

1目标

用JAVA开发一个象棋游戏。

让我们熟悉JAVA基本事件处理,学会java面向对象的设计。

以及java各种控件及图像用户的界面的设计使用,分别掌握基本工具继承抽象类接口。

输入输出,流程控制,开发环境,实现简单的功能设计,帮助熟练的掌握有关java的知识结构体系。

通过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型,对面向对象中的继承和多态的概念要理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。

2软件开发环境与技术简介

2.1开发工具介绍

Eclipse

Eclipse是一个开放源代码的、基于Java的可扩展开发平台。

就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。

虽然大多数用户很乐于将Eclipse当作Java集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。

Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。

由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。

这种平等和一致性并不仅限于Java开发工具。

尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C++和COBOL等编程语言的插件已经可用,或预计将会推出。

Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。

2.2硬件环境

1.操作系统:

MicrosoftWindowsXP。

2.内存:

1G内存以上。

2.3软件环境

开发工具选用Eclipse

3系统需求分析

提供棋盘和棋子;

设定棋子的走棋规则;

该哪方走棋时,旁边会有提示哪方走棋;

可以悔棋;

判断胜负;

4系统总体设计

4.1棋盘模板

中国象棋是双方在有着9调竖线和10条横线的棋盘上对弈,竖线和横线的交叉称为棋点或对弈点。

河界将棋盘分成两等份,每一边都有一块有9个点组成的九宫。

4.2棋子模板

利用一个二位数组,画出各个棋子。

4.3棋子规则模板

规定各个棋子的走法规则,使每个棋子都是在棋点上行走,而不是在方格中行走

如棋子“将”,“帥”和“士”只能在九宫内移动,并且“将”和“帅”每一步只可以水平或垂直移动一个棋点;“士”只能在九宫内移动,并且它每一步只可以沿着对角线移动一个棋点;“象”必须一次沿着对角线方向走两个棋点,但它不能过河也不能跳过或穿越障碍,即“象”不能别眼,“马”没一步只可以水平或垂直移动两个棋点,但必须按对角线向左或向右移动。

中国象棋的“马”不能跳过障碍,即马不能别腿。

“车”可以水平或垂直方向移动人一个无障碍的点。

“炮”移动起来和车类似,但它必须跳过一个棋子来吃掉对方的一个棋子,被跳过的那个棋子称为桥或者屏风。

“兵”每步只能向前移动一个棋子过河以后,它便增加了向左右移动的能力,并不允许向后移动。

4.4悔棋模板

当用户走错棋时,可以允许用户回到上一步走棋的状态,以实现悔棋的功能。

5系统详细设计

5.1棋盘的设计

首先设计好画布的大小,以及标题,颜色之类的

publicGui()

{

this.add(c);

this.setTitle("中国象棋");

this.setSize(600,600);

this.setResizable(false);

this.setLocationRelativeTo(null);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

this.c.addMouseListener(this.c);

}

再在设计好的画布上,画出线条,设计出棋盘,由于棋盘中间有所谓的“河”,所以并不能单纯的用两个for循环画出棋盘的格子,所以选择在中间断掉,空出河界,再在后面下方继续利用fou循环画出棋盘的另外一方。

这样画出来的只有上下两个部分

for(inty=50;y<550;y+=50)

g.drawLine(100,y,500,y);

//画竖线线

for(intx=100;x<=500;x+=50)

g.drawLine(x,50,x,250);

for(intx=100;x<=500;x+=50)

g.drawLine(x,300,x,500);

g.drawLine(100,250,100,300);

g.drawLine(500,250,500,300);

这只是单独的画出格子,由于“帥”和“士”所在的地方特殊,而且它们在一般情况下,也只能在九宫格里面走动,而且“士”有斜着走的规则,所以又要当初画出斜线。

g.drawLine(250,50,350,150);

g.drawLine(250,150,350,50);

g.drawLine(250,400,350,500);

g.drawLine(250,500,350,400);

在中间的“河界”画上“楚河汉界”字样

Fontfont0=newFont("方正舒体",Font.BOLD,40);

g.setFont(font0);

g.drawString("楚河",175,288);

Fontfont1=newFont("方正舒体",Font.BOLD,40);

g.setFont(font1);

g.drawString("漢界",355,288);

5.2棋子的设计

设计思想,定义一个二维数组,数组的下标分别对应为棋盘里面的格子坐标,然后分别给定义的数组一个确切的值,不同的值对应不同的棋子,分配好“车”、“马”、“象”、“士”、“帥”、“炮”、“卒”。

this.chessman[0][0]=1;

this.chessman[0][1]=2;

this.chessman[0][2]=3;

this.chessman[0][3]=4;

this.chessman[0][4]=5;

this.chessman[0][5]=4;

this.chessman[0][6]=3;

this.chessman[0][7]=2;

this.chessman[0][8]=1;

this.chessman[2][1]=6;

this.chessman[2][7]=6;

this.chessman[3][0]=7;

this.chessman[3][2]=7;

this.chessman[3][4]=7;

this.chessman[3][6]=7;

this.chessman[3][8]=7;

//红方棋子

this.chessman[9][0]=8;

this.chessman[9][1]=9;

this.chessman[9][2]=10;

this.chessman[9][3]=11;

this.chessman[9][4]=12;

this.chessman[9][5]=11;

this.chessman[9][6]=10;

this.chessman[9][7]=9;

this.chessman[9][8]=8;

this.chessman[7][1]=13;

this.chessman[7][7]=13;

this.chessman[6][0]=14;

this.chessman[6][2]=14;

this.chessman[6][4]=14;

this.chessman[6][6]=14;

this.chessman[6][8]=14;

在已经分配好的棋子数组上,对各个对应棋子数组分别画出相应的棋子

switch(this.chessman[row][col])

{

case1:

//黑方:

g.setColor(color.black);

g.fillOval(x-20,y-20,40,40);

g.setColor(Color.white);

g.setFont(font);

g.drawString("车",x-16,y+10);

break;

case2:

//黑方:

g.setColor(color.black);

g.fillOval(x-20,y-20,40,40);

g.setColor(Color.white);

g.setFont(font);

g.drawString("马",x-16,y+10);

break;

case3:

//黑方:

g.setColor(color.black);

g.fillOval(x-20,y-20,40,40);

g.setColor(Color.white);

g.setFont(font);

g.drawString("象",x-16,y+10)

break;

case4:

//黑方:

g.setColor(color.black);

g.fillOval(x-20,y-20,40,40);

g.setColor(Color.white);

g.setFont(font);

g.drawString("士",x-16,y+10);

break;

case5:

//黑方:

g.setColor(color.black);

g.fillOval(x-20,y-20,40,40);

g.setColor(Color.white);

g.setFont(font);

g.drawString("将",x-16,y+10);

break;

case6:

//黑方:

g.setColor(color.black);

g.fillOval(x-20,y-20,40,40);

g.setColor(Color.white);

g.setFont(font);

g.drawString("炮",x-16,y+10);

break;

case7:

//黑方:

g.setColor(color.black);

g.fillOval(x-20,y-20,40,40);

g.setColor(Color.white);

g.setFont(font);

g.drawString("卒",x-16,y+10);

break;

case8:

g.setColor(color.black);

g.fillOval(x-20,y-20,40,40);

g.setColor(Color.black);

g.setColor(Color.red);

g.setFont(font);

g.drawString("車",x-16,y+10);

break;

case9:

g.setColor(color.black);

g.fillOval(x-20,y-20,40,40);

g.setColor(Color.black);

g.setColor(Color.red);

g.setFont(font);

g.drawString("馬",x-16,y+10);

break;

case10:

g.setColor(color.black);

g.fillOval(x-20,y-20,40,40);

g.setColor(Color.black);

g.setColor(Color.red);

g.setFont(font);

g.drawString("相",x-16,y+10);

break;

case11:

g.setColor(color.black);

g.fillOval(x-20,y-20,40,40);

g.setColor(Color.black);

g.setColor(Color.red);

g.setFont(font);

g.drawString("仕",x-16,y+10);

break;

case12:

g.setColor(color.black);

g.fillOval(x-20,y-20,40,40);

g.setColor(Color.black);

g.setColor(Color.red);

g.setFont(font);

g.drawString("帥",x-16,y+10);

break;

case13:

g.setColor(color.black);

g.fillOval(x-20,y-20,40,40);

g.setColor(Color.black);

g.setColor(Color.red);

g.setFont(font);

g.drawString("炮",x-16,y+10);

break;

case14:

g.setColor(color.black);

g.fillOval(x-20,y-20,40,40);

g.setColor(Color.black);

g.setColor(Color.red);

g.setFont(font);

g.drawString("兵",x-16,y+10);

break;

}

5.3各个棋子走法规则的设计

“车”的走法设计,车在象棋中威力最大,无论横线、竖线均可行走,只要无子阻拦,步数不受限制。

因此,一车可以控制十七个点,故有“一车十子寒”之称。

if(r2-r1>0)//向下走

for(inti=1;r1+i

{if(this.chessman[r1+i][c1]!

=0)

j++;

}

if(r1-r2>0)//向上走

for(inti=1;r1-i>r2;i++)

{if(this.chessman[r1-i][c1]!

=0)

j++;

}

if(j==0&&c1==c2)

flag=true;

if(c1-c2>0)//向左走

for(inti=1;c1-i>c2;i++)

{if(this.chessman[r1][c1-i]!

=0)

j++;

}

if(c2-c1>0)//向右走

for(inti=1;c1+i

{if(this.chessman[r1][c1+i]!

=0)

j++;

}

if(this.chessman[r2][c2]<=7&&this.chessman[r2][c2]>0)

flag=false;

“炮”的走法设计。

if(r2-r1>0)//向下走

for(inti=1;r1+i

{if(this.chessman[r1+i][c1]!

=0)

j++;

}

if(r1-r2>0)//向上走

for(inti=1;r1-i>r2;i++)

{if(this.chessman[r1-i][c1]!

=0)

j++;

}

if(j==0&&c1==c2&&this.chessman[r2][c2]==0)

flag=true;

if(j==1&&c1==c2&&this.chessman[r2][c2]>7)

flag=true;

if(c1-c2>0)//向左走

for(inti=1;c1-i>c2;i++)

{if(this.chessman[r1][c1-i]!

=0)

j++;

}

if(c2-c1>0)//向右走

for(inti=1;c1+i

{if(this.chessman[r1][c1+i]!

=0)

j++;

}

if(j==0&&r1==r2&&this.chessman[r2][c2]==0)

flag=true;

if(j==1&&r1==r2&&this.chessman[r2][c2]!

=0)

flag=true;

if(this.chessman[r2][c2]<=7&&this.chessman[r2][c2]>0)

flag=false;

break;

“马”的走法设计。

马走动的方法是一直一斜,即先横着或直着走一格,然后再斜着走一个对角线,俗称“马走日”。

马一次可走的选择点可以达到四周的八个点,故有“八面威风”之说。

如果在要去的方向有别的棋子挡住,马就无法走过去,俗称“蹩马腿”。

if(r1-r2==2&&c1-c2==1&&this.chessman[r1-1][c1]==0)//上左

flag=true;

if(r1-r2==2&&c2-c1==1&&this.chessman[r1-1][c1]==0)//上右

flag=true;

if(r2-r1==2&&c1-c2==1&&this.chessman[r1+1][c1]==0)//下左

flag=true;

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

当前位置:首页 > 小学教育 > 英语

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

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