JAVA实现模拟小球平抛自由落体

本篇实现了利用java线程的内容,模拟小球做平抛自由落体

代码部分:

import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class Demo extends JFrame{
	JMenuBar bar;
	JMenu j;
	JMenuItem i;
	Container c = getContentPane();
	JLabel label = new JLabel();
	boolean need = true;
	public Demo() {
		// TODO Auto-generated constructor stub
		setBounds(300, 50, 700, 500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("模拟小球坠落");
		setVisible(true);
		init();
		setBar();
		setResizable(false);
//		setLabel(670,425);//最低y=425,x=670
	}
	
	void init(){
		c.setLayout(null);
		setLabel(670,0);
		label.setBackground(Color.cyan);
		label.setOpaque(true);
		c.add(label);
	
	}
	
	void startThread(){
		th.start();
	}
	
	Thread th = new Thread(new Runnable() {
			@Override
		public void run() {
			// TODO Auto-generated method stub
			boolean isUP = false;
			int time = 0;
			int goTime =0;
			int high = 425;
			int x = 0;
			int y = 0;
			double v = 0;//速度
			double a = 0.008;//加速度
			while(need){
				synchronized (this) {
//					boolean vChanged = false;
					x = (int)(670-0.7*time);
//					System.out.println(x+","+y);
					if(y>425){
						isUP = true;
						v = goTime*a;
						goTime = 0;
						high = high/2;					
					}
					if(y<425-high){
						isUP = false;
						v = 0;
						goTime = 0;
					}
					if(isUP){
						y = 425+(int)((1.2*a*goTime*goTime)-(1*v*goTime));
					}else{
						y = (int)(a*goTime*goTime+425-high);
					}
					
					setLabel(x,y);
					goTime++;
					time++;
					try {
						Thread.sleep(5);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					if(x==0){
						need = false;
					}
				}
			
			}
		}
	});
	
	void setBar(){
		bar = new JMenuBar();
		j = new JMenu("开始");
		i = new JMenuItem("释放小方块");
		j.add(i);
		bar.add(j);
		setJMenuBar(bar);
		i.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				startThread();
			}
		});
	}
	
	//设置标签状态方法
	void setLabel(int x,int y){
		label.setBounds(x, y, 20, 20);
	}
		
	public static void main(String[] args) {
		Demo d = new Demo();
	}
}

运行截图:

在这里插入图片描述
大概就是从右上角biu~的掉下来,弹一哈,再biu ~的掉下来……直到尽头

发布了34 篇原创文章 · 获赞 65 · 访问量 3741

猜你喜欢

转载自blog.csdn.net/baidu_41860619/article/details/103516907