Java模拟弹球效果

简介: 1 /* 2 * 不添加事件监听的话最大最小可以用,但关闭不可以 3 */ 4 import java.awt.Color; 5 import java.awt.Frame; 6 import java.
 1 /*
 2  * 不添加事件监听的话最大最小可以用,但关闭不可以
 3  */
 4 import java.awt.Color;
 5 import java.awt.Frame;
 6 import java.awt.Graphics;
 7 import java.awt.Image;
 8 import java.awt.Toolkit;
 9 import java.awt.event.WindowAdapter;
10 import java.awt.event.WindowEvent;
11 //coordinate:坐标系;oval椭圆(矩形的内切,不信可以把矩形和椭圆的参数设置的一样)
12 //计算机画椭圆采用的是参数方程 x = a*cosθ ,y = b*sinθ,不用一般方程;采用弧度
13 public class BallGame extends Frame {
14     
15     /**
16      * 图片的位置不和src平级就显示不了
17      */
18     private static final long serialVersionUID = -4408396034592021515L;//这个是导出jar包时建议的,我也不知道啥意思
19     Image sun = Toolkit.getDefaultToolkit().getImage("images/sun.jpg"); 
20     double x=100;
21     double y=100;
22     double degree = Math.PI/3;//初始角度
23     public void paint(Graphics g){
24         //System.out.println("窗口被画了一次!");
25         g.drawImage(sun, (int)x,(int)y, null);
26         x = x+ 10*Math.cos(degree);//椭圆的中心每次要变化
27         y = y+10*Math.sin(degree);
28         
29         if(y>300-30){
30             degree = - degree;
31         }
32         if(x>500-30){
33             degree = Math.PI-degree;
34         }
35         if(x<0){
36             degree = Math.PI-degree;
37         }
38         if(y<30){//减去标题栏宽度,因为标题栏也算在坐标系内,否则上面小球会进去
39             degree = -degree;
40         }
41     }
42     
43     void launchFrame(){
44         setSize(500, 300);
45         setLocation(50, 50);
46         setTitle("火星十一郎");
47         setBackground(Color.black);
48         myEvent();
49         setVisible(true);
50         new PaintThread().start();
51     }
52     
53     public static void main(String[] args){
54         new BallGame().launchFrame();
55     }
56 
57     class PaintThread extends Thread {
58         public void run(){
59             while(true){
60                 repaint();  //重画窗口!
61                 try{
62                     Thread.sleep(40);   //40ms    1s=1000ms
63                 }catch (Exception e) {
64                     e.printStackTrace();
65                 }
66             }
67         }
68     }
69     
70     private void myEvent()
71     {
72         /*
73          * Cannot make a static reference to the non-static method addWindowListener(WindowListener) from the type Window
74          * 把BallGame改成this就对了
75          */
76         this.addWindowListener(new WindowAdapter()//窗口监听
77         {
78             public void windowClosing(WindowEvent e)
79             {
80                 //System.out.println("窗体执行关闭!");
81                 System.exit(0);
82             }
83         });
84     }
85 }

  导出jar包直接用MyEclipse的Export,不过我发现我的jar包没显示图片。

  Roy说这样写就行了(确实对了),并把images放在src目录下。

1 Image sun = Toolkit.getDefaultToolkit().getImage(getFilePath("/images/sun.jpg"));
2 
3 
4 public URL getFilePath(String path) {
5         return BallGame.class.getResource(path);
6     }

 

目录
相关文章
|
6月前
|
Java
JAVA弹球小游戏
JAVA弹球小游戏
96 0
|
网络协议 NoSQL Java
模拟面试一(Java)
模拟面试一(Java)
155 1
模拟面试一(Java)
|
存储 Java 索引
不可上位!数据结构队列,老实排队,Java实现数组模拟队列及可复用环形队列
不可上位!数据结构队列,老实排队,Java实现数组模拟队列及可复用环形队列
144 0
不可上位!数据结构队列,老实排队,Java实现数组模拟队列及可复用环形队列
|
存储 设计模式 Java
【Java作业】模拟停车场(超详细!)
【Java作业】模拟停车场(超详细!)
【Java作业】模拟停车场(超详细!)
|
存储 Java 程序员
Java 模拟二级文件系统 中
本系列将记述使用 Java 实现一个简单的二级文件系统的过程。本项目意图效仿 Linux 的文件管理,但是学的又没那么像,仅仅是一些皮毛。因此使用类似 Inode 的东西记录文件在磁盘上的信息。
221 1
|
存储 Java 人机交互
Java 模拟二级文件系统 上
本系列将记述使用 Java 实现一个简单的二级文件系统的过程。
159 1
|
Java Scala 开发者
Java 模拟 Scala 的运行机制|学习笔记
快速学习 Java 模拟 Scala 的运行机制。
101 0
Java 模拟 Scala 的运行机制|学习笔记
|
存储 算法 Java
Java数据结构:使用数组模拟队列(队列与环形队列)
文章目录 1 队列 1.1 何为队列及实现思路 1.2 数组模拟队列ArrayQueue的实现 1.3 测试队列ArrayQueueDemo测试类的实现 2 环形队列 2.1 环形队列简介及实现思路 2.2 数组模拟环形队列CircleArrayQueue的实现 2.3 测试队列CircleArrayQueueDemo测试类的实现 写在最后
Java数据结构:使用数组模拟队列(队列与环形队列)
LinkedList的模拟实现(Java实现)
LinkedList的底层是用一个双向链表实现的,即一个结点中除了有一个引用指向下一个结点的地址,还有一个引用指向前一个结点的地址。
LinkedList的模拟实现(Java实现)
|
Java
字符串得结果!Java数组模拟栈以实现中缀表达式综合计算器,字符串表达式计算器
字符串得结果!Java数组模拟栈以实现中缀表达式综合计算器,字符串表达式计算器
143 0