zoukankan      html  css  js  c++  java
  • Java 碰撞的球 MovingBall (整理)

      1 package demo;
      2 
      3 /**
      4  *                     Java 碰撞的球 MovingBall (整理)
      5  * 声明:
      6  *     这份源代码没有注释,已经忘记了为什么要写他了,基本上应该是因为当时觉得好玩吧。
      7  * 有时候想想,也许是因为当时就是想做一个这样的效果的东西。
      8  *
      9  *                                   2016-1-2 深圳 南山平山村 曾剑锋
     10  */
     11 
     12 import java.awt.Color;
     13 import java.awt.Graphics;
     14 
     15 import javax.swing.JFrame;
     16 import javax.swing.JPanel;
     17 
     18 public class MovingBall extends JPanel {
     19 
     20     private static final long serialVersionUID = 1L;
     21     static int centerX = 600/2;
     22     static int centerY = 600/2;
     23     final Ball ball = new Ball(centerX, centerY);
     24     boolean cicleflag = true;
     25     int cicleSemi = 0;
     26     double angle = 0;
     27     int ballCicle = 30;
     28     public MovingBall() {
     29         start();
     30     }
     31     @Override
     32     public void paint(Graphics graphics) {
     33         super.paint(graphics);
     34         this.setBackground(Color.black);
     35         graphics.setColor(Color.BLUE);
     36         graphics.fillArc(centerX-cicleSemi/2, centerY-cicleSemi/2, cicleSemi, cicleSemi, 0, 360);
     37         ball.drawing(graphics);
     38         graphics.setColor(Color.white);
     39         graphics.drawArc(centerX-cicleSemi/2, centerY-cicleSemi/2, cicleSemi, cicleSemi, 0, 360);
     40         graphics.fillArc((int)(centerX+cicleSemi/2*Math.cos(angle*Math.PI/180)-ballCicle/2), (int)(centerY+cicleSemi/2*Math.sin(angle*Math.PI/180)-ballCicle/2), ballCicle, ballCicle, 0, 360);
     41         graphics.fillArc((int)(centerX+cicleSemi/2*Math.cos((angle+180)*Math.PI/180)-ballCicle/2), (int)(centerY+cicleSemi/2*Math.sin((angle+180)*Math.PI/180)-ballCicle/2), ballCicle, ballCicle, 0, 360);
     42     }
     43     public void start() {
     44         new Thread(new Runnable() {
     45             
     46             @Override
     47             public void run() {
     48                 while (true) {
     49                     try {
     50                         ballMove(ball);
     51                         
     52                         if (cicleflag == true) {
     53                             cicleSemi += 2;
     54                             if (cicleSemi > centerX) {
     55                                 cicleflag = false;
     56                             }
     57                         }else {
     58                             cicleSemi -= 2;
     59                             if (cicleSemi < 0) {
     60                                 cicleflag = true;
     61                             }
     62                         }
     63                         angle ++;
     64                         repaint();
     65                         Thread.sleep(20);
     66                     } catch (InterruptedException e) {
     67                         e.printStackTrace();
     68                     }
     69                 }
     70                 
     71             }
     72 
     73             public void ballMove(Ball ball) {
     74                 ball.x += ball.dx;
     75                 ball.y += ball.dy;
     76                 if (ball.x < 50 || ball.x > centerX*2-50) {
     77                     ball.dx = -ball.dx;
     78                 }else if (ball.y < 50 || ball.y > centerY*2-50) {
     79                     ball.dy = -ball.dy;
     80                 }
     81             }
     82         }).start();
     83     } 
     84     
     85     public static void main(String[] args) {
     86         JFrame jFrame = new JFrame();
     87         jFrame.setTitle("MovingBall");
     88         jFrame.setSize(centerX*2, centerY*2);
     89         jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     90         jFrame.setLocationRelativeTo(null);
     91         
     92         MovingBall moveBall = new MovingBall();
     93         jFrame.add(moveBall);
     94         jFrame.setVisible(true);
     95     }
     96 }
     97 
     98 class Ball{
     99     static int step = 10;
    100     int x;
    101     int y;
    102     int dx;
    103     int dy;
    104     double angle;
    105     int cicle = 30;
    106     public Ball(int x, int y) {
    107         this.x = x;
    108         this.y = y;
    109         this.angle = Math.random()*360;
    110         if (angle <= 180) {
    111             dx = (int) (step*Math.cos(angle*Math.PI/180));
    112             dy = (int) (step*Math.sin(angle*Math.PI/180));
    113         }else {
    114             dx = (int) (step*Math.cos(angle*Math.PI/180));
    115             dy = -(int) (step*Math.sin(angle*Math.PI/180));
    116         }
    117     }
    118     public Ball(int x, int y, int angle) {
    119         this.x = x;
    120         this.y = y;
    121         this.angle = angle;
    122         if (angle <= 180) {
    123             dx = (int) (step*Math.cos(angle*Math.PI/180));
    124             dy = (int) (step*Math.sin(angle*Math.PI/180));
    125         }else {
    126             dx = (int) (step*Math.cos(angle*Math.PI/180));
    127             dy = -(int) (step*Math.sin(angle*Math.PI/180));
    128         };
    129     }
    130     public void drawing(Graphics graphics) {
    131         graphics.setColor(Color.white);
    132         graphics.fillArc(this.x-cicle/2, this.y-cicle/2, cicle, cicle, 0, 360);
    133     }
    134 }

    效果如图:

  • 相关阅读:
    JavaScript学习总结(七)Ajax和Http状态字
    JavaScript学习总结(六)数据类型和JSON格式
    JavaScript学习总结(五)原型和原型链详解
    JavaScript学习总结(四)function函数部分
    JavaScript学习总结(三)BOM和DOM详解
    微信小程序canvas绘制海报,并且实现图片保存至相册例子
    微信小程序与webview交互实现支付
    vue-微信支付or支付宝支付片段
    微信小程序授权登录
    微信分享
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/5094848.html
Copyright © 2011-2022 走看看