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 ~的掉下来……直到尽头

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大青儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值