diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..1464804 --- /dev/null +++ b/pom.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>com.mycompany</groupId> + <artifactId>Ascii</artifactId> + <version>1.0-SNAPSHOT</version> + <packaging>jar</packaging> + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.source>19</maven.compiler.source> + <maven.compiler.target>19</maven.compiler.target> + <exec.mainClass>com.mycompany.ascii.Ascii</exec.mainClass> + </properties> +</project> \ No newline at end of file diff --git a/src/main/java/com/mycompany/ascii/Ascii.java b/src/main/java/com/mycompany/ascii/Ascii.java new file mode 100644 index 0000000..fb9d3c9 --- /dev/null +++ b/src/main/java/com/mycompany/ascii/Ascii.java @@ -0,0 +1,8 @@ +package com.mycompany.ascii; + +public class Ascii { + + public static void main(String[] args) { + Ventana v=new Ventana(); + } +} diff --git a/src/main/java/com/mycompany/ascii/Ventana.java b/src/main/java/com/mycompany/ascii/Ventana.java new file mode 100644 index 0000000..2156b88 --- /dev/null +++ b/src/main/java/com/mycompany/ascii/Ventana.java @@ -0,0 +1,160 @@ +package com.mycompany.ascii; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.util.ArrayList; +import java.util.Random; + +public class Ventana extends JFrame { + private MiPanel panel; + + public Ventana() { + setTitle("Spacecraft Animation"); + setSize(800, 400); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setLocationRelativeTo(null); + + panel = new MiPanel(); + add(panel); + setVisible(true); + + panel.inicializarEstrellas(); + } + +} + +class MiPanel extends JPanel implements KeyListener { + private Nave nave; + private ArrayList<Point> estrellas; + private Random rand = new Random(); + + public MiPanel() { + nave = new Nave(this); + setFocusable(true); + addKeyListener(this); + + estrellas = new ArrayList<>(); + } + + public void inicializarEstrellas() { + int ancho = Math.max(getWidth(), 800); + int alto = Math.max(getHeight(), 400); + + for (int i = 0; i < 100; i++) { + estrellas.add(new Point(rand.nextInt(ancho), rand.nextInt(alto))); + } + + Thread hilo = new Thread(nave); + hilo.start(); + } + + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + + g.setColor(Color.BLACK); + g.fillRect(0, 0, getWidth(), getHeight()); + + g.setColor(Color.WHITE); + for (Point estrella : estrellas) { + g.fillRect(estrella.x, estrella.y, 2, 2); + } + + nave.dibujar(g); + } + + public void moverEstrellas() { + int ancho = getWidth(); + int alto = getHeight(); + + for (Point estrella : estrellas) { + estrella.y += 2; + if (estrella.y > alto) { + estrella.y = 0; + estrella.x = rand.nextInt(Math.max(ancho, 800)); + } + } + } + + public void keyPressed(KeyEvent e) { + nave.keyPressed(e); + } + + public void keyReleased(KeyEvent e) { + nave.keyReleased(e); + } + + public void keyTyped(KeyEvent e) {} +} + +class Nave implements Runnable { + private int x = 100; + private int y = 150; + private int xVel = 0; + private int yVel = 0; + private final int VELOCIDAD = 8; + private MiPanel panel; + + public Nave(MiPanel panel) { + this.panel = panel; + } + + @Override + public void run() { + while (true) { + try { + mover(); + panel.moverEstrellas(); + panel.repaint(); + Thread.sleep(30); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + public void dibujar(Graphics g) { + g.setColor(Color.CYAN); + g.drawString(" oOOOo", x, y); + g.drawString(" AAAAAAAAAAA", x, y + 10); + g.drawString(" zzzzzzzzzzzzzzzz", x, y + 20); + g.drawString(" <><><><><><><><><>", x, y + 30); + g.drawString(" XXXXXXXXXXXXXXXXXXXXXX", x, y + 40); + g.drawString("XXXXXXXXXXXXXXXXXXXXXXXXX", x, y + 50); + g.drawString(" XXX[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]XXX", x, y + 60); + g.drawString(" ~XXXXXXXXXXXXXXX~", x, y + 70); + g.drawString(" ( <><><><> )", x, y + 80); + g.drawString(" ( ) ( ) ( )", x, y + 90); + g.drawString(" ( ) ( ) ( )", x, y + 100); + g.drawString(" ( ) ( ) ( )", x, y + 110); + g.drawString(" ( ) ( ) ( )", x, y + 120); + g.drawString(" ( ) ( )", x, y + 130); + } + + private void mover() { + x += xVel; + y += yVel; + + // Evitar que la nave salga de la pantalla + if (x < 0) x = 0; + if (x > panel.getWidth() - 100) x = panel.getWidth() - 100; + if (y < 0) y = 0; + if (y > panel.getHeight() - 70) y = panel.getHeight() - 70; + } + + public void keyPressed(KeyEvent e) { + int keyCode = e.getKeyCode(); + if (keyCode == KeyEvent.VK_A) xVel = -VELOCIDAD; + if (keyCode == KeyEvent.VK_D) xVel = VELOCIDAD; + if (keyCode == KeyEvent.VK_W) yVel = -VELOCIDAD; + if (keyCode == KeyEvent.VK_S) yVel = VELOCIDAD; + } + + public void keyReleased(KeyEvent e) { + int keyCode = e.getKeyCode(); + if (keyCode == KeyEvent.VK_A || keyCode == KeyEvent.VK_D) xVel = 0; + if (keyCode == KeyEvent.VK_W || keyCode == KeyEvent.VK_S) yVel = 0; + } +} diff --git a/target/classes/com/mycompany/ascii/Ascii.class b/target/classes/com/mycompany/ascii/Ascii.class new file mode 100644 index 0000000..1c9e997 Binary files /dev/null and b/target/classes/com/mycompany/ascii/Ascii.class differ diff --git a/target/classes/com/mycompany/ascii/MiPanel.class b/target/classes/com/mycompany/ascii/MiPanel.class new file mode 100644 index 0000000..cb0b2e5 Binary files /dev/null and b/target/classes/com/mycompany/ascii/MiPanel.class differ diff --git a/target/classes/com/mycompany/ascii/Nave.class b/target/classes/com/mycompany/ascii/Nave.class new file mode 100644 index 0000000..516dc62 Binary files /dev/null and b/target/classes/com/mycompany/ascii/Nave.class differ diff --git a/target/classes/com/mycompany/ascii/Ventana.class b/target/classes/com/mycompany/ascii/Ventana.class new file mode 100644 index 0000000..f6cb13b Binary files /dev/null and b/target/classes/com/mycompany/ascii/Ventana.class differ diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..a870d39 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,4 @@ +com\mycompany\ascii\Ascii.class +com\mycompany\ascii\Nave.class +com\mycompany\ascii\MiPanel.class +com\mycompany\ascii\Ventana.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..53572c9 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,2 @@ +C:\Users\alasn\Desktop\Tareas UV\desarrolloSoftware\asciiArt\Ascii\src\main\java\com\mycompany\ascii\Ventana.java +C:\Users\alasn\Desktop\Tareas UV\desarrolloSoftware\asciiArt\Ascii\src\main\java\com\mycompany\ascii\Ascii.java