Java程序设计实训报告.docx
- 文档编号:12623902
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:32
- 大小:104.78KB
Java程序设计实训报告.docx
《Java程序设计实训报告.docx》由会员分享,可在线阅读,更多相关《Java程序设计实训报告.docx(32页珍藏版)》请在冰豆网上搜索。
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))
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 程序设计 报告