Añadir archivo

This commit is contained in:
Bruno Martínez Luna 2025-02-18 23:08:10 -06:00
parent 278147c0ee
commit a7439c6ffe
1 changed files with 168 additions and 0 deletions

View File

@ -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;
}
}