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
-
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
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
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..
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.
-
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...