您好,欢迎访问三七文档
华北科技学院计算机学院综合性实验实验报告课程名称JAVA程序设计实验学期2014至2015学年第1学期学生所在院部计算机学院年级2013级专业班级计科学生姓名学号任课教师鞠宏军实验成绩计算机学院制华北科技学院计算机系综合性实验报告第1页《Java程序设计》课程综合性实验报告开课实验室:基础七2015年12月1日实验题目基于java的模拟撑过30秒游戏一、实验目的通过编写Java的应用系统综合实例——模拟撑过30秒,总结、回顾和实践面向对象的编程思想以及编程方法,并通过编写程序来掌握Java语言编程技巧,将学习到的知识融会贯通,同时提高调试程序的能力,养成良好的编程习惯,并增强对程序设计整体思路的把握。程序使用Eclipse集成开发环境完成,熟悉并掌握在Eclipse开发环境下编写Java程序。二、设备与环境硬件:多媒体计算机软件:Windows系列操作系统、JDK开发包、Eclipse开发环境三、实验内容及要求1.实验要求1、简单的模拟撑过30秒游戏程序分析2、系统的功能模块设计。要求画出功能模块框图。3、系统的详细设计4、应用到的关键技术的详细说明。可附相关的关键程序代码。5、系统页面设计要求清晰、实用、美观。2.实验内容I.功能分析(1).本程序为java课程设计。用java编写,采用了Swing界面。其中运用了Runnable接口、java的awt.events消息处理。实践了java课程多方面的内容。总代码量474行。(2).本程序实现了主要游戏的主要方面,窗口固定大小,子弹数70个。主要实现了如下算法:人物移动方向。子弹随机发射。当人物撞到子弹后游戏结束。控制一个计数器产生计时效果的计时器算法。以及用户鼠标左键单击按钮的事件处理方法。华北科技学院计算机系综合性实验报告第2页II.功能结构分析程序文件说明文件内容Game.java主程序类Move.java人物移动类Threads.java子弹及计时类说明:在java环境下,运行javaGame启动程序。程序框架都在Game.java中。Game.java还包括人物碰到子弹死亡后的重新游戏按钮。III.代码分析(1)运行javaGame启动程序,打开主界面。出现人物和子弹。华北科技学院计算机系综合性实验报告第3页窗口设置代码如下:privatevoidinitialize(){this.setSize(700,700);this.addWindowListener(newjava.awt.event.WindowAdapter(){publicvoidwindowClosing(java.awt.event.WindowEvente){System.exit(1);}});this.setResizable(false);this.setContentPane(getJPanel());this.setTitle(传奇小游戏!(模拟撑过30秒的小DEMO));this.setVisible(true);}(2).进行游戏,采用子弹随机方向发射,计时器开始计时,键盘上下左右移动人物,操作人物不撞到子弹。a.键盘操作人物移动代码如下:privateJButtongetJButton(){if(jButton==null){jButton=newJButton();jButton.setBounds(newRectangle(320,320,30,30));jButton.setBackground(newColor(1,1,1));p=jButton.getLocation();x=p.getX();y=p.getY();jButton.setIcon(newImageIcon(fileLoc));jButton.addKeyListener(newjava.awt.event.KeyAdapter(){publicvoidkeyReleased(java.awt.event.KeyEvente){if(e.getKeyCode()==10){if(!gamexunhuan){jButton1.setVisible(false);jLabel.setVisible(false);reset();}}if(e.getKeyCode()==37){//左kleft=false;}if(e.getKeyCode()==38){//上kup=false;}if(e.getKeyCode()==39){//右kright=false;}if(e.getKeyCode()==40){//下kdown=false;}}publicvoidkeyPressed(java.awt.event.KeyEvente){if(e.getKeyCode()==37){kleft=true;华北科技学院计算机系综合性实验报告第4页}if(e.getKeyCode()==38){kup=true;}//触发按右键if(e.getKeyCode()==39){kright=true;}if(e.getKeyCode()==40){kdown=true;}}});}returnjButton;}b.计时器代码如下:while(gamexunhuan){try{zx+=zzx;zy+=zzy;jb.setLocation(zx,zy);if(zx+5x&zx+5x+30&zy+5y&zy+5y+30){jButton.setIcon(newImageIcon(fileLoc1));gamexunhuan=false;first=true;jButton1.setVisible(true);jLabel.setVisible(true);lasttime=newDate().getTime();Dategametime=newDate(lasttime-firsttime);intmin=0;intsec=0;min=gametime.getMinutes();sec=gametime.getSeconds();Stringendtime=;if(min!=0){endtime=min+分+sec+秒;}else{endtime=sec+秒;}jLabel.setText(GAMEOVER!!!\n用时:+endtime);break;}//超出边线停止循环if(zx700|zy700|zx0|zy0){break;}Thread.sleep(60);}catch(InterruptedExceptione){//TODO自动生成catch块e.printStackTrace();华北科技学院计算机系综合性实验报告第5页}}try{Thread.sleep(50);}catch(InterruptedExceptione){//TODO自动生成catch块e.printStackTrace();}}c.子弹随机发射的算法:classThreadsimplementsRunnable{publicThreads(JButtonjjb){//jjb.setBackground(Color.blue);//子弹颜色jb=jjb;}JButtonjb=null;privatebooleanfirst=true;publicvoidrun(){while(gamexunhuan){go();}}publicvoidgo(){intzzx=0;intzzy=0;intzx=0;intzy=0;while(true){if(gamexunhuan){intfangxiang=(int)(Math.random()*4+1);//随机方向0-3加1//四个if随即从四个边发射子弹if(fangxiang==1){zx=0;zy=(int)(Math.random()*701);}if(fangxiang==2){zx=(int)(Math.random()*701);zy=0;}if(fangxiang==3){zx=700;zy=(int)(Math.random()*701);}if(fangxiang==4){zx=(int)(Math.random()*701);zy=700;}if(first){//第一次加载jPanel.add(jb,null);first=false;}jb.setBounds(newRectangle(zx,zy,10,10));zzx=(int)(((x+15)-zx)/30);zzy=(int)(((y+15)-zy)/30);}华北科技学院计算机系综合性实验报告第6页(3).游戏结束,如果人物碰到子弹则游戏结束,键盘上下左右将不能控制人物移动,屏幕显示坚持的时间。出现重新开始的按钮。A.撞到子弹后重新开始的按钮的代码如下:privateJButtongetJButton1(){if(jButton1==null){jButton1=newJButton();jButton1.setBounds(newRectangle(478,361,164,51));jButton1.setText(重新开始);jButton1.setVisible(false);jButton1.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEvente){jButton1.setVisible(false);jLabel.setVisible(false);try{Thread.sleep(1000);//1000毫秒}catch(InterruptedExceptione1){//TODO自动生成catch块e1.printStackTrace();}华北科技学院计算机系综合性实验报告第7页reset();}});}returnjButton1;}B.碰到子弹后的代码如下:publicvoidreset(){kup=false;kdown=false;kleft=false;kright=false;intchushihua=0;while(chushihuazidanshu){((JButton)buttonal.get(chushihua)).setBounds(newRectangle(-50,-50,10,10));chushihua++;}gamexunhuan=true;jButton.setIcon(newImageIcon(fileLoc));//确定人物图片jButton.setLocation(320,320);//人物坐标p=jButton.getLocation();//得到位置x=p.getX();y=p.getY();firsttime=newDate().getTime();//得到当前时间}C.游戏运行以及重新开始后的算法如下:publicvoidstart(){intchushihua=0;while(chushihuazidanshu){JButtonjb=newJButton();//按钮jb.setBounds(newRectangle(-50,-50,10,10));//按钮的位置jb.setEnabled(false);//按钮不可用Threadsths=newThreads(jb);Threadth=newThread(ths);buttonal.add(jb);//添加到按钮容器threadal.add(th);chushihua++;}Game.Movemove=newMove();Threadtm=newThread(move);tm.start();}publicvoidgogo(){intchushihua=0;while(chushihuazidanshu){((Thread)threadal.get(chushihua)).start();chushihua++
本文标题:java综合实验
链接地址:https://www.777doc.com/doc-4219130 .html