java基础:窗口右上角有一个静小白球,左下角有一个动小蓝球,我们让动小蓝球去找静小白球,找到以后动小蓝球在原路返回,这样来回运动。背景是下雪场景。
import java.awt.Component;
import javax.swing.JFrame;
public class MyStarFrame {
//给私有化JFrame起一个名称,名叫frame
private JFrame frame;
//给私有化MyStarPanel起一个名称,名叫msp(画板类)
private MyStarPanel msp;
//给私有化Thread起一个名称,名叫t(让小球动起来)
private Thread t;
//showMe方法
public void showMe(){
//定义JFrame对象
frame = new JFrame();
//定义MyStarPanel对象
msp = new MyStarPanel();
//将msp(画板)添加到窗口中去
frame.add(msp);
//画板调用MyPanel方法,产生随机数(星星)
msp.MyPanel();
//定义Thead对象,与msp关联
t = new Thread(msp);
//动起来
t.start();
//设置窗口的大小(宽和高)
frame.setSize(700, 700);
//窗口标题
frame.setTitle("下雪的练习");
//默认关闭操作
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//可视化
frame.setVisible(true);
}
public static void main(String[] args) {
//实例化
MyStarFrame msf = new MyStarFrame();
//调用showMe方法(显示在窗口上)
msf.showMe();
}
}
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
/*
* extends JPanel 继承
* implements Runnable 接口方法(目的是让其动起来,下边有个run()方法会用到)
* */
public class MyStarPanel extends JPanel implements Runnable{
//定义雪花数组,量为300
int[] x = new int[300];
int[] y = new int[300];
//定义动球的初坐标
int x1 = 0;
int y1 = 600;
//定义小球动的方向,0为左下,1为右上
int att=0;
//构造函数,在画板上随机产生300个雪花
public void MyPanel(){
for(int i=0;i<300;i++){
x[i] = (int)(Math.random()*700);
y[i] = (int)(Math.random()*700);
}
}
//定义paint方法(画星星、球)
public void paint(Graphics g){
//调用paint方法
super.paint(g);
//设置背景颜色为黑色
this.setBackground(Color.black);
//设置画笔颜色为白色(作用于右上角的白球)
g.setColor(Color.WHITE);
//画实心球(右上角的白球,参数分别为x,y,white,height)
g.fillOval(600, 0, 50, 50);
//设置画笔颜色为蓝色(作用于左下角动的蓝球)
g.setColor(Color.blue);
//画动球(这里为什么用x1,y1?想象一下)
g.fillOval(x1, y1, 50, 50);
//设置画笔颜色为白色(为什么老是设置画笔的颜色?想一下吧)
g.setColor(Color.WHITE);
//循环画出300个随机的星星(雪花也行,都是*)
for(int i=0;i<300;i++){
g.drawString("*", x[i], y[i]);
}
}
//使用线程(动力)
public void run(){
while(true){
//定义飞行轨迹
if(att==0){
x1--;
y1++;
}
if(att==1){
x1++;
y1--;
}
//try catch(异常处理)是配套的,不要问为什么,这是规定
try{
//改变飞行轨迹
if(y1<0){
att=0;
}
if(x1<0){
att=1;
}
//雪花(星星)下落,消失一个,就随机产生一个,始终有300个显示在窗口上
for(int i=0;i<300;i++){
//下落
y[i]++;
//如果超出下届则重新从上界下落
if(y[i]>700){
y[i]=0;
}
}
//设置睡眠(下落速度,数越大越慢)
Thread.sleep(10);
}catch(Exception e){}
//重画
repaint();
}
}
}