辽宁工业大学JAVA课程设计坦克大战_第1页
辽宁工业大学JAVA课程设计坦克大战_第2页
辽宁工业大学JAVA课程设计坦克大战_第3页
辽宁工业大学JAVA课程设计坦克大战_第4页
辽宁工业大学JAVA课程设计坦克大战_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE辽宁工业大学课程设计说明书(论文)辽宁工业大学《Java语言程序设计》课程设计(论文)题目:坦克游戏院(系):软件学院专业班级:软件工程133班学号:学生姓名:指导教师:翟宝峰参考网址:教师职称:副教授起止时间:2014.6.9——2014.6.20课程设计(论文)任务及评语院(系):软件学院教研室:软件教研室网址资料来源IT教视汇专业班级软件工程133班课程设计(论文)题目坦克游戏课程设计(论文)任务任务与要求:掌握面向对象程序设计语言JAVA的基本语法掌握JAVA面向对象设计的思想,掌握VJAVA6.0与MyEclipsJAVA开发工具的使用(4).运用标准JAVA规范设计应用程序设计过程中,要严格遵守设计的时间安排,听从指导教师的指导。正确地完成上述内容,规范完整地撰写出设计报告。指导教师评语及成绩成绩:指导教师签字:2014年6月24日辽宁工业大学课程设计说明书(论文)PAGE16目录第1章课程设计目的与要求 11.1设计目的 11.2实验环境 11.3预备知识 11.4设计要求 1第2章课程设计内容 22.1课题描述 22.2系统设计 32.2.1功能分析 32.2.2面向对象设计 42.2.2类成员描述 52.3程序实现 62.3.1源码分析 62.3.2运行结果 13第3章总结 15参考文献 16第1章课程设计目的与要求1.1设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程《JAVA语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。(3)利用所学知识,开发小型应用系统,掌握运用JAVA语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。(5)掌握面向对象程序设计的方法。(6)熟练掌握JAVA语言的基本语法,灵活运用各种数据类型。(7)进一步掌握在集成环境下如何调试程序和修改程序。1.2实验环境硬件要求能运行Windows操作系统的微机系统。JAVA语言应用程序开发软件使用:VJAVA系统,或其他JAVA语言应用程序开发软件。1.3预备知识熟悉JAVA语言程序设计的基本知识及VJAVA编辑器的使用方法。1.4设计要求1.仔细分析设计题目,画出程序流程图,编写程序源代码。2.积极上机调试源程序,增强编程技巧与调程能力。3.认真书写课程设计预习报告,课程设计说明书。4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。第2章课程设计内容2.1课题描述随着手机的日益普及,java功能在移动设备上的实现及java应用程序产生的影响力,对丰富人们的生活内容,提供便捷的咨询起着不可忽视的作用。本项目介绍了坦克大战的基本构建方法、java的相关技术及本程序的结构分析和具体功能的实现。游戏是在Eclipse环境下编程。本项目重点运用了图形化用户界面GUI,Thread多线程的有关知识,其中涉及了绘图工具的运用,事件处理操作以及图形的碰撞检测等知识点。通过此课程设计,使学生巩固所学知识、培养学生动手能力,了解Java的面向对象的体系结构。学生用Java语言设计一个完整的应用程序,综合应用所学知识完成软件的分析、设计、调试和总结,提高学生对Java语言的综合应用能力和解决问题的能力。人类进入21世纪,全球一体化,互联网就起到重要的作用,而且随着互联网的不断发展,信息技术逐渐发展壮大,将成为网络经济的核心。其中计算机、网络通信的发展最为迅速。在现今电子信息高速发展的时代,网络游戏已经深入到人们的日常生活中,成为老少皆宜的娱乐方式。游戏是全球最大的娱乐经济项目之一,已经被命名为“第九艺术”。而由“游戏”派生出来的职业,除了软件开发外,游戏包装宣传推广、攻略指导、网络游戏管理员和职业游戏玩家等,已成为了一系列专门的岗位。面对游戏产业如此巨大的市场空间,国内各大城市纷纷加大了这方面的人才培养,中国的游戏人才培训已随着游戏行业的总体发展开始逐步迈入了正轨。虽然说中国的游戏行业开始逐步的迈入了正轨,但是现今,游戏人才出现严重的瓶颈时期,高校的扩招、金融危机的侵袭直接影响着我们最关心的就业问题,但是另一方面游戏人才的缺乏又直接制约着行业的发展,这就更加严格了对社会培训机构的稳定性和正规性的要求。在我国,游戏人才培养体系还未健全,部分开设了相关专业的高校,游由于理论和实践的脱离无法完全满足网游公司对人才的需求。所以,就中国目前的市场分析来看,加强游戏产业必须在多渠道人才培养体系上加快突破,尽快建立起多渠道人才培养体系,来满足社会对游戏人才的需求。此课程设计是一个小游戏(坦克大战)的实现,主要运用了用户图形界面,程序接口和基本函数绘制来实现,事件监听(包括鼠标事件,键盘事件,响应时间)也是这个程序的特色。总之,本游戏在用户界面的可操作性、游戏的美观度、计分计时存储结果方便都基本完善,有一定的可玩性。2.2系统设计2.2.1功能分析坦克大战游戏是在Eclipse环境下编程的游戏,其中包括对主战坦克的编写、坦克的初始位置的编写、坦克的移动方向的编写、坦克的速度的编写、坦克的子弹速度的编写、敌军的子弹速度的编写、设置游戏难度的编写、子弹的编写、敌军坦克的编写、构造函数的编写,初始化敌军坦克的位置和状态的编写、键盘控制坦克的移动的编写、发弹的编写、判断是否被击中的编写、判断是否击中敌军的编写等。通过上下左右键进行对坦克的移动,通过空格发射子弹,其它坦克可以随机移动。构造主窗口中所需要的类,并将坦克加到窗口中,实现坦克的四个方向的移动并创建炮弹类,并让屏幕中的坦克能发射炮弹,让坦克可以朝对方开火,并将对方击毙。一、游戏基本元素: 坦克,炮管,子弹,墙壁,地雷二、它的主要功能:(1)能够朝四个方向移动:上、下、左、右键。(2)按下鼠标左键发射普通子弹;按下鼠标右键发射散弹;子弹爆炸的效果,普通子弹和炮弹的效果(3)敌人能够移动(4)能够模拟爆炸(5)能够产生障碍(6)能够增长生命玩家控制主坦克(上方有血条的)的移动以及炮弹的发射。若玩家将敌方坦克全部打掉则玩家胜;若期间由玩家控制的主坦克被打掉则视为玩家失败。游戏中只有普通墙作为障碍物,玩家无法穿越它们并且普通子弹不能将墙打穿;但是玩家可以用炮弹将普通墙打掉。桃心可以将坦克的血加满。玩家在使用此程序时更加能体验到乐趣。当玩家死亡以后,可以原地复活是本游戏的特色,可以激发玩家的游戏兴趣。虽然游戏在功能和界面上不能算的上很棒,但是麻雀虽小,五脏俱全,游戏具备了坦克大战这个经典游戏锁应该具有的基本雏形。通过这一章,我们对这个游戏应该有了比较宏观的了解,我们将在这一基础上探究游戏更完美的改变。2.2.2面向对象设计图2.1坦克游戏流程图此图表示了坦克游戏所含有的功能,粗略的展示了游戏运行的大致过程。使用户一眼就能看见游戏的大概的流程。系统共有7个类:Tank类、TankClient主类、Shot类、Item类、Hitpoint类、Bomb类、Wall类。图2.2继承情况下派生、关联、依赖关系UML图2.2.2类成员描述1.类的数据成员本程序我声明了7个类,坦克大战,在类中我定义了构造函数,构造函数定义了初始化变量。构造函数是一种特殊的方法主要用来在创建对象时初始化对象即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中特别的一个类可以有多个构造函数可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载。Java语言为类提供的构造函数可自动完成对象的初始化任务,全局对象和静态对象的构造函数在main()函数执行之前就被调用,局部静态对象的构造函数是当程序第一次执行到相应语句时才被调用。2.函数成员描述1)构建游戏主类在主类中构造一个主Frame框架,设置它的大小和位置,并将其显示。在主类中编写一段代码,构造一个窗口。并添加窗口关闭的处理事件,将窗口设置成打小不可变。2)构建坦克类Tank构造主窗口中所需要的Tank类,并将坦克加到窗口中,实现坦克的四个方向的移动创建一个坦克类,用画图工具构造出简单的图形代表坦克,并将坦克加入到主窗口当中。3)添加炮弹Shot类在Shot类当中添加x,y,dir等属性以及常量。在Shot类当中添加构造方法,draw方法等必要方法。根据不同的方向,子弹要进行不同的运动。在TankClient当中new一颗子弹出来。4)实现坦克的互相攻击让主战坦克打出炮弹在Tank类当中增加对空格键的处理,使每按下空格键的时候,坦克打出一发炮弹。根据“坦克打出炮弹”这句话,确定Tank当中的fire方法。)为了解决坦克停下来也能开火的问题——给坦克加一炮筒,根据炮筒方向和位置设定子弹的方向和位置并new出来,然后返回。每次move之后根据Tank的新方向确定炮筒的方向。5)创建Item类创建HitPointerItem子类,作为为tank加血的道具,构造函数eat(Tanktk)加血。创建ShotsItem子类,作为涨炮弹的道具。6)添加障碍物添加普通墙,普通子弹可以穿墙。图2.3函数流程图2.3程序实现2.3.1源码分析packagecn.hnist.Joshua;//downloadbyimportjava.awt.*;importjava.awt.event.*;importjava.util.*;importjava.util.List;publicclassTankClientextendsFrame{publicstaticfinalintWIN_WIDTH=800;publicstaticfinalintWIN_HEIGHT=600;booleanrepaintFlag=true;//控制重画线程的结束ImagebkImage=null;//用于双缓冲的缓存图片PointmousePoint=newPoint(600,500);UserTankut=newUserTank(600,520,Tank.TANK_DIR.L,true,this);//玩家控制的TankList<Shot>shotsList=Collections.synchronizedList(newArrayList<Shot>());//存储界面上的子弹List<Tank>tanksList=Collections.synchronizedList(newArrayList<Tank>());//存储界面上的TankList<Wall>wallList=Collections.synchronizedList(newArrayList<Wall>());//界面上的障碍物List<Item>itemList=Collections.synchronizedList(newArrayList<Item>());//界面上的道具publicstaticvoidmain(String[]args){TankClienttc=newTankClient();tc.lunchFrame();}voidlunchFrame()//界面初始化{tanksList.add(ut);this.wallList.add(newWall(200,160,Wall.WALLTYPE.SEXSYMBOL,this));//this.wallList.add(newWall(200,200,2,25,this));//添加障碍物//this.wallList.add(newWall(20,400,2,20,this));//添加障碍物//this.wallList.add(newWall(450,400,2,20,this));//添加障碍物RobotTank.add(4,false,RobotTank.RTANKTYPE.BOSS,this);//添加机器人TankRobotTank.add(3,true,RobotTank.RTANKTYPE.BOSS,this);//添加机器人Tankthis.itemList.add(newHitPointItem(700,500,3,this));//添加一个涨血的道具this.itemList.add(newShotsItem(700,520,1,this));//超级炮弹的道具this.itemList.add(newShotsItem(700,550,0,this));//特殊炮弹的道具this.setLocation(200,100);this.setSize(WIN_WIDTH,WIN_HEIGHT);this.setTitle("TankWar");this.setResizable(false);//不能改变窗口大小this.setBackground(Color.black);this.addWindowListener(newFrameClose());this.addKeyListener(newTankMoveLis());this.addMouseMotionListener(newMouseMoveLis());this.addMouseListener(newMouseCleckLis());//Tank开火监听者newThread(newRepaintThread()).start();//定时重画的线程newThread(newRobotTanksThread(this)).start();this.setVisible(true); }classFrameCloseextendsWindowAdapter//窗口关闭事件监听者{publicvoidwindowClosing(WindowEvente){Framef=(Frame)e.getWindow();repaintFlag=false;f.dispose();}}publicvoidpaint(Graphicsg)//synchronized{//if(!ut.isLive){ut.isLive=true;ut.tankHitPoint.number=5;}//else{WalltcWall=null;for(inti=0;i<wallList.size();i++){tcWall=wallList.get(i);tcWall.draw(g);}TanktcTanks=null;for(inti=tanksList.size()-1;i>=0;i--){tcTanks=tanksList.get(i);tcTanks.draw(g);}ItemtcItems=null;for(inti=0;i<itemList.size();i++){tcItems=itemList.get(i);tcItems.draw(g);}ShottcShots=null;for(inti=0;i<shotsList.size();i++){tcShots=shotsList.get(i);tcShots.draw(g);}}}publicvoidupdate(Graphicsg){if(null==bkImage){bkImage=this.createImage(WIN_WIDTH,WIN_HEIGHT);}g.drawImage(bkImage,0,0,null);//把虚拟图片的内容画到当前窗口GraphicsgBkImg=bkImage.getGraphics();gBkImg.clearRect(0,0,WIN_WIDTH,WIN_HEIGHT);//先清空图片this.paint(gBkImg);//将图像先画到虚拟图片上 }classRepaintThreadimplementsRunnable//画面重画线程{publicvoidrun(){while(repaintFlag){try{repaint();ut.move();//Tank定时移动ShottcShots=null;for(inti=0;i<shotsList.size();i++)//界面上的子弹定时移动{tcShots=shotsList.get(i);tcShots.move();}Thread.sleep(33);}catch(InterruptedExceptione){e.printStackTrace();System.exit(-1);}}}}classRobotTanksThreadimplementsRunnable//机器人Tank的行动线程{TankClienttc;publicRobotTanksThread(TankClienttc){this.tc=tc;}publicvoidrun(){TanktcTanks=null;intcount=-1;while(repaintFlag){if(0==count)//电脑Tank全灭后重新加几辆{//RobotTank.add(1,false,RobotTank.RTANKTYPE.BOSS,tc);RobotTank.add(2,false,RobotTank.RTANKTYPE.SPE,tc);}try{count=0;for(inti=0;i<tanksList.size();i++){tcTanks=tanksList.get(i);if(!tcTanks.camp){count++;}if(!tcTanks.isNPC||!tcTanks.isLive){continue;}//不控制玩家的Tank((RobotTank)tcTanks).autoAction();//自主行动}Thread.sleep(38);}catch(InterruptedExceptione){e.printStackTrace();System.exit(-1);}}}}classTankMoveLisextendsKeyAdapter//玩家Tank按键监听者{publicvoidkeyPressed(KeyEvente){if(ut.isLive){ut.keyDispose(e.getKeyCode(),true);}}publicvoidkeyReleased(KeyEvente){if(ut.isLive){ut.keyDispose(e.getKeyCode(),false);}else{if(e.getKeyCode()==KeyEvent.VK_F2){ut.rebirth();//复活}}}}classMouseMoveLisextendsMouseMotionAdapter//鼠标移动监听者{publicvoidmouseMoved(MouseEvente){if(ut.isLive){mousePoint=e.getPoint();ut.setTurretDir(mousePoint);//根据鼠标位置更新炮筒方向}}}classMouseCleckLisextendsMouseAdapter//点击鼠标,玩家Tank发射炮弹{publicvoidmouseClicked(MouseEvente){if(ut.isLive){ut.fire(MouseEvent.BUTTON3==e.getButton());//按鼠标右键会发射特殊子弹}}}}packagecn.hnist.Joshua;//downloadbyimportjava.awt.*;abstractclassItem{publicstaticToolkitTLK=Toolkit.getDefaultToolkit();intx,y;intwidth,height;TankClienttc;publicItem(intx,inty,TankClienttc){this.x=x;this.y=y;this.tc=tc;}abstractvoiddraw(Graphicsg);abstractvoideat(Tanktk);publicRectanglegetRect(){returnnewRectangle(x,y,width,height);}}classHitPointItemextendsItem//涨血的道具{intraisesNum;staticfinalImagehpimg=TLK.getImage(Item.class.getClassLoader().getResource("Image/Item/hp.png"));publicHitPointItem(intx,inty,intraisesNum,TankClienttc){super(x,y,tc);this.raisesNum=raisesNum;this.width=34;this.height=30;}voiddraw(Graphicsg){g.drawImage(hpimg,x-width/2,y-height/2,null);}voideat(Tanktk){tk.tankHitPoint.raisesHitPoint(raisesNum);//Tank涨血tc.itemList.remove(this);}}classShotsItemextendsItem//涨炮弹的道具{inttype;//涨的炮弹类型publicShotsItem(intx,inty,inttype,TankClienttc){super(x,y,tc);this.type=type;this.width=10;this.height=10;}voiddraw(Graphicsg){Colorc=g.getColor();g.setColor(Color.orange);g.fillOval(x,y,width,height);g.setColor(c);}voideat(Tanktk){if(!tk.isNPC)//玩家才可以吃{switch(type){case0:{((UserTank)tk).addHydraShots();}break;case1:{((UserTank)tk).addSuperShots();}break;default:break;}tc.itemList.remove(this);}}}2.3.2运行结果编译完相关的代码后,在eclipse中运行,会显示游戏开始界面图。具体效果如图所示:图2.4游戏开始界面图通过上下左右键来移动坦克并躲避子弹,通过按鼠标左键来发射子弹,其中还可以显示所剩的生命值。玩家可以用炮弹将普通墙打掉。桃心可以将坦克的血加满。具体效果如图所示:图2.5游戏运行界面图此界面显示坦克消灭以后的界面图,剩下的是红(蓝)方坦克,表示该方胜利,反之另一方失败。即为游戏结束界面图。具体效果如图所示:图2.6游戏结束界面图第3章总结在Internet流行的今天,对传统的计算模型提出了新的挑战。由于Java语言具有能独立于平台而运行、面向对象、可对动态画面进行设计与操作、坚固性等特点,又具有多线程、内置校验器用来防止病毒入侵等功能,所以用来在Internet上研制与开发软件时,特别受到用户的欢迎。现在,许许多多的原C++程序员已经转向了Java编程,同时Java程序的应用也由简单的Applet(一种小应用程序)逐步向大型化应用转变,为了迎接将来Internet和信息化世界的挑战,我认为学习Java高级语言是很有必要的。Java是一种简单、面向对象、分布式、解释、健壮、安全、结构中立、可移植、高效能、多线程、动态的语言,Java语言提供一种强有力的工具支援程序设计员,同时由于Java属于面向对象语言,Java程序设计很容易学习,同时Java还提供了自动的内存垃圾收集功能。再者,由于Java码具备结构中立性,因此其应用程序成为非同质性运算环境(例如Internet)的理想方案。Eclipse是

温馨提示

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

评论

0/150

提交评论