/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package poo;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.ConcurrentModificationException;
import java.util.List;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Choque extends JFrame {
    private AreaDibujo miAreaDibujo;
    private JButton miBoton1;
    private JButton miBoton2;
    List <Canica> misCanicas;
    Random r;
    MueveCanicas salto;
    static public void main(String args[]) {
        new Choque();
    } 
    void incremento()
    {
        int x,y;
        
    }
    public Choque(){      
        JPanel AreaControl = new JPanel(new GridLayout(2, 1));
        miBoton1 = new JButton("Agregar");
        miBoton2 = new JButton("Quitar");
        
        miBoton1.addActionListener(new botonAgrega());
        miBoton2.addActionListener(new botonQuitar());
        
        r = new Random();        
        AreaControl.add(miBoton1);
        AreaControl.add(miBoton2);
        
        
        miAreaDibujo = new AreaDibujo();
        misCanicas = new ArrayList();
        misCanicas.add(new Canica());
        this.add(AreaControl, BorderLayout.WEST);    
        this.add(miAreaDibujo,BorderLayout.EAST);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        pack();
        setVisible(true);
        salto = new MueveCanicas();
        salto.start();
    }      
    
    private class AreaDibujo extends JPanel{
        public AreaDibujo(){
            this.setBackground(Color.WHITE);
            this.setPreferredSize(new Dimension(600, 600)); 
        }
        
        @Override
        public void paint(Graphics g){
            super.paint(g);
            
            if(!misCanicas.isEmpty()) {
                for(Canica a : misCanicas) {
                    a.dibuja(g);
                }
            }
        }        
    }
    
    private class Canica {
        int x0, y0,dx,dy;
        
        public Canica() {
            x0 = 300;
            y0 = 300;
            dx=r.nextInt()%3+1;
            dy=r.nextInt()%3+1;
        }
        
         public void mueve(/*int dx, int dy*/) {
             int aux;
             
             
/*
             if (x0 == 0 || y0 == 0)
                     misCanicas.add(new Canica());
*/
             aux = x0+dx;
             if(aux >=0 && aux <=600)
                 this.x0 = aux;
             else
             {
                 if(x0<=0)
                     dx=Math.abs(r.nextInt()%3)+1;
                 if(x0>=600)
                     dx=-Math.abs(r.nextInt()%3)-1;
                 aux=x0+dx;
                 if(aux >=0 && aux <=600)
                    this.x0 = aux;
                 //misCanicas.add(new Canica());
             }
        
             aux = y0+dy;
             if(aux >=0 && aux <=600)
                 this.y0 = aux;
             else
             {
                 if(y0<=0)
                     dy=Math.abs(r.nextInt()%3)+1;
                 if(y0>=600)
                     dy=-Math.abs(r.nextInt()%3)-1;
                 aux=y0+dy;
                 if(aux >=0 && aux <=600)
                    this.y0 = aux;   
                 //misCanicas.add(new Canica());
             }
        }
         
         public void dibuja(Graphics g) {
            g.setColor(Color.BLACK);
            g.fillOval(x0, y0, 10, 10);
        }   
    }
    
    private class botonAgrega implements ActionListener{

        public void actionPerformed(ActionEvent arg0) {
            int x = Math.abs(r.nextInt())%600;
            int y = Math.abs(r.nextInt())%600;
            misCanicas.add(new Canica());
            repaint();
        }
    }  
    void agregacanicas()
    {
        misCanicas.add(new Canica());
    }
    private class botonQuitar implements ActionListener{

        public void actionPerformed(ActionEvent arg0) {
            misCanicas.remove(0);
            repaint();
        }
    } 
    private class MueveCanicas extends Thread {
        
        @Override
        public void run(){
            while(true) {
               for(Canica a : misCanicas) 
                    a.mueve(/*r.nextInt()%2, r.nextInt()%2*/);
               repaint();
                try {
                    sleep(10);
                } catch (InterruptedException ex) {
              //      Logger.getLogger(EjemploHilo.class.getName()).log(Level.SEVERE, null, ex);
                }
            }         
        }
    }
     
   
}

