java程序实现小球来回运动

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();
        }
    }
}

这里写图片描述

  • 7
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值