Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Toshirou en 07 de Agosto 2018, 01:06

Título: [Java] Generar figuras geométricas aleatorias distinto tamaño y color rectángulo
Publicado por: Toshirou en 07 de Agosto 2018, 01:06
Hola, quisiera crear un programa que genere figuras (rectangulos, circulos, etc) de forma aleatoria, así mismo los colores y tamaño de forma aleatoria.. Todo eso usando POO (Herencia, Polimorfismo, etc). Con respecto a este tema, entiendo bien el concepto y demás.. pero no se me ocurre como hacerlo, que clases crear, etc.

¿Me podrían dar ideas y si es posible algo de código para entender por favor...? Yo he logrado hacer el programa pero de forma fea y muy básica creo.. por si acaso les dejo mi código:

Clase RandomShape

Código: [Seleccionar]
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;

public class RandomShape {

    public static Rectangle2D randomRect(){
        int x = (int) (Math.random() * 800) + 1;
        int y = (int) (Math.random() * 800) + 1;
        int width = (int) (Math.random() * 800) + 1;
        int height = (int) (Math.random() * 800) + 1;


        return new Rectangle2D.Double(x, y, width, height);

    }

    public static Ellipse2D randomEllip(){
        int x = (int) (Math.random() * 800) + 1;
        int y = (int) (Math.random() * 800) + 1;
        int width = (int) (Math.random() * 800) + 1;
        int height = (int) (Math.random() * 800) + 1;


        return new Ellipse2D.Double(x, y, width, height);
    }
   
}


Clase FrameYPanel

Código: [Seleccionar]
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.util.*;
import java.util.List;

public class MyFrame extends JFrame {

    MyFrame(){
        this.setSize(800, 800);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);

        this.add(new MyPanel());
    }
}


class MyPanel extends JPanel{

    private List<Rectangle2D> rect;
    private List<Ellipse2D> ellip;

    MyPanel(){
        this.setBackground(Color.GRAY);

        rect = new ArrayList<>();
        ellip = new ArrayList<>();

        for(int i=0; i<10; i++){
            rect.add(RandomShape.randomRect());
            ellip.add(RandomShape.randomEllip());
        }
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;

        for(Rectangle2D rectangles : rect){
            g2.setPaint(new Color((int) (Math.random()*255),(int) (Math.random()*255),(int) (Math.random()*255)));

            g2.fill(rectangles);
        }

        for(Ellipse2D ellipses : ellip){
            g2.setPaint(new Color((int) (Math.random()*255),(int) (Math.random()*255),(int) (Math.random()*255)));

            g2.fill(ellipses);
        }
       
    }
}


Clase Main..

Código: [Seleccionar]
package FigurasAleatorias;

public class Main {

    public static void main(String[] args) {
        new MyFrame().setVisible(true);
    }

}

Como ven yo lo hago con cierta cantidad de figuras y pues quisiera hacer algo mas automatico, que en cada ejecucion se haga cierta cantidad de figuras con distintos colores, tamaños (que no pase del tamaño de la ventana) y demás... quiero poner en práctica POO, que de verdad me falta mucho eso.
Título: Re:[Java] Generar figuras aleatorias con distinto tamaño y color
Publicado por: Jeffer en 10 de Agosto 2018, 20:50
Hola amigo, cómo estás? Con respecto a tu pregunta, te aconsejo, primero que todo, que crees una clase abstracta que la puedes nombrar como "Figura", la cual vendría a tener como atributos la posición en X y en Y, el color, el ancho y el alto, y un único método llamado "dibujar" que vendría siendo abstracto también.
Luego, pasarías a crear las clases que representarían cada figura geométrica que existe, por ejemplo, crearías las clases "Rectángulo", "Círculo", etc., todas estas clases pasarían a heredar de la clase abstracta "Figura", por lo tanto, cada una tendría que implementar el método abstracto "dibujar".
Esa sería una idea rápida que te puedo dar, si no entiendes algo, me avisas!!
Estaré atento...