为了使制作出来的满天星更加好看,采用随机数产生,对于产生的位置采用二维数组进行定义、
为了使动画动起来,通过改变横纵坐标的大小来实现(写这篇的目的是为了证明Java不是枯燥无味的)
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JPanel;
/**
* 画布类:JPanel
* @author Administrator
*
*/
public class MyJPanel extends JPanel implements Runnable{
//定义50个星星的坐标
int[] x=new int[70];
int[] y=new int[70];
//弹幕效果
String[] strArr= {"皆是遗憾","想见你","巅峰相见"};
int[] strx=new int[strArr.length];
int[] stry=new int[strArr.length];
//全局变量
int x1=160;
//构造方法
public MyJPanel() {
Random rand=new Random();//随机数
for(int i=0;i<x.length;i++) {
x[i]=rand.nextInt(1200);
y[i]=rand.nextInt(600);
}
for(int i=0;i<strArr.length;i++) {
strx[i]=rand.nextInt(1200);
stry[i]=rand.nextInt(600);
}
new Thread(this).start();
}
//重写
//Graphics g:画笔
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
//修改画布背景
this.setBackground(Color.darkGray);
g.setColor(Color.BLACK);
Font font1=new Font("宋体",Font.BOLD,40);
g.setFont(font1);
g.drawString("予你姗姗而来", x1, 400);
g.setColor(Color.BLACK);
Font font2=new Font("楷体",Font.BOLD,40);
g.setFont(font2);
for(int i=0;i<strArr.length;i++) {
g.drawString(strArr[i], strx[i], stry[i]);
}
//画月亮
g.setColor(Color.WHITE);
g.fillOval(100, 100, 200, 200);
g.setColor(Color.darkGray);
g.fillOval(x1, 100, 200, 200);
//画一颗星
//代码格式化:ctrl+I ctrl+shift+F
for(int i=0;i<x.length;i++) {
//0-255
int red=(int) (Math.random()*256);
int green=(int) (Math.random()*256);
int blue=(int) (Math.random()*256);
Color color=new Color(red,green,blue);
g.setColor(color);//颜色
Font font=new Font("宋体",Font.BOLD,10);
g.setFont(font);
g.drawString("*", x[i], y[i]);
}
}
@Override
public void run() {
// TODO Auto-generated method stub
// System.out.println("嘿嘿");
while(true) {
x1=x1-2;
if(x1<=0) {
x1=1200;
}
for(int i=0;i<x.length;i++) {
x[i]=x[i]-5;
if(x[i]<=0)
x[i]=1200;
}
for(int i=0;i<y.length;i++) {
y[i]=y[i]-2;
if(y[i]<=0)
y[i]=600;
}
for(int i=0;i<strArr.length;i++) {
stry[i]=stry[i]-2;
if(stry[i]<=0)
stry[i]=600;
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
repaint();//重绘,重复调用paint方法
}
}
}
import javax.swing.JFrame;
/**
* java swing:
* 窗体类:JFrame
*
*/
public class MyJFrame extends JFrame{
//构造方法:方法名与类名相同。没有任何返回值类型
//作用:初始化
public MyJFrame() {
//this;指代当前类对象
this.setTitle("所望星辰皆不是你");
//设置窗体的宽和高
this.setSize(1200, 600);
//显示居中
this.setLocationRelativeTo(null);
//优化一下,退出窗体的时候,关闭进程
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//显示可见
this.setVisible(true);
//创建画布对象
MyJPanel mj=new MyJPanel();
//将画布添加到窗体上
this.add(mj);
}
//主方法:程序的入口
public static void main(String[] args) {
new MyJFrame();
}
}