GitHub地址https://github.com/gaodejian/gaodejian/blob/master/firework

课题研究的目的和意义

java编程语言在编程方面的具体应用,以及使用面向对象方法,对小应用程序进行需求分析、概要设计、详细设计,最后使用Java编程实现的全过程。

在编程我们使用的java语言,是目前比较流行的编程语言。在当今这个的时代,java语言在编程方面的优势使得编程有了更好的选择。Java语言最大的特点是具有跨平台性,使其不受平台不同的影响,得到了广泛的应用。

可行性论证

本例知识点

一句话讲解

新学知识

使用Graphics类

绘制烟花

使用Thread类

管理线程

已学知识

使用Math类

产生随机数

使用Color类

设置颜色

本例制作烟花,运行效果如图后所示。执行本例实例后,用鼠标点击浏览器中的面板,将出现五彩缤纷的烟花效果。

此课程设计的知识点有:鼠标事件的监听,Graphics类和Thread类的应用。

课题总体设计方案

本例因为要模拟烟花效果,所以首先定义执行程序主线程的函数run()对一个烟花进行绘制。在函数run()中定义Graphics类的对象,通过程序中的算法来绘制烟花。然后,因为要实现烟花的缤纷闪烁效果,所以要通过Thread类的Thread.currentThread().sleep()方法使当前线程睡眠,让用户欣赏到当前的绘制效果。最后,因为要实现人机交互.,所以首先要通过mousePressed(MouseEvent e)函数来实现对鼠标事件的监听,这样当按下鼠标时,产生一个新线程就可以看到一个新的烟花效果

结对分工情况:一个写代码,一个测试实验结果。

源程序:

import java.awt.*;

import java.applet.*;

import java.awt.event.*;

import javax.swing.*;

public class Fireworks extends Applet implements MouseListener,Runnable

{

int x,y;

int top,point;

/**

*对小程序进行变量和颜色的初始化。

*/

public void init()

{

x = 0;

y = 0;

//设置背景颜色为黑色

setBackground(Color.black);

addMouseListener(this);

}

public void paint(Graphics g)

{

}

/**

*使该程序可以作为应用程序运行。

*/

public static void main(String args[]) {

Fireworks applet = new Fireworks();

JFrame frame = new JFrame("TextAreaNew");

frame.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e){

System.exit(0);

}

});

frame.getContentPane().add(applet, BorderLayout.CENTER);

frame.setSize(800,400);

applet.init();

applet.start();

frame.setVisible(true);

}

/**

*程序主线程,对一个烟花进行绘制。

*/

public void run()

{

//变量初始化

Graphics g1;

g1 = getGraphics();

int y_move,y_click,x_click;

int v;

x_click = x;

y_click = y;

y_move = 400;

v = 3;

int r,g,b;

while(y_move > y_click)

{

g1.setColor(Color.black);

g1.fillOval(x_click,y_move,5,5);

y_move -= 5;

r = (((int)Math.round(Math.random()*4321))%200)+55;

g = (((int)Math.round(Math.random()*4321))%200)+55;

b = (((int)Math.round(Math.random()*4321))%200)+55;

g1.setColor(new Color(r,g,b));

g1.fillOval(x_click,y_move,5,5);

for(int j = 0 ;j<=10;j++)

{

if(r>55) r -= 20;

if(g>55) g -= 20;

if(b>55) b -=20;

g1.setColor(new Color(r,g,b));

g1.fillOval(x_click,y_move+j*5,5,5);

}

g1.setColor(Color.black);

g1.fillOval(x_click,y_move+5*10,5,5);

try

{

Thread.currentThread().sleep(v++);

} catch (InterruptedException e) {}

}

for(int j=12;j>=0;j--)

{

g1.setColor(Color.black);

g1.fillOval(x_click,y_move+(j*5),5,5);

try

{

Thread.currentThread().sleep((v++)/3);

} catch (InterruptedException e) {}

}

y_move = 400;

g1.setColor(Color.black);

while(y_move > y_click)

{

g1.fillOval(x_click-2,y_move,9,5);

y_move -= 5;

}

v = 15;

for(int i=0;i<=25;i++)

{

r = (((int)Math.round(Math.random()*4321))%200)+55;

g = (((int)Math.round(Math.random()*4321))%200)+55;

b = (((int)Math.round(Math.random()*4321))%200)+55;

g1.setColor(new Color(r,g,b));

g1.drawOval(x_click-3*i,y_click-3*i,6*i,6*i);

if(i<23)

{

g1.drawOval(x_click-3*(i+1),y_click-3*(i+1),6*(i+1),6*(i+1));

g1.drawOval(x_click-3*(i+2),y_click-3*(i+2),6*(i+2),6*(i+2));

}

try

{

Thread.currentThread().sleep(v++);

} catch (InterruptedException e) {}

g1.setColor(Color.black);

g1.drawOval(x_click-3*i,y_click-3*i,6*i,6*i);

}

}

/**

*对鼠标事件进行监听。

*临听其鼠标按下事件。

*当按下鼠标时,产生一个新线程。

*/

public void mousePressed(MouseEvent e)

{

x = e.getX();

y = e.getY();

Thread one;

one = new Thread(this);

one.start();

one = null;

}

/**

*实现MouseListener接中的方法。为一个空方法。

*/

public void mouseReleased(MouseEvent e)

{

}

/**

*实现MouseListener接中的方法。为一个空方法。

*/

public void mouseEntered(MouseEvent e)

{

}

/**

*实现MouseListener接中的方法。为一个空方法。

*/

public void mouseExited(MouseEvent e)

{

}

/**

*实现MouseListener接中的方法。为一个空方法。

*/

public void mouseClicked(MouseEvent e)

{

}

实验结果如下 ,成功。

问题及心得:

做得不是很熟练,平常应多练习。

text3的更多相关文章

  1. Sublime Text3安装JsHint

    介绍 Sublime Text3使用jshint依赖Nodejs,SublimeLinter和Sublimelinter-jshint. NodeJs的安装省略. 安装SublimeLinter Su ...

  2. Sublime Text3配置在可交互环境下运行python快捷键

    安装插件 在Sublime Text3下面写代码感觉很不错,但是写Python的时候遇到了一些问题. 用Sublime Text3打开python文件,或者在Sublime Text3下写好pytho ...

  3. Sublime Text3使用总结

    写在前面的话:平时做项目中在用eclipse和vs,但是对于一些小项目,感觉没有必要搞那么大的一个工具使用,比如写个小微商城,搞个小脚本了什么,所以就一直在用Sublime Text,界面清新简洁,没 ...

  4. 一个前端程序猿的Sublime Text3的自我修养

    来源于:http://guowenfh.github.io/2015/12/26/SublimeText/ 详细设置 && 20+插件 本文章会在本人有插件或者设置更新时,进行不定时更 ...

  5. sublime text3 使用SVN插件

    Simon在项目中经常使用SVN,每次都要切换提交,很麻烦,有了这个SVN插件就很方便了,使用快捷方式提交,更新. 安装: Ctrl + Shift + P 调用出Sublime Text的包管理工具 ...

  6. Sublime Text3 BracketHighlighter高亮色彩配置

    今天玩Sublime ,结果安装了BracketHighlighter插件后,没效果,郁闷,度娘后总结如下: BracketHighlighter插件能为Sublime Text提供括号,引号这类高亮 ...

  7. Sublime Text3插件管理

    插件安装 package control 安装Sublime Text3 打开Sublime Text3,Ctrl+~ 调出控制台,输入代码安装 package control 代码如下: impor ...

  8. sublime text3 常用插件安装

    1.Package Control 按Ctrl+~调出console(或者view>show console) 粘贴以下代码到底部命令行并回车: import urllib.request,os ...

  9. 在Sublime TEXT3中添加brogrammer-theme主题配色方案

    喜欢用sublime text3的都知道原配的主题要么就是背景颜色太亮太累眼,要么就是配色太少不便于一眼看出哪有问题.所以在此推荐一个brogrammer-theme的主题,配色非常的全而且添加了扁平 ...

  10. Sublime Text3的安装

    作为一名前端开发小白,使用Sublime两年多了,从当初的Sublime Text 2到如今的Sublime Text 3,非常喜欢这款轻量级编译器,它不像Dreamweaver那样动辄几百M,只有仅 ...

随机推荐

  1. indexOf() 使用方法(数组去重)

    对于indexOf()的用法一直停留在查找第几个字符串,却不知道它能用到数组去重中,首先还是温顾下indexOf()的语法: <!DOCTYPE html> <html lang=& ...

  2. C#接口的显隐实现

    显示接口实现与隐式接口实现 何为显式接口实现.隐式接口实现?简单概括,使用接口名作为方法名的前缀,这称为“显式接口实现”:传统的实现方式,称为“隐式接口实现”.下面给个例子. IChineseGree ...

  3. Swift开发实例:苹果Swift编程语言新手教程中文版+FlappyBird,2048游戏源代码

    源代码: 用IOS Swift语言实现的Flappy Bird源代码:http://download.csdn.net/detail/estellise/7449547 用IOS Swift实现的游戏 ...

  4. centos7下安装docker(7docker base command 命令词典)

    上一章中我总结了学习docker 镜像时所用过的命令,今天先来将docker base command 记录一下,参考:https://docs.docker.com/edge/engine/refe ...

  5. UCML 参与者关键 与依赖关联外键

  6. MetaMask/metamask-inpage-provider

    https://github.com/MetaMask/metamask-inpage-provider Used to initialize the inpage ethereum provider ...

  7. linux 下 mysql-5.5.8 安装

    安装环境:Linux服务器CentOS 5.5 安装版本:mysql-5.5.8.tar.gz 1.安装 cmake 编译器. 1).下载cmake #cd /usr/local/src #wget ...

  8. Linux中添加、修改和删除用户和用户组

    宽为限 紧用功 功夫到 滞塞通 一.用户: 在创建用户时,需要为新建用户指定一用户组,如果不指定其用户所属的工作组,自动会生成一个与用户名同名的工作组.创建用户user1的时候指定其所属工作组user ...

  9. P1006 传纸条-洛谷luogu-dp动态规划

    题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个mm行nn列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运 ...

  10. socket实现聊天功能(二)

    socket实现聊天功能(二) WebSocket协议是建立在HTTP协议之上,因此创建websocket服务时需要调用http模块的createServer方法.将生成的server作为参数传入so ...