JAVA_Applet舞动小球项目报告模板_第1页
JAVA_Applet舞动小球项目报告模板_第2页
JAVA_Applet舞动小球项目报告模板_第3页
JAVA_Applet舞动小球项目报告模板_第4页
JAVA_Applet舞动小球项目报告模板_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、重庆科创职业学院Java高级应用开发课程作业(二)课题名称: Applet舞动的小球设计与实现 专 业: 计算机应用技术 班 级: 计算机应用ZK0901 学 号: 姓 名: 成 绩:_ _完成时间:二一 年 十一月 二十五 日一、课题设计目的1、进一步掌握Applet的生命周期及各种方法的应用;2、利用Graphics类完成简单的多媒体设计;3、掌握线程的生命周期及其相关的方法;4、掌握线程应用的两种方法及线程调度;5、通过本次课题设计,进一步理解Applet小应用程序的基本结构和线程的基本原理。二、课题的描述和要求本次课题要求运用JAVA语言完成一个基于Applet的舞动小球,并可将这个小

2、程序进行修改拓展完成一个简单的游戏设计。三、课题设计的步骤3.1 完成小球的绘制任务一:创建一个Java项目DancingBallApplet,然后再创建一个主类DancingBall来完成设计;任务二:在DancingBall主类中完成小球的绘制。步骤1:定义小球坐标位置和小球的大小。int x,y;final int SIZE=50;步骤2:重写小应用程序的init()方法完成对小球坐标x,y的初始public void init() x=0; y=0;步骤3:重写小应用程序的paint(Graphics g)方法完成小球的绘制public void paint(Graphics g) g

3、.fillOval(x,y,SIZE,SIZE);3.2 将小球舞动起来要使小球运动起来,即是需要不停地改变小球的坐标。可以通过线程不停地改变坐标值,然后调用repaint()的方法重新绘制小球。任务一:定义一个线程Ball,完成对小球坐标的修改任务二:修改paint方法中绘制小球的方法任务三:在DancingBall中声明一个线程Ball的对象,并在init()方法中创建。任务四:重写start()方法,在其中运行线程对象import java.applet.Applet;import java.awt.*;public class DancingBall extends Applet fi

4、nal int SIZE=50; Ball ball; class Ball extends Thread int x=0,y=0,m=2,n=2;/x、y为小球出现的坐标,m、n为每次改变的数值 public void run() while(true)x=x+m;y=y+n;if(y+SIZE>=getHeight()n=(-1)*n;else if(y<=0)n=(-1)*n;if(x+SIZE>=getWidth()m=(-1)*m;else if(x<=0)m=(-1)*m;try sleep(10);/小球运动的速度,即每次移动等待的时间 catch (In

5、terruptedException e) e.printStackTrace();repaint();/首先调用update清除界面,然后再调用paint方法重绘 public void init() ball=new Ball();/创建改变小球坐标的线程对象 public void start() ball.start();/运行线程 public void paint(Graphics g) g.fillOval(ball.x,ball.y,SIZE,SIZE); 思考:如何让小球出现的初始位置每次都不一样?解决方案:要使小球的初始位置不一样,即每次启动线程时都需要给x、y赋不同的数值

6、,因此我们可以通过随机函数来实现。步骤1:为线程类Ball增加构造方法,通过构造方法为x,y赋值;Ball(int x,int y) this.x=x; this.y=y;步骤2:创建Ball类对象时,给构造方法传入随机数。ball=new Ball(int)(Math.random()*400), (int)(Math.random()*400);思考:如果要求每次小球都从顶端开始出现,又该如何创建呢?3.3 接球挡板的设计任务一:完成挡板的绘制步骤1:声明挡板的坐标int x1,y1;步骤2:完成g.fillRect(x1,y1,SIZE,10);任务二:完成挡板随着鼠标移动步骤1:主类D

7、ancingBall引用MouseMotionListener接口步骤2:在init()方法中为小应用程序加载MouseMontionListener监视器步骤3:重写MouseMontionListener的抽象方法public void mouseDragged(MouseEvent arg0) public void mouseMoved(MouseEvent arg0) x1=arg0.getX();y1=arg0.getY();repaint();任务三:完成游戏计分步骤1:完成计分规则制定,接住一次加10分,小球掉下一次减20分步骤2:完成游戏计分并显示 关键问题:在于如何判断接住

8、了小球?if(n>0&&y1-y=SIZE&&(Math.abs(x-x1)<= SIZE&&Math.abs(x-x1)>=0)score=score+10;n=(-1)*n;if(y+SIZE>=this.getHeight()score=score-10;n=(-1)*n;else if(y<=0)n=(-1)*n;if(x+BALLSIZE>=this.getWidth()m=(-1)*m;else if(x<=0)m=(-1)*m;3.4 多个小球的同时舞动要有多个小球就需要在paint()方法

9、中多次调用fillOval(x,y,SIZE,SIZE)方法来实现小球的绘制,但必须保证每个小球的初始坐标x、y都不一样,否则就会使得两个小球重叠。任务一:在创建Ball对象时设置不同的x、y值;ball1=new Ball(int)(Math.random()*(getWidth()-SIZE), 0);ball2=new Ball(int)(Math.random()*(getWidth()-SIZE), 0);然后分别运行ball1和ball2两个线程。思考:如果需要更多的小球呢?解决方案:可以通过线程数组来完成。1、首先声明Ball类的数组对象ballBall ball=new Bal

10、l5;2、在init()方法中用循环创建每个数组对象,并在start()方法中循环运行每个线程(此时5个小球在同一轨迹上,需要改变每个小球出现的初始位置或者运动改变值的大小)思考:如何改变每个小球出现的初始位置呢?即是要改变Ball类中x,y的初始值参考代码import java.applet.Applet;import java.awt.*;import java.awt.event.*;public class KeyGame extends Applet implements KeyListenerfinal int NUM=10;/定义线程的数量,即每次出现字符的个数Keys key=

11、new KeysNUM;int score=0;char c='A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','

12、W','X','Y','Z'/,'a','b','c','d','e','f','g','h','i','j','k','l','m','n',/'o','p','q','r','s','t','u',

13、9;v','w','x','y','z'class Keys extends Threadint x=0,y=0,a=2,b=3;int aa;/用来保存当前线程中字符对应的字符数组c的下标Keys(int x,int y,int a,int b)this.x=x; this.y=y;this.a=a; this.b=b;public void run()while(true)x=x+a; y=y+b;if(y>=getHeight()aa=(int)(Math.random()*25);y=0;score=scor

14、e-10;if(x>=getWidth()x=0;try sleep(80); catch (InterruptedException e) / TODO 自动生成 catch 块e.printStackTrace();repaint();public void init()for(int i=0;i<NUM;i+)keyi=new Keys(int)(Math.random()*getWidth(),0,(int)(Math.random()*(5)+1),(int)(Math.random()*(5)+1);keyi.aa=(int)(Math.random()*25);/th

15、is.setBackground(Color.black);public void start()this.addKeyListener(this);for(int i=0;i<key.length;i+)keyi.start();public void paint(Graphics g)g.setColor(Color.black);g.setFont(new Font("黑体",Font.BOLD,16);for(int i=0;i<key.length;i+) g.drawChars(c, keyi.aa, 1,keyi.x,keyi.y);this.sh

16、owStatus("你当前的成绩为:"+score); public void keyTyped(KeyEvent arg0) / TODO 自动生成方法存根public void keyPressed(KeyEvent arg0) for(int i=0;i<NUM;i+) if(arg0.getKeyChar()=ckeyi.aa) score=score+10; keyi.x=0; keyi.y=0; keyi.aa=(int)(Math.random()*25); repaint(); public void keyReleased(KeyEvent arg0

17、) / TODO 自动生成方法存根3.5 拓展作业:模拟雪花飞舞的夜空模拟雪花飞舞的夜空与完成舞动小球的编程思想一致,需要注意以下几个方面:(1)可以把雪花看着小球,只是雪花的直径更小而已;(2)每片雪花的运动轨迹都不一样,并只需下落不能向上返回(即当雪花落地后重新设置坐标);(3)将背景颜色设置为黑色,前景颜色设置为白色。参考代码import java.applet.Applet;import java.awt.*;public class Snowing extends AppletSnow snow=new Snow500;class Snow extends Threadfinal i

18、nt SIZE=8;int x=0,y=0,a=2,b=3;Snow(int x,int y,int a,int b)this.x=x; this.y=y;this.a=a; this.b=b;public void run()while(true)x=x+a; y=y+b;if(y>=getHeight() y=0;if(x>=getWidth() x=0;try sleep(10); catch (InterruptedException e) / TODO 自动生成 catch 块e.printStackTrace();repaint();public void init()

19、for(int i=0;i<snow.length;i+)snowi=new Snow(int)(Math.random()*(getWidth(),(int)(Math.random()*(getHeight(),(int)(Math.random()*(5)+1),(int)(Math.random()*(5)+1);this.setBackground(Color.black);public void start()for(int i=0;i<snow.length;i+) snowi.start();public void paint(Graphics g)g.setCol

20、or(Color.white);for(int i=0;i<snow.length;i+) g.fillOval(snowi.x,snowi.y,snowi.SIZE,snowi.SIZE);3.6 拓展作业2:字母打字游戏在雪花飞舞的基础上,完成字母打字游戏的设计。要求26个英文字母每次随机的从顶端出现5个,如果键盘按键与字母相同,则将成绩加10分并让其获得新的随机字母再从顶端出现;如果字母掉落到低端,则将成绩减10分并让其获得新的随机字母再从顶端出现。参考代码import java.applet.Applet;import java.awt.*;import java.awt.eve

21、nt.*;public class KeyGame extends Applet implements KeyListenerfinal int NUM=10;/定义线程的数量,即每次出现字符的个数Keys key=new KeysNUM;int score=0;char c='A','B','C','D','E','F','G','H','I','J','K','L','M','

22、N','O','P','Q','R','S','T','U','V','W','X','Y','Z'/,'a','b','c','d','e','f','g','h','i','j','k','l','

23、;m','n',/'o','p','q','r','s','t','u','v','w','x','y','z'class Keys extends Threadint x=0,y=0,a=2,b=3;int aa;/用来保存当前线程中字符对应的字符数组c的下标Keys(int x,int y,int a,int b)this.x=x; this.y=y;this.a=a; this.b=b;public void run()while(true)x=x+a; y=y+b;if(y>=getHeight()aa=(int)(Math.random()*25);y=0;score=score-10;if(x>=getWidth()x=0;try sleep(80); catch (InterruptedException e) / TODO 自动生成 catch 块e.printStackTrace();repaint();public void init()for(int i=0;i<NUM;i+)

温馨提示

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

评论

0/150

提交评论