diff --git a/src/SolarSystemAnimation.java b/src/SolarSystemAnimation.java new file mode 100644 index 0000000..290be9b --- /dev/null +++ b/src/SolarSystemAnimation.java @@ -0,0 +1,168 @@ +//package Graphics.SolarSystem; + +import java.awt.*; +import java.util.ArrayList; +import javax.swing.*; + +public class SolarSystemAnimation extends JFrame { + private SolarPanel panel; + + public SolarSystemAnimation() { + super("Sistema Solar ASCII"); + setSize(800, 800); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + panel = new SolarPanel(); + add(panel); + setVisible(true); + + // Hacer que la ventana se ajuste al tamaño de la pantalla + setResizable(true); // Esto permite que la ventana se redimensione + + while (true) { + panel.updatePositions(); + panel.repaint(); + try { + Thread.sleep(50); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + public static void main(String[] args) { + new SolarSystemAnimation(); + } +} + +class SolarPanel extends JPanel { + private ArrayList<Planet> planets; + private int centerX; + private int centerY; + private final String sunASCII = "*"; + + public SolarPanel() { + planets = new ArrayList<>(); + planets.add(new Planet("Mercurio", 50, 2, "(o)", Color.GRAY)); + planets.add(new Planet("Venus", 80, 1.5, "(O)", Color.ORANGE)); + planets.add(new Planet("Tierra", 120, 1, "[O]", Color.green)); + planets.add(new Planet("Marte", 160, 0.8, "(M)", Color.RED)); + + String Jupiter = + " .-'-.\n" + + " /%$$%%$%%\\\n" + + " |##$$%%%$#$|\n" + + " \\$%$$%$%%/\n" + + " '-.-'"; + + planets.add(new Planet("Jupiter", 220, 0.5, Jupiter, Color.ORANGE)); + String saturnoASCII = + " .::.\n" + + " .:' .:\n" + + " ,MMM8&&&.:' .:'\n" + + " MMMMM88&&&& .:'\n" + + " MMMMM88&&&&&&:'\n" + + " MMMMM88&&&&&&\n" + + " .:MMMMM88&&&&&&\n" + + " .:' MMMMM88&&&&\n" + + " .:' .:'MMM8&&&'\n" + + ":'. .:' \n" + // + "'::'"; + planets.add(new Planet("Saturno", 280, 0.3, saturnoASCII, Color.YELLOW)); + + String uranoASCII = + " .-'-.\n" + + " / \\\n" + + " | ◉ |\n" + + " \\ /\n" + + " '-.-'"; + + planets.add(new Planet("Urano", 340, 0.2, uranoASCII, Color.CYAN)); + + String neptunoASCII = + " OOOOO \n" + + " OOOOOOO \n" + + " OOOOOOO \n" + + " OOOOO "; + + planets.add(new Planet("Neptuno", 400, 0.1,neptunoASCII, Color.magenta)); + } + + public void updatePositions() { + for (Planet planet : planets) { + planet.updatePosition(); + } + } + + @Override + public void paintComponent(Graphics g) { + super.paintComponent(g); + int width = getWidth(); + int height = getHeight(); + + // mantener el Sol y los planetas centrados + centerX = width / 2; + centerY = height / 2; + + g.setColor(Color.BLACK); + g.fillRect(0, 0, width, height); + + g.setColor(Color.YELLOW); + + String[] sunLines = sunASCII.split("\n"); + g.setFont(new Font("Courier New", Font.PLAIN, 11)); + + for (int i = 0; i < sunLines.length; i++) { + g.drawString(sunLines[i], centerX - sunLines[i].length() * 3, centerY + i * 20); + } + + g.setColor(Color.WHITE); + for (Planet planet : planets) { + int x = centerX + (int) (planet.getOrbitRadius() * Math.cos(planet.getAngle())); + int y = centerY + (int) (planet.getOrbitRadius() * Math.sin(planet.getAngle())); + + g.setColor(planet.getColor()); + String[] planetLines = planet.getAscii().split("\n"); + for (int i = 0; i < planetLines.length; i++) { + g.drawString(planetLines[i], x - planetLines[i].length() * 3, y + i * 20); + } + } + } +} + +class Planet { + private String name; + private int orbitRadius; + private double angularVelocity; + private double angle; + private String ascii; + private Color color; + + public Planet(String name, int orbitRadius, double angularVelocity, String ascii, Color color) { + this.name = name; + this.orbitRadius = orbitRadius; + this.angularVelocity = angularVelocity; + this.angle = 0; + this.ascii = ascii; + this.color = color; + } + + public void updatePosition() { + angle += angularVelocity * Math.PI / 180; + } + + public int getOrbitRadius() { + return orbitRadius; + } + + public double getAngle() { + return angle; + } + + public String getAscii() { + return ascii; + } + + public Color getColor() { + return color; + } +} \ No newline at end of file