Autor Tema: Java código dibujar figura robot guerra de las galaxias r2-d2 fillRect awt swing  (Leído 2416 veces)

andrew522

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Hola, hice esta figura de robot dibujado en Java. Ya lo tengo terminado, el problema es que tengo muchas líneas, lo cual hace que mi codigo se vea algo feo por asi decirlo. ¿Hay alguna manera de corregir eso?

¡Soy nuevo!


Código:

Código: [Seleccionar]
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 *
 * @author ramos
 */
public class Arturito extends JPanel{
   
    @Override
    public void paint(Graphics g){
        super.paint(g);
        g.setColor(new Color(119, 119, 119 ));
       
        g.fillRect(100,600,20,40);
        g.fillRect(100,380,20,60);
       
        g.fillRect(180,280,20,340);
        g.fillRect(140,440,20,120);
       
        g.fillRect(120,420,60,20);
        g.fillRect(120,360,60,20);
        g.fillRect(120,620,80,20);
        g.fillRect(120,560,20,40);
       
        g.fillRect(200,560,320,20);
        g.fillRect(200,340,320,20);
        g.fillRect(200,240,20,40);
        g.fillRect(220,220,20,20);
       
        g.fillRect(240,200,60,20);
        g.fillRect(300,180,120,20);
        g.fillRect(420,200,60,20);
        g.fillRect(480,220,20,20);
        g.fillRect(500,240,20,40);
        g.fillRect(520,280,20,340);
       
        g.fillRect(540,420,60,20);
        g.fillRect(540,360,60,20);
        g.fillRect(600,380,20,60);
        g.fillRect(560,440,20,120);
        g.fillRect(580,560,20,40);
        g.fillRect(600,600,20,40);
        g.fillRect(520,620,80,20);
       
       
        g.fillRect(290,620,180,20);
       
        g.fillRect(290,600,20,20);
        g.fillRect(450,600,20,20);
       
        g.fillRect(430,580,20,20);
        g.fillRect(310,580,20,20);
       
        g.fillRect(348,220,60,40);
        g.fillRect(320,240,40,20);
       
        g.fillRect(380,500,20,20);
        g.fillRect(360,520,20,20);
       
       
       
       
       
        g.setColor(new Color(7, 22, 179 ));
        g.fillRect(338,480,23,80);
        g.fillRect(400,480,23,80);
       
        g.fillRect(338,480,85,23);
        g.fillRect(338,538,85,23);
       
        g.fillRect(338,368,85,23);
        g.fillRect(338,400,85,23);
       
        g.fillRect(338,435,23,34);
        g.fillRect(400,435,23,34);
       
        g.fillRect(240,220,20,20);
        g.fillRect(460,220,20,20);
       
        g.fillRect(460,220,20,20);
       
        g.fillRect(220,240,20,20);
        g.fillRect(480,240,20,20);
       
        g.fillRect(220,280,40,20);
        g.fillRect(220,320,40,20);
        g.fillRect(400,300,60,20);
       
        g.fillRect(300,300,20,40);
        g.fillRect(480,300,20,40);
        g.fillRect(300,260,120,20);
        g.fillRect(320,200,80,20);
        g.fillRect(300,220,20,50);
        g.fillRect(400,220,20,50);
        g.fillRect(400,320,20,20);
        g.fillRect(440,320,20,20);
       
        g.setColor(Color.red);
        g.fillRect(420,320,20,20);
       
       
       
       
       
    }
   
    public static void main(String[] args){
        JFrame ventana = new JFrame("Arturo");
        Arturito objeto = new Arturito();
        ventana.add(objeto);
        ventana.setSize(700,700);
        ventana.setLocationRelativeTo(null);
        ventana.setVisible(true);
        ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   
    }
}
« Última modificación: 12 de Marzo 2022, 18:19 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: figura en java
« Respuesta #1 en: 07 de Febrero 2022, 01:07 »
Hola.
Muy buena la figura  :D

Pero creo que no habría forma de reducir el código, ni conseguir darle más elegancia.
Al menos a mí no se me ocurre ninguna.

El propósito de fillRect() no es hacer dibujos "complejos", así que inevitablemente, necesitas decenas y decenas de líneas para hacer una figura tan elaborada.

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

YoanPupo

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 16
    • Ver Perfil
La forma mas "limpia " de hacer esto es usando un archivo de definicion, que describa las operaciones de dibujo, el programa leeria este archivo y dibujaria lo obtenido, el archivo podria ser un txt con cada operacion de dibujo descrita asi
Operacion: parmetro1 :parametro2 :………parametroN

Ejemplo

fillRect: 25 :25 :50: 50
DrawOval: 0: 0: 100: 100

el codigo usaria java.util.Scanner para leer el archivo linea por linea
Luego con java.util.StringTokenizer puedes separar la linea en partes
asi
StringTokenizer cortador =new StringTokenizer(laLinea,":");
esto dividiria la linea usando ":" como separador
Luego obtienes la operacion, que seria el primer token
String operacion=cortador.nextToken()
luego solo seria pasarla por un if else o switch para identificarla, asi un fillRect tendria otros cuatro tokens(x,y,ancho,alto)
Solo obtenlos de cortador, conviertelos a int con Integer.parseInt y ejecuta la operacion
Algo asi
public void drawFile(Graphics gc,File source){
Scanner scan=new Scanner(source);
while(scan.hashNext()){
String line =scan.nextLine();
StringTokenizer cortador=new StringTokenizer(line,":");
If(cortador.countTokens<2)continue;//linea vacia
String operacion=cortador.nextToken().trim();

if(operacion.equals("fillRect")){
int x=Integer.parseInt(cortador.nextToken().trim());
int y=Integer.parseInt(cortador.nextToken().trim());
int ancho=Integer.parseInt(cortador.nextToken().trim());
int alto=Integer.parseInt(cortador.nextToken().trim());
gc.fillRect(x,y,ancho,alto)
}
}
}

asi, el if llevaria un else if para cada operacion que quieras poder usar(drawRect, fillOvall, etc)

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".