Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.85 KB | None | 0 0
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.awt.geom.Point2D;
  4. import java.util.ArrayList;
  5. import java.util.Random;
  6.  
  7. import javax.swing.*;
  8.  
  9.  
  10. public class RobuttonMain
  11. {
  12.     public static void main(String[] args)
  13.     {
  14. //        double alpha = Math.toDegrees(Math.atan2(74.48225726895468-63.841134965679906, 82.03132543476201-98.03974349211745));
  15. //        if (alpha < 0) alpha+=360;
  16. //        System.out.println(alpha);// (180 * value / Math.PI);
  17.  
  18.         JFrame frame = new JFrame("RobuttonMain");
  19.         frame.setBackground(Color.lightGray);
  20.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  21.        
  22.         RobuttonPanel panel = new RobuttonPanel();
  23.         frame.add(panel);
  24.        
  25.         frame.pack();
  26.         frame.setVisible(true);
  27.        
  28.         panel.start();
  29.     }
  30. }
  31.  
  32.  
  33.  
  34. class RobuttonPanel extends JPanel
  35. {
  36.     int xSize = 200;
  37.     int ySize = 200;
  38.     ArrayList <Robutton> roblist= new ArrayList<Robutton>();
  39.     ArrayList <Coin> coinlist= new ArrayList<Coin>();
  40.    
  41.    
  42.     @Override
  43.     protected void paintComponent( Graphics g )
  44.     {
  45.         super.paintComponent( g );
  46.        
  47.         g.setColor(Color.BLACK);
  48.         for (Robutton rob : roblist) {
  49.             g.fillOval(rob.getXInt()-Robutton.radius, rob.getYInt()-Robutton.radius, Robutton.radius*2, Robutton.radius*2);
  50. //            g.setColor(Color.RED);
  51. //            g.drawString(Integer.toString(i), roblist.get(i).getXInt()-2, roblist.get(i).getYInt()+4);
  52.         }
  53.         for (Coin coin : coinlist) {
  54.             g.setColor(Color.GREEN);
  55.             g.fillOval(coin.getXInt()-Coin.radius, coin.getYInt()-Coin.radius, Coin.radius*2, Coin.radius*2);
  56.         }
  57.     }
  58.    
  59.    
  60.    
  61.     public void start()
  62.     {
  63.         for (int i = 0; i < 15; i++) {
  64.             Robutton rob = new Robutton (getRandomFreePos(Robutton.radius));
  65.             rob.setDirectionDegree(new Random().nextInt(360));
  66.             roblist.add(rob);    
  67.         }
  68.        
  69.         for (int i = 0; i < 5; i++) {
  70.             coinlist.add(new Coin (getRandomFreePos(Coin.radius)));  
  71.         }
  72.        
  73.  
  74. //        Robutton rob = new Robutton (new Point2D.Double(170, 45));
  75. //        rob.setDirectionDegree(0);
  76. //        roblist.add(rob);
  77. //        rob = new Robutton (new Point2D.Double(140, 45));
  78. //        rob.setDirectionDegree(180);
  79. //        roblist.add(rob);
  80.        
  81.         Thread mainThread = new Thread() {
  82.             @Override
  83.             public void run()
  84.             {
  85.                 ActionListener taskPerformer = new ActionListener() {
  86.                     public void actionPerformed(ActionEvent e){
  87.                         doOneStep();
  88.                     }
  89.                 };
  90.                 Timer timer = new Timer(6, taskPerformer);
  91.                 timer.start();
  92.             }
  93.         };
  94.         mainThread.start();
  95.     }
  96.    
  97.    
  98.    
  99.     public void doOneStep() {
  100.         if (true) {
  101.             for (Robutton rob : roblist)
  102.                 rob.moveSimple();
  103.            
  104.            
  105.             for (Robutton rob : roblist)
  106.                 rob.collideBoundSimple(xSize, ySize);
  107.            
  108.             for (int i = 0; i < roblist.size()-1; i++) {
  109.                 for (int j = i+1; j < roblist.size(); j++) {
  110.                     roblist.get(i).collideRobuttonSimple(roblist.get(j));
  111.                 }
  112.             }
  113.            
  114.             for (Robutton rob : roblist) {
  115.                 for (Coin coin : coinlist) {
  116.                     rob.collideCoinSimple(coin);
  117.                 }
  118.             }
  119.             repaint();
  120.             return;
  121.         }
  122.        
  123.         double timeLeft = 1.0;
  124.        
  125.         while (timeLeft > 0) {
  126.             double firstCollision = timeLeft;
  127.             for (Robutton rob : roblist) {
  128.                 double collisionTime = rob.collideBound(xSize, ySize, firstCollision);
  129.                 if (collisionTime < firstCollision)
  130.                     firstCollision = collisionTime;
  131.             }
  132.            
  133.             for (int i = 0; i < roblist.size()-1; i++) {
  134.                 for (int j = i+1; j < roblist.size(); j++) {
  135.                     double collisionTime = roblist.get(i).collideRobutton(roblist.get(j), firstCollision);
  136.                     if (collisionTime < firstCollision)
  137.                         firstCollision = collisionTime;
  138.                 }
  139.             }
  140.            
  141.             for (Robutton rob : roblist) {
  142.                 for (Coin coin : coinlist) {
  143.                     double collisionTime = rob.collideCoin(coin, firstCollision);
  144.                     if (collisionTime < firstCollision)
  145.                         firstCollision = collisionTime;
  146.                 }
  147.             }
  148.            
  149.            
  150.             System.out.println("Started moving, time: " + firstCollision);
  151.             for (Robutton rob : roblist)
  152.                 rob.move(firstCollision);
  153.             repaint();
  154.             timeLeft -= firstCollision;
  155.         }
  156.     }
  157.    
  158.    
  159.    
  160.     private Point2D.Double getRandomFreePos(int radius) {
  161.         Random random = new Random();
  162.         boolean collide = false;
  163.         Point2D.Double nextPos;
  164.         do {
  165.             collide = false;
  166.             nextPos = new Point2D.Double( random.nextInt(xSize-2-radius*2)+radius+1, random.nextInt(ySize-radius*2)+radius+1);
  167.             for (Robutton rob : roblist){
  168.                 if ((nextPos.distance(rob.getPos()) < Robutton.radius*2+1)) {
  169.                     collide = true;
  170.                 }
  171.             }
  172.             for (Coin coin : coinlist){
  173.                 if ((nextPos.distance(coin.pos) < Coin.radius*2+1)) {
  174.                     collide = true;
  175.                 }
  176.             }
  177.         }while (collide == true);
  178.         return nextPos;
  179.     }
  180.    
  181.    
  182.    
  183.     @Override
  184.     public Dimension getPreferredSize() {
  185.         return new Dimension (xSize, ySize);
  186.        
  187.     }
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement