Java程序设计实训报告.docx

上传人:b****2 文档编号:2151490 上传时间:2023-05-02 格式:DOCX 页数:32 大小:104.78KB
下载 相关 举报
Java程序设计实训报告.docx_第1页
第1页 / 共32页
Java程序设计实训报告.docx_第2页
第2页 / 共32页
Java程序设计实训报告.docx_第3页
第3页 / 共32页
Java程序设计实训报告.docx_第4页
第4页 / 共32页
Java程序设计实训报告.docx_第5页
第5页 / 共32页
Java程序设计实训报告.docx_第6页
第6页 / 共32页
Java程序设计实训报告.docx_第7页
第7页 / 共32页
Java程序设计实训报告.docx_第8页
第8页 / 共32页
Java程序设计实训报告.docx_第9页
第9页 / 共32页
Java程序设计实训报告.docx_第10页
第10页 / 共32页
Java程序设计实训报告.docx_第11页
第11页 / 共32页
Java程序设计实训报告.docx_第12页
第12页 / 共32页
Java程序设计实训报告.docx_第13页
第13页 / 共32页
Java程序设计实训报告.docx_第14页
第14页 / 共32页
Java程序设计实训报告.docx_第15页
第15页 / 共32页
Java程序设计实训报告.docx_第16页
第16页 / 共32页
Java程序设计实训报告.docx_第17页
第17页 / 共32页
Java程序设计实训报告.docx_第18页
第18页 / 共32页
Java程序设计实训报告.docx_第19页
第19页 / 共32页
Java程序设计实训报告.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Java程序设计实训报告.docx

《Java程序设计实训报告.docx》由会员分享,可在线阅读,更多相关《Java程序设计实训报告.docx(32页珍藏版)》请在冰点文库上搜索。

Java程序设计实训报告.docx

Java程序设计实训报告

国际商贸学院

Java实训报告

 

专业:

计算机科学与技术

班级:

学号:

指导老师:

 

前言

Java自问世以来,以其得天独厚的优势,在IT业界掀起了研究、开发它的浪潮,显示了鹏程万里的美好前景。

作为一种与底层硬件无关的、“编写一次,到处运行”的高级语言和计算平台,Java天生就具有将网络上的各个平台连成一体的能力,真正实现了“网络就是计算机”的理念。

以Java为代表的网络的成长,改变了我们的联系方式、生活方式、学习方式和经营方式。

它的来到使我们目睹了一场类似印刷术的重大变革。

毫无疑问,它将影响人类社会的发展,这就是:

Java加速人类进入网络时代!

本次课程设计是配合JAVA程序设计课程,帮助我们深入学习掌握JAVA语言,熟练运用这个工具来编写的。

通过课程设计各个项目的综合训练,不仅培养学生实际分析问题、编程和动手能力,而且还提高了学生的综合素质。

本课程设计尝试使用一些较生动的示例和设计项目,激发学生学习兴趣,引导学生主动学习以及正确理解、接受需要重点掌握的知识点,为参加项目开发及更深入学习做好准备。

本次课程设计主要是用JAVA实现围棋系统,能够实现画笔、画直线、画圆形、并修改该画笔的大小以及颜色。

该围棋程序还需具有悔棋功能以及选择棋盘大小的功能。

 

2014年6月11日

 

 

一、实训目的及要求

1.1实训目的

1.使学生熟练掌握,java编成的基础知识,以及巩固图形界面及绘图知识点。

2.结合软件工程,熟悉软件开发过程。

3.训练了学生学生独立编程以及调试程序的能力。

4.训练学生对于算法的理解和设计能力。

5.加强了学生实际动手能力,以及对于面向对象方法学的理解。

6.巩固图形界面排版,以及界面的设计能力。

7.加强学生对于所学知识的理解及运用。

1.2实训要求

1.需交电子版和纸制板实训报告各一份,电子版海源程序。

2.程序必须可运行。

3.界面必须保证美观。

4.操作简单易学。

5.各项功能不可缺损。

6.报告版面美观,易读。

二、概要设计

1.整个围棋程序分为3个部分:

棋盘、棋子、围棋主类

软件结构图(见图一):

 

 

图1软件结构图

2.围棋软件中的棋盘主类都将采用绘制。

3.整个程序界面将采用固定大小。

三、详细设计

1.围棋程序顶层数据流程图如下:

 

鼠标操作信息棋盘标签信息

 

图2顶层数据流程图

2.功能级数据流图如下:

 

棋子信息

棋盘大小

棋盘大小信息

重置棋盘信息

 

鼠标坐标

 

图3功能级数据流程图

四、功能分析

整个围棋程序分为3个部分:

棋盘、棋子、围棋主类

1.棋盘主类主要功能有:

《1》绘制棋谱及落棋,程序实现重写的pint方法如下:

publicvoidpaint(Graphicsg){

offg.setColor(newColor(180,150,100));

offg.fillRect(0,0,size,size);

//画出棋盘格子

offg.setColor(Color.black);

for(inti=0;i

intx1=left+i*gridLen;

intx2=x1;

inty1=top;

inty2=top+gridNum*gridLen;

offg.drawLine(x1,y1,x2,y2);

x1=left;

x2=left+gridNum*gridLen;

y1=top+i*gridLen;

y2=y1;

offg.drawLine(x1,y1,x2,y2);

}

//画出棋子

for(inti=0;i

for(intj=0;j

if(map[i][j]==null)

continue;

offg.setColor(map[i][j].color==Chesspoint.black?

Color.black

:

Color.white);

offg.fillOval(left+i*gridLen-chessmanLength/2,top+j

*gridLen-chessmanLength/2,chessmanLength,

chessmanLength);

}

//画出鼠标的位置,即下一步将要下的位置

if(mouseLoc!

=null){

offg.setColor(currentTurn==Chesspoint.black?

Color.gray

:

newColor(200,200,250));

offg.fillOval(left+mouseLoc.x*gridLen-chessmanLength/2,top

+mouseLoc.y*gridLen-chessmanLength/2,

chessmanLength,chessmanLength);

}

//把画面一次性画出

g.drawImage(offscreen,80,0,this);

}

《2》吃子,程序实现见源程序。

《3》悔棋,并保存所有已下的棋子,包括在棋盘上的所有棋子和被提掉的,程序实现悔棋back()方法如下:

//悔棋

publicvoidback(){

if(alreadyNum==0){

controlPanel.setMsg("无子可悔");

return;

}

Objectobj=chessman.elementAt(--alreadyNum);

if(objinstanceofChesspoint){

Chesspointqizi=(Chesspoint)obj;

map[qizi.x][qizi.y]=null;

currentTurn=qizi.color;

}else{

Vectorv=(Vector)obj;

for(inti=0;i

Chesspointq=(Chesspoint)(v.elementAt(i));

if(i==v.size()-1){

map[q.x][q.y]=null;

intindex=chessman.indexOf(v);

chessman.setElementAt(q,index);

currentTurn=q.color;

}else{

map[q.x][q.y]=q;

}

}

}

controlPanel.setLabel();

repaint();

}

《4》在该类中使用Vector类型保存踢掉的棋子及这个棋子本身。

2.棋子主类主要功能有:

获得实际的棋子位置,程序实现如下:

publicclassChesspoint

{

publicstaticintblack=0,white=1;

intx,y;

intcolor;

publicChesspoint(inti,intj,intc)

{

x=i;

y=j;

color=c;

}

publicStringtoString()

{//储存x,y位置和颜色

Stringc=(color==black?

"black":

"white");

return"["+x+","+y+"]:

"+c;

}

}

3.围棋主类主要功能:

(1)对围棋界面外观进行初始化,构造方法Chess实现如下:

publicChess(){

this.setTitle("围棋程序");

this.setLayout(newBorderLayout());

jp.setSize(550,490);

jp.setLayout(newBorderLayout());

jp.add(Chessboard.controlPanel,"West");

jp.add(qipan,"Center");

add(jp);

jp.setSize(550,490);

this.setResizable(false);

this.setLayout(newBorderLayout());

this.setSize(550,490);

this.setVisible(true);

}

(2)创建围棋对象,main方法实现如下:

publicstaticvoidmain(String[]args){

//开始下棋程序

ChessIgo=newChess();

 

五、测试数据及运行结果

1.初始界面如图图5.1所示:

图5.1运行结果图

 

2.18x18棋盘测试如图:

图5.2运行结果图

 

3.2.7x7棋盘测试如图:

图5.3运行结果图

 

4.悔棋标签反映无子可悔如图:

图5.4运行结果图

 

六、总结

时光如梭,光阴似箭,java实训一晃而过,通过这一期的实训,虽然实训的时间不长,但是总体上收获挺大的,当我们正式准备学习实训java编程技术时,让我感到非常高兴,因为java一直学的是课本知识,所以实训对于我来说是必须要学会熟练操作的。

当然开始学习后也并非是想象中那样顺利,开始的学习让我异常感到学习任务的艰巨,因为学习中我遇到了很多以前未曾遇到的难点,有时后也难免会失去耐心,但是,通过老师的指导,自己的努力的练习,我顺利的化解了一道道的障碍。

克服了java学习上的一道道难关,现在自己已经基本掌握了java的基础知识。

我很清楚以后的路还很长,再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达。

任何业绩的质变都来自于量变的积累,成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成,让我们将事前的忧虑,换为事前的思考和计划吧!

在实训的过程中,我深深感觉到自身所学知识的有限。

以后要更加努力学习.

源代码:

1、Chessboard类

importjava.awt.*;

importjava.awt.event.*;

importjava.util.*;

importjavax.swing.JPanel;

publicclassChessboardextendsJPanel{

//默认的棋盘方格长度及数目

publicstaticfinalint_gridLen=22,_gridNum=19;

/*

*利用Vector保存所有已下的棋子,包括在棋盘上的所有棋子和被踢掉的,若某一次

*落子没有造成踢子,包括所有被这个棋子提掉的棋子及这个棋子本身,Vector最后

*/

privateVectorchessman;

privateintalreadyNum;//已下数目

privateintcurrentTurn;//轮到谁下

privateintgridNum,gridLen;//方格长度及数目

privateintchessmanLength;//棋子的直径

privateChesspoint[][]map;//在棋盘上的所有棋子

privateImageoffscreen;

privateGraphicsoffg;

privateintsize;//棋盘的宽度及高度

privateinttop=13,left=13;//棋盘左边及上边的边距

privatePointmouseLoc;//鼠标的位置,即map数组中的下标

publicstaticControlPanelcontrolPanel;//控制面板

//获得控制板的距离

publicintgetWidth(){

returnsize;

}

publicintgetHeight(){

returnsize;

}

//绘制棋盘外观

publicChessboard(){

gridNum=_gridNum;

gridLen=_gridLen;

chessmanLength=gridLen*9/10;

size=2*left+gridNum*gridLen;

addMouseListener(newPutChess());

addMouseMotionListener(newMML());

setLayout(newBorderLayout());

controlPanel=newControlPanel();

startGame();

}

publicvoidaddNotify(){

super.addNotify();

offscreen=createImage(size,size);

offg=offscreen.getGraphics();

}

publicvoidpaint(Graphicsg){

offg.setColor(newColor(180,150,100));

offg.fillRect(0,0,size,size);

//画出棋盘格子

offg.setColor(Color.black);

for(inti=0;i

intx1=left+i*gridLen;

intx2=x1;

inty1=top;

inty2=top+gridNum*gridLen;

offg.drawLine(x1,y1,x2,y2);

x1=left;

x2=left+gridNum*gridLen;

y1=top+i*gridLen;

y2=y1;

offg.drawLine(x1,y1,x2,y2);

}

//画出棋子

for(inti=0;i

for(intj=0;j

if(map[i][j]==null)

continue;

offg.setColor(map[i][j].color==Chesspoint.black?

Color.black

:

Color.white);

offg.fillOval(left+i*gridLen-chessmanLength/2,top+j

*gridLen-chessmanLength/2,chessmanLength,

chessmanLength);

}

//画出鼠标的位置,即下一步将要下的位置

if(mouseLoc!

=null){

offg.setColor(currentTurn==Chesspoint.black?

Color.gray

:

newColor(200,200,250));

offg.fillOval(left+mouseLoc.x*gridLen-chessmanLength/2,top

+mouseLoc.y*gridLen-chessmanLength/2,

chessmanLength,chessmanLength);

}

//把画面一次性画出

g.drawImage(offscreen,3,0,this);

}

//更新棋盘

publicvoidupdate(Graphicsg){

paint(g);

}

//下棋子

classPutChessextendsMouseAdapter{//放一颗棋子

publicvoidmousePressed(MouseEventevt){

intxoff=left/2;

intyoff=top/2;

intx=(evt.getX()-xoff)/gridLen;

inty=(evt.getY()-yoff)/gridLen;

if(x<0||x>gridNum||y<0||y>gridNum)

return;

if(map[x][y]!

=null)

return;

//*****************清除多余的棋子**********************

if(alreadyNum

intsize=chessman.size();

for(inti=size-1;i>=alreadyNum;i--)

chessman.removeElementAt(i);

}

//****************************************************

Chesspointqizi=newChesspoint(x,y,currentTurn);

map[x][y]=qizi;

//****************************************************

chessman.addElement(qizi);

alreadyNum++;

if(currentTurn==Chesspoint.black)

currentTurn=Chesspoint.white;

else

currentTurn=Chesspoint.black;

//**************判断在[x,y]落子后,是否可以提掉对方的子

tizi(x,y);

//***************判断是否挤死了自己,若是则已落的子无效

if(allDead(qizi).size()!

=0){

map[x][y]=null;

repaint();

controlPanel.setMsg("挤死自己");

//******************back**************

chessman.removeElement(qizi);

alreadyNum--;

if(currentTurn==Chesspoint.black)

currentTurn=Chesspoint.white;

else

currentTurn=Chesspoint.black;

return;

}

mouseLoc=null;

//更新控制面板

controlPanel.setLabel();

}

publicvoidmouseExited(MouseEventevt){//鼠标退出时,清除将要落子的位置

mouseLoc=null;

repaint();

}

}

privateclassMMLextendsMouseMotionAdapter{//取得将要落子的位置

publicvoidmouseMoved(MouseEventevt){

intxoff=left/2;

intyoff=top/2;

intx=(evt.getX()-xoff)/gridLen;

inty=(evt.getY()-yoff)/gridLen;

if(x<0||x>gridNum||y<0||y>gridNum)

return;

if(map[x][y]!

=null)

return;

mouseLoc=newPoint(x,y);

repaint();

}

}

//判断在[x,y]落子后,是否可以踢掉对方的子

publicstaticint[]xdir={0,0,1,-1};

publicstaticint[]ydir={1,-1,0,0};

publicvoidtizi(intx,inty){

Chesspointqizi;

if((qizi=map[x][y])==null)

return;

intcolor=qizi.color;

//取得棋子四周围的几个子

Vectorv=around(qizi);

for(intl=0;l

Chesspointq=(Chesspoint)(v.elementAt(l));

if(q.color==color)

continue;

//若颜色不同,取得和q连在一起的所有已死的子,

//若没有已死的子则返回一个空的Vector

Vectordead=allDead(q);

//移去所有已死的子

removeAll(dead);

//如果踢子,则保存所有被踢掉的棋子

if(dead.size()!

=0){

Objectobj=chessman.elementAt(alreadyNum-1);

if(objinstanceofChesspoint){

qizi=(Chesspoint)(chessman.elementAt(alreadyNum-1))

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2