Java程序设计实训报告.docx
- 文档编号:14289726
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:28
- 大小:171.56KB
Java程序设计实训报告.docx
《Java程序设计实训报告.docx》由会员分享,可在线阅读,更多相关《Java程序设计实训报告.docx(28页珍藏版)》请在冰点文库上搜索。
Java程序设计实训报告
陕西国际商贸学院
Java实训报告
专业:
计算机科学与技术
班级:
姓名:
学号:
指导老师:
Java自问世以来,以其得天独厚的优势,在IT业界掀起了硏究、开发它的浪潮,显示了鹏程万里的美好前景。
作为一种与底层硬件无关的、"编写一次,到处运行”的高级语言和计算平台Ca天生就具有将网络上的各个平台连成—体的能力,真正实现了“网络就是计算机"的理念。
以Java为代表的网络的成长,改变了我们的联系方式、生活方式、学习方式和经营方式。
它的来到使我们目睹了一场类似印刷术的重大变革。
毫无疑问,它将影响人类社会的发展,这就是:
Java加速人类进入网络时代!
本次课程设计是配合JAVA程序设计课程z帮助我们深入学习掌握JAVA语言,熟练运用这个工具来编写的。
通过课程设计各个项目的综合训练,不仅培养学生实际分析问题、编程和动手能力,而且还提高了学生的综合素质。
本课程设计尝试使用一些较生动的示例和设计项目,激发学生学习兴趣,引导学生主动学习以及正确理解、接受需要重点掌握的知识点,为参加项目开发及更深入学习做好准备。
本次课程设计主要是用JAVA实现围棋系统,能够实现画笔、画直线、画圆形、并修改该画笔的大小以及颜色。
该围棋程序还需具有悔棋功能以及选择棋盘大小的功能。
2014年6月11日
一、实训目的及要求4
二、概要设计5
三、详细设计6
四、功能分析7
五、测试数据及运行结果10
六、总结14
实训目的及要求
1.1实训目的
1.使学生熟练掌握java编成的基础知识,以及巩固图形界面及绘图知识点。
2.结合软件工程,熟悉软件开发过程。
3.训练了学生学生独立编程以及调试程序的能力。
4.iJ11练学生对于算法的理解和设计能力。
5加强了学生实际动手能力,以及对于面向对象方法学的理解。
6•巩固图形界面排版,以及界面的设计能力。
7.加强学生对于所学知识的理解及运用。
1.2实训要求
1.需交电子版和纟氏制板实训报告各一份,电子版海源程序。
2.程序必须可运行。
3.界面必须保证美观。
4•操作简单易学。
5.各项功能不可缺损。
6.报告版面美观z易读。
二概要设计
1.整个围棋程序分为3个部分:
棋盘、棋子、围棋主类
软件结构图(见图一):
图1软件结构图
2.围棋软件中的棋盘主类都将采用绘制。
3.整个程序界面将采用固定大小。
三.详细设计
图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 intxl=left+i*gridLen; intx2二xl; intyl二top; inty2二top+gridNum*gridLen; offg.drawLine(xl,ylzx2fy2); xl=left; x2二left+gridNum*gridLen; yl二top+i*gridLen; y2=yl;offg.drawLine(xl,ylzx2fy2); } 〃画出棋子 for(inti=0;ivgridNum+1;i++) for(intj=0;jvgridNum+1;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(200z200,250)); offg.fillOval(left+mouseLoc.x*gridLen- chessmanLength/2,top +mouseLoc.y*gridLen-chessmanLength/2,chessmanLength,chessmanLength); } 〃把画面一次性画出 g.drawlmage^ffscreen,80,0zthis); } 《2》吃子,程序实现见源程序。 《3》悔棋,并保存所有已下的棋子,包括在棋盘上的所有棋子和被提掉的,程序实现悔棋back()方法如下: 〃悔棋 publicvoidback(){ 讦(alreadyNum二二0){controlPanel.setMsgC'无子可悔");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); currentTum二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"); returnT+x+;"+y+"]: "+c; } } 3.围棋主类主要功能: (1)对围棋界面外观进行初始化,构造方法Chess实现如下: publicChess(){ this.setTitle(”围棋程序J; this.setLayout(newBorderLayout()); jp.setSize(550,490); jp.setLayout(newBorderLayout()); jp.add(Chessboard.controlPanel,"West"); jp.add(qipan,nCenterj; 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.27x7棋盘测试如图: 图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(); } publicvoidaddNotifyO{ super.addNotifyO; offscreen=createlmage(sizersize);offg=offscreen.getGraphics(); } publicvoidpaint(Graphicsg){offg.setColor(newColor(180f150z100));offg.fillRect(0,0,size,size); 出棋盘格子offg.setColor(Color.black);for(inti=0;i intx2=xl; intyl=top; inty2=top+gridNum*gridLen; offg.drawLineJxl,ylzx2ry2); xl=left; x2=left+gridNum*gridLen; yl=top+i*gridLen; y2二yl; offg.drawLineJxl,ylzx2ry2); } 出棋子 for(inti=0;i for(intj=0;j if(map[i][j]二二null) continue; Color.black offg.setColor(map[i][j].color==Chesspoint.black? : Color.white); offg.fiIlOvaI(left+i*gridLen-chessmanLength/2,top+j *gridLen-chessmanLength/2,chessmanLength,chessmanLength); } 出鼠标的位置,即下一步将要下的位置 if(mouseLoc! =null){ offg.setCoIor(currentTum==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.drawlmage(offscreenz3,Ofthis); //更新棋盘 publicvoidupdate(Graphicsg){ paint(g); } //T棋子 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(xfy,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); //***************判断是否挤死了自己r若是则已落的子无效 if(allDead(qizi).size()! =0){map[x][y]=null; repaint(); controlPaneLsetMsg(n挤死自己'); 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={lr-lf0,0}; publicvoidtizi(intxfinty){ Chesspointqizi; if((qizi=map[x][y])==null) return; intcolor=qizi.color; 徳得棋子四周围的几个子 Vectorv=around(qizi); for(intI=0;I Chesspointq=(Chesspoint)(v.elementAt(l)); if(q.color==color) continue; 颜色不同,取得和q连在一起的所有已死的子, 没有已死的子则返回一个空的Vector Vectordead=allDead(q); /於去所有已死的子 removeAII(dead); 〃如果踢子,则保存所有被踢掉的棋子 if(dead.size()! =0){ Objectobj=chessman・elementAt(alreadyNum-1); if(objinstanceofChesspoint){ qizi=(Chesspoint)(chessman.elementAt(alreadyNum- D); dead.addElement(qizi); }else{ Vectorvector=(Vector)obj; for(inti=0;i dead.addElement(vector.elementAt(i)); } //更新Vectorchessman中的第num个元素 chessman.setElementAt(deadalreadyNum-1); } } repaint(); 〃判断棋子周围是否有空白 publicbooleansideByBlank(Chesspointqizi){ for(intI=0;I intxl=qizi.x+xdir[l]; intyl=qizi.y+ydir[l]; if(xl<0||xl>gridNum||yl<0||yl>gridNum)continue; if(map[xl][yl]==null) returntrue; } returnfalse; } /庶得棋子四周围的几个子 publicVectoraround(Chesspointqizi){ Vectorv=newVector(); for(intI=0;I intxl=qizi.x+xdir[l]; intyl=qizi.y+ydir[l]; if(xl<0||xl>gridNum||yl<0||yl>gridNum||map[xl][yl]==null) continue; v.addElement(map[xl][yl]); }returnv; /恋得连在一起的所有已死的子 publicV
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 程序设计 报告