先建立一个框,一个时钟控件,Interval属性设为100,代码如下:
Private Sub Form_Click()
Picture1ScaleMode = 3
Picture1Scale (-3, 3)-(3, -3)
Picture1Line (-03, -2)-(03, -3), , BF
End Sub
Private Sub Timer1_Timer()
Dim i As Single
Picture1DrawWidth = 2
For i = 015 To 3 Step 0001
Picture1PSet (i, Log(i)), RGB(255, 0, 1)
Next
For i = 015 To 3 Step 0001
Picture1PSet (i, Log(i)), Form1BackColor
Next
For i = -015 To -3 Step -0001
Picture1PSet (i, Log(-i)), RGB(255, 0, 1)
Next
For i = -015 To -3 Step -0001
Picture1PSet (i, Log(-i)), Form1BackColor
Next
For i = -2 To 3 Step 0001
Picture1PSet (0, i), RGB(255, 0, 0)
Next i
For i = -2 To 3 Step 0001
Picture1PSet (0, i), Form1BackColor
Next i
End Sub
使用公式。在如vba中使用公式ScaleMode等于3Picture即可实现放烟花。VBA(VisualBasicforApplications)是VisualBasic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
import javaawt;
import javaapplet;
import javaawtevent;
import javaxswing;
public class Fireworks extends Applet implements MouseListener, Runnable {
int x, y;//记录鼠标点击的坐标
int top, point;//好像没用到
public void init() {
x = 0;
y = 0;
setBackground(Colorblack);// 设置背景色为黑色
addMouseListener(this);//添加鼠标监听
}
public void paint(Graphics g) {
}
public static void main(String args[]) {
Fireworks applet = new Fireworks();
JFrame frame = new JFrame("TextAreaNew");
frameaddWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {//右上角的叉
Systemexit(0);
}
});
frameadd(applet, BorderLayoutCENTER);
framesetSize(800, 400);//程序的框框大小
appletinit();
appletstart();
framesetVisible(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)//如果点击的位置小于最大高度。
{
g1setColor(Colorblack);//画笔设成黑色
g1fillOval(x_click, y_move, 5, 5);//画圆,圆点在点击的X轴,程序界面的最高点,长为5,宽为5
y_move -= 5;//最高点-5
r = (((int) Mathround(Mathrandom() 4321)) % 200) + 55;
g = (((int) Mathround(Mathrandom() 4321)) % 200) + 55;
b = (((int) Mathround(Mathrandom() 4321)) % 200) + 55;//rgb是光的三原色,这个就是烟花产生的颜色,这里定义成随机的,但在一个范围里
g1setColor(new Color(r, g, b));//把画笔改成那个颜色
g1fillOval(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;
g1setColor(new Color(r, g, b));
g1fillOval(x_click, y_move + j 5, 5, 5);//这一段都是改变颜色,然后画圆的
}
g1setColor(Colorblack);
g1fillOval(x_click, y_move + 5 10, 5, 5);//把上一次画的彩色圆,用黑色画一遍,就能让它消失在背景里
try {
ThreadcurrentThread()sleep(v++);//让程序等一下,让你看到效果,不然画完的东西一下就不见了,你看不清。
} catch (InterruptedException e) {
}
}//上面这段代码是烟花的升上去的那一串东西的效果
for (int j = 12; j >= 0; j--) {
g1setColor(Colorblack);
g1fillOval(x_click, y_move + (j 5), 5, 5);
try {
ThreadcurrentThread()sleep((v++) / 3);
} catch (InterruptedException e) {
}
}//让最后的那串东西的点消失
y_move = 400;
g1setColor(Colorblack);
while (y_move > y_click) {
g1fillOval(x_click - 2, y_move, 9, 5);
y_move -= 5;
}//这段不太清楚是干什么的,我把它去掉,看不出效果的变化
v = 15;
for (int i = 0; i <= 25; i++) {
r = (((int) Mathround(Mathrandom() 4321)) % 200) + 55;
g = (((int) Mathround(Mathrandom() 4321)) % 200) + 55;
b = (((int) Mathround(Mathrandom() 4321)) % 200) + 55;
g1setColor(new Color(r, g, b));
g1drawOval(x_click - 3 i, y_click - 3 i, 6 i, 6 i);
if (i < 23) {
g1drawOval(x_click - 3 (i + 1), y_click - 3 (i + 1),
6 (i + 1), 6 (i + 1));
g1drawOval(x_click - 3 (i + 2), y_click - 3 (i + 2),
6 (i + 2), 6 (i + 2));
}//上面这段是画爆炸的效果
try {
ThreadcurrentThread()sleep(v++);//停一下,看效果
} catch (InterruptedException e) {
}
g1setColor(Colorblack);
g1drawOval(x_click - 3 i, y_click - 3 i, 6 i, 6 i);//然后画黑圈,相当于让彩圈消失。
}
}
public void mousePressed(MouseEvent e) {//点击从这里开始~~~~~~~~~~~~~~
x = egetX();
y = egetY();//得到鼠标点击的坐标
Thread one = new Thread(this);//新建一个线程
onestart();//启动这个线程,到上面的run方法
one = null;//把这个线程置为空,让它执行完以后就释放
}
如果你想一下自己写要怎样写这个程序,就很容易理解这个程序了。
一直从下向上画圆,然后把下面的圆擦掉,就能得到一个向上升的烟花效果,
爆炸效果就是先画小圆再画大圆,然后擦掉小圆,再擦掉大圆。
function firework()
% 烟花烟花满天飞
% 2011625
OldHandle = findobj('Type','figure','Tag','FireWork');
if ishandle(OldHandle)
close(OldHandle);
end
% 图形窗口初始化
fig = figure('units','normalized','position',[01 01 08 08],
'menubar','none','name','烟花满天飞',
'numbertitle','off','color',[0 0 0],'tag','FireWork');
% 烟花炸开前的初始位置
h0 = line(0,0,0,'marker','',
'markersize',18,
'MarkerEdgeColor',[1 1 1],
'MarkerFaceColor',[1 1 1],
'EraseMode','xor',
'color',[0 0 0]);
% 设置坐标系显示属性
axis equal
axis([-50 50 -50 50 0 100])
axis off
view(-42,22)
% 设置参数
rate = 1:-001:0;
% 颜色衰减率
v0 = 45; % 烟花头初始速度
g = -98; % 重力加速度
usedtime = -v0/g; % 烟花头爆炸前所经历时间
zs = v0usedtime+05gusedtime^2; %烟花头爆炸前达到的最高高度
theta = rand(250,1)2pi; % 各粒子速度的方位角
phi = rand(250,1)2pi-pi; % 各粒子速度的仰角
age = 20; % 粒子生存期
% 常用颜色矩阵
colormat = [10 05 05
10 075 05
10 10 05
075 10 05
05 10 05
05 10 075
05 10 10
05 075 10
05 05 10
075 05 10
10 05 10
10 05 075];
% 随机产生各粒子对应的颜色序号
colorid = randsample(12,250,true);
% 粒子对应的颜色矩阵
colormat = colormat(colorid,:);
% 粒子颜色与背景色(夜色)的距离
colordist = sqrt(sum(colormat^2,2));
v1 = 20; % 粒子的初始速度
k = 1; % 颜色衰减率初始序号
timerA = timer('TimerFcn',@TimerFcnA,
'executionmode','fixedspacing','Period',0001);
start(timerA);
h = getappdata(gcf,'HandleParticle');
timerB = timer('TimerFcn',{@TimerFcnB},
'executionmode','fixedspacing','period',0001);
%--------------------------------------------------------------------------
% 定时器回调函数(烟花头)
%--------------------------------------------------------------------------
function TimerFcnA(timerA,event)
ta = get(timerA,'TasksExecuted')01;
if ta <= usedtime
z = v0ta+05gta^2;
set(h0,'zdata',z,
'MarkerEdgeColor',[1 1 1],
'MarkerFaceColor',[1 1 1])
drawnow
%pause(001)
else
delete(h0)
stop(timerA);
x0 = zeros(2,250);
y0 = zeros(2,250);
z0 = zsones(2,250);
h = line(x0,y0,z0,'marker','h',
'markersize',12,
'MarkerEdgeColor',[1 1 1],
'MarkerFaceColor',[1 1 1],
'EraseMode' , 'xor',
'color',[0 0 0]);
setappdata(gcf,'HandleParticle',h);
start(timerB);
end
end
以上就是关于如何用vb编写"礼花绽放",并写出它的代码全部的内容,包括:如何用vb编写"礼花绽放",并写出它的代码、如何用vba实现放烟花、java烟花程序看不懂,求解释!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)