import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Filosofos extends JFrame{
    private AreaDibujo miAreaDibujo;
    Platos F[];
    static private boolean COMIENDO = true;
    static private boolean PENSANDO = false;
    
    boolean estados[];
    
    public Filosofos() {
        int i;
        miAreaDibujo = new AreaDibujo();        
        F = new Platos[5];
        estados = new boolean[5];
        int coor[][] = {{200, 150}, {165, 197}, {109, 179}, {109, 120}, {165, 102}};
        
        
        for(i=0; i<5; i++) {
            F[i]= new Platos(coor[i][0], coor[i][1]);
            estados[i] = PENSANDO;
            F[i].start();
        }
        
        add(miAreaDibujo);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
        pack();
    }
    
    private class AreaDibujo extends JPanel {
        public AreaDibujo() {
            this.setBackground(Color.WHITE);
            this.setPreferredSize(new Dimension(300,300));
        }
        
        @Override
        public void paint(Graphics g) {
            super.paint(g);
            for(int i=0; i<5; i++)
                F[i].dibuja(g);
        }
    }
    
    private class Platos extends Thread {
        private int x, y;
        private boolean comiendo;
        
        public Platos(int unaX, int unaY) {
            x = unaX;
            y = unaY;
            
            comiendo = true;
        }
        
        public void cambia_Estado() {
            comiendo = !comiendo;
        }
        
        @Override
        public void run()  {
            while(true) {
                try {
                    sleep(500);
                    cambia_Estado();
                    repaint();
                } catch (InterruptedException ex) {
                    Logger.getLogger(Filosofos.class.getName()).log(Level.SEVERE, null, ex);
                }  
            }   
        } 
        
        public void dibuja(Graphics g) {
            if (comiendo) g.setColor(Color.RED);
            else g.setColor(Color.BLACK);
            g.fillOval(x, y, 30, 30);
        }
    }
    
    static public void main(String args[]){
        new Filosofos();
    }

}
