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.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);//画圆,圆点在点击的X轴,程序界面的最高点,长为5,宽为5
y_move -= 5;//最高点-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;//rgb是光的三原色,这个就是烟花产生的颜色,这里定义成随机的,但在一个范围里
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 = new Thread(this);//新建一个线程
one.start();//启动这个线程,到上面的run方法
one = null;//把这个线程置为空,让它执行完以后就释放
}
如果你想一下自己写要怎样写这个程序,就很容易理解这个程序了。
一直从下向上画圆,然后把下面的圆擦掉,就能得到一个向上升的烟花效果,
爆炸效果就是先画小圆再画大圆,然后擦掉小圆,再擦掉大圆。
就是就是
这方面用c麻烦死了
还是学学flash吧
简单得多
有c的基础
actionscript也不难学
就是找了三个随机数, r,g,b作为颜色的初始色彩,在三个数字上偏移, 得到相近的颜色.. 并画出来..
我这里网速比较慢,打不开网页,你自己去看看吧,应该不会错的,希望能够帮到你
#include "stdlib.h"
#include "graphics.h"
#include "stdio.h"
#include "math.h"
#include "conio.h "
#define PI 3.1425926
main()
{
int gdriver=DETECT,gmode,errorcode;
int a[10],b[10],x,y,c,r,i,j,t;
double rad = 0.0;
/* initialize graphics and local variables */
initgraph(gdriver , gmode ,"");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error : %s/n",grapherrormsg(errorcode));
printf("Please any key to halt:");
getch();
exit(1); /* terminate with an error code */
}
randomize();
for(;!kbhit();)
{
x=rand()%500+100; /*随机中心坐标*/
y=rand()%300+100;
for(r = 0 ;r = 8 ; r++ ) /*烟花的大小设定*/
{
for(i = 0,rad = 0.0 ; rad 2*PI; rad += 0.78 ) /*设定坐标*/
{
a[i++] = x + (int)r *10* cos(rad);
b[ i ] = y + (int)r *10* sin(rad);
}
t = i;
for(i=1;it;i++)
{
c=rand()%13+1; /*各点的颜色随机*/
setcolor(c); /*功能:将当前图形屏幕的当前笔画颜色置为color.*/
circle(a[i],b[i],1);/* a[i],b[i] 为圆心 1 为半径 画圆 */
}
delay(10000);
delay(10000);
cleardevice();
函数名: cleardevice
功 能: 清除图形屏幕
用 法: void far cleardevice(void);
}
}
getch();
closegraph();
函数名: closegraph
功 能: 关闭图形系统
用 法: void far closegraph(void);
}
扩展资料
C语言:表白显示(多彩小心心)
#include stdio.h
#include math.h
#include stdlib.h
#define I 20
#define R 340
#include string.h
int main()
{
char answer[10];
printf("遇到你\n我才发现\n曾经所有的条件\n似乎都成了我等你的借口\n\n");
printf("我对你的感情已经决堤\n所以\n请允许我,从今往后映入你\n明媚的眼\n");
printf("我\n想和你\n耳鬓厮磨,相濡以沫!");
printf("答应我吧!\n输入yes,你可以看到我的真心\n");
scanf("%s", answer);
float y, x, z, f;
for (y = 1.5f; y -1.5f; y -= 0.1f)
{
for (x = -1.5f; x 1.5f; x += 0.05f)
{
z = x * x + y * y - 1;
f = z * z*z - x * x*y*y*y;
putchar(f = 0.0f ? "*********"[(int)(f*-8.0f)] : ' ');
}
putchar('\n');
}
long time;
for (;;)
{
system("color a");
for (time = 0; time99999999; time++);
system("color b");
for (time = 0; time99999999; time++);
system("color c");
for (time = 0; time99999999; time++);
system("color d");
for (time = 0; time99999999; time++);
system("color e");
for (time = 0; time99999999; time++);
system("color f");
for (time = 0; time99999999; time++);
system("color 0");
for (time = 0; time99999999; time++);
system("color 1");
for (time = 0; time99999999; time++);
system("color 2");
for (time = 0; time99999999; time++);
system("color 3");
for (time = 0; time99999999; time++);
system("color 4");
for (time = 0; time99999999; time++);
system("color 5");
for (time = 0; time99999999; time++);
system("color 6");
for (time = 0; time99999999; time++);
system("color 7");
for (time = 0; time99999999; time++);
system("color 8");
for (time = 0; time99999999; time++);
system("color 9");
}
getchar();
return 0;
}
控制台肯定不行。窗口程序至少属于可视化界面。
初学者别搞这个了,你要做的这个可以用其他软件更方便实现。
非要用C#的winform来做动画,研究一下System.Drawing吧。
至于编程思路可以简单给你讲一个:
定义个烟花类:
属性:
烟花的颜色【Color】,
烟花当前位置【Point】,
飞行方向【int】,
飞行轨迹【Point集合】,
烟花尾巴长度【int】,
爆炸生成烟花数量【int】
方法:
烟花爆炸()——如果爆炸生成的烟花数量设置是0,那么就不爆炸;否则安装数量new 新的烟花出来,360°除以烟花数量设置烟花方向。
烟花飞行()——飞行轨迹记录之前的位置,通过飞行方向计算当前位置,通过尾巴长度颜色属性进行图像刷新。
。。。。。。
我来说两句