From 3f2eb9226b110688bc4cfd2e8960581015e24e14 Mon Sep 17 00:00:00 2001 From: h4ckx0r Date: Sun, 16 Feb 2025 22:55:48 +0100 Subject: [PATCH] =?UTF-8?q?Explosiones=20con=20animaci=C3=B3n,=20animaci?= =?UTF-8?q?=C3=B3n=20del=20jugador=20y=20cambio=20de=20tama=C3=B1o=20de=20?= =?UTF-8?q?los=20Ladrillos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/net/h4ckx0r/Arkanoid.java | 4 +- src/main/java/net/h4ckx0r/ResourceCache.java | 3 +- src/main/java/net/h4ckx0r/actores/Actor.java | 7 +++ .../java/net/h4ckx0r/actores/Explosion.java | 45 ++++++++++++++++++ .../java/net/h4ckx0r/actores/Jugador.java | 27 ++++++++++- .../java/net/h4ckx0r/actores/Ladrillo.java | 1 + .../images/explosion/sprite-explosion1.png | Bin 0 -> 327 bytes .../images/explosion/sprite-explosion2.png | Bin 0 -> 467 bytes .../images/explosion/sprite-explosion3.png | Bin 0 -> 658 bytes .../images/explosion/sprite-explosion4.png | Bin 0 -> 841 bytes .../images/explosion/sprite-explosion5.png | Bin 0 -> 1016 bytes .../images/explosion/sprite-explosion6.png | Bin 0 -> 1010 bytes .../images/explosion/sprite-explosion7.png | Bin 0 -> 1167 bytes .../images/explosion/sprite-explosion8.png | Bin 0 -> 991 bytes .../images/explosion/sprite-explosion9.png | Bin 0 -> 884 bytes 15 files changed, 81 insertions(+), 6 deletions(-) create mode 100644 src/main/java/net/h4ckx0r/actores/Explosion.java create mode 100644 src/main/resources/images/explosion/sprite-explosion1.png create mode 100644 src/main/resources/images/explosion/sprite-explosion2.png create mode 100644 src/main/resources/images/explosion/sprite-explosion3.png create mode 100644 src/main/resources/images/explosion/sprite-explosion4.png create mode 100644 src/main/resources/images/explosion/sprite-explosion5.png create mode 100644 src/main/resources/images/explosion/sprite-explosion6.png create mode 100644 src/main/resources/images/explosion/sprite-explosion7.png create mode 100644 src/main/resources/images/explosion/sprite-explosion8.png create mode 100644 src/main/resources/images/explosion/sprite-explosion9.png diff --git a/src/main/java/net/h4ckx0r/Arkanoid.java b/src/main/java/net/h4ckx0r/Arkanoid.java index 5bb6267..abd04a3 100644 --- a/src/main/java/net/h4ckx0r/Arkanoid.java +++ b/src/main/java/net/h4ckx0r/Arkanoid.java @@ -116,7 +116,7 @@ public class Arkanoid { List actores = new ArrayList(); int anchoJugador = 55; int altoJugador = 15; - actores.add(new Jugador(anchoJugador, altoJugador, (anchoVentana - anchoJugador) / 2, altoVentana - (altoVentana / 9), ResourceCache.IMAGEN_JUGADOR)); + actores.add(new Jugador(anchoJugador, altoJugador, (anchoVentana - anchoJugador) / 2, altoVentana - (altoVentana / 9))); int diametroPelota = 20; actores.add(new Pelota(diametroPelota, (anchoVentana - diametroPelota) / 2, 400, ResourceCache.IMAGEN_PELOTA)); @@ -124,7 +124,7 @@ public class Arkanoid { for (int i = 0; i < ResourceCache.IMAGEN_LADRILLO.length; i++) { for (int j = 0; j < numLadrillosPorLinea; j++) { - actores.add(new Ladrillo(anchoLadrillos, 10, i, j, separacionBloques, altoVentana / 12, ResourceCache.IMAGEN_LADRILLO)); + actores.add(new Ladrillo(anchoLadrillos, 15, i, j, separacionBloques, altoVentana / 12, ResourceCache.IMAGEN_LADRILLO)); } } diff --git a/src/main/java/net/h4ckx0r/ResourceCache.java b/src/main/java/net/h4ckx0r/ResourceCache.java index af52b36..b399e03 100644 --- a/src/main/java/net/h4ckx0r/ResourceCache.java +++ b/src/main/java/net/h4ckx0r/ResourceCache.java @@ -8,9 +8,8 @@ import java.util.HashMap; public class ResourceCache { - public static final String IMAGEN_JUGADOR = "Player1.png"; public static final String IMAGEN_PELOTA = "Pelota.png"; - public static final String[] IMAGEN_LADRILLO = new String[] {"LadrilloRojo.png", "LadrilloNaranja.png", "LadrilloAmarillo.png", "LadrilloVerde.png", "LadrilloAzul.png", "LadrilloAzulOscuro.png" }; + public static final String[] IMAGEN_LADRILLO = new String[] {"LadrilloRojo.png", "LadrilloNaranja.png", "LadrilloAmarillo.png", "LadrilloVerde.png", "LadrilloAzul.png" }; private HashMap cacheImagenes = new HashMap<>(); diff --git a/src/main/java/net/h4ckx0r/actores/Actor.java b/src/main/java/net/h4ckx0r/actores/Actor.java index cb8ed6b..2ce3532 100644 --- a/src/main/java/net/h4ckx0r/actores/Actor.java +++ b/src/main/java/net/h4ckx0r/actores/Actor.java @@ -18,6 +18,13 @@ public abstract class Actor { this.sprite = ResourceCache.getInstance().getImage(imgName); } + public Actor(int x, int y, int ancho, int alto) { + this.x = x; + this.y = y; + this.ancho = ancho; + this.alto = alto; + } + public void paint(Graphics g) { g.drawImage(this.sprite, this.x, this.y, this.ancho, this.alto, null); } diff --git a/src/main/java/net/h4ckx0r/actores/Explosion.java b/src/main/java/net/h4ckx0r/actores/Explosion.java new file mode 100644 index 0000000..cbfc9c5 --- /dev/null +++ b/src/main/java/net/h4ckx0r/actores/Explosion.java @@ -0,0 +1,45 @@ +package net.h4ckx0r.actores; + +import net.h4ckx0r.Arkanoid; +import net.h4ckx0r.ResourceCache; + +import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.List; + +public class Explosion extends Actor{ + + List spritesAnimacion = new ArrayList<>(); + int velocidadCambioSprite = 5; + int tiempoSprites = 0; + + public Explosion(int x, int y, int ancho, int alto) { + super(x, y, ancho, alto); + this.spritesAnimacion.add(ResourceCache.getInstance().getImage("explosion/sprite-explosion2.png")); + this.spritesAnimacion.add(ResourceCache.getInstance().getImage("explosion/sprite-explosion1.png")); + this.spritesAnimacion.add(ResourceCache.getInstance().getImage("explosion/sprite-explosion3.png")); + this.spritesAnimacion.add(ResourceCache.getInstance().getImage("explosion/sprite-explosion4.png")); + this.spritesAnimacion.add(ResourceCache.getInstance().getImage("explosion/sprite-explosion5.png")); + this.spritesAnimacion.add(ResourceCache.getInstance().getImage("explosion/sprite-explosion6.png")); + this.spritesAnimacion.add(ResourceCache.getInstance().getImage("explosion/sprite-explosion7.png")); + this.spritesAnimacion.add(ResourceCache.getInstance().getImage("explosion/sprite-explosion8.png")); + this.spritesAnimacion.add(ResourceCache.getInstance().getImage("explosion/sprite-explosion9.png")); + this.sprite = this.spritesAnimacion.getFirst(); + } + + @Override + public void actua() { + if (!this.spritesAnimacion.isEmpty()) { + tiempoSprites++; + if (tiempoSprites % velocidadCambioSprite == 0){ + tiempoSprites = 0; + int indiceSpriteActual = spritesAnimacion.indexOf(this.sprite); + int indiceSiguienteSprite = (indiceSpriteActual + 1) % spritesAnimacion.size(); + this.sprite = spritesAnimacion.get(indiceSiguienteSprite); + } + } + if (this.sprite.equals(this.spritesAnimacion.getLast())) { + Arkanoid.getInstance().eliminaActor(this); + } + } +} diff --git a/src/main/java/net/h4ckx0r/actores/Jugador.java b/src/main/java/net/h4ckx0r/actores/Jugador.java index 42baba8..2f984f7 100644 --- a/src/main/java/net/h4ckx0r/actores/Jugador.java +++ b/src/main/java/net/h4ckx0r/actores/Jugador.java @@ -1,8 +1,12 @@ package net.h4ckx0r.actores; import net.h4ckx0r.Arkanoid; +import net.h4ckx0r.ResourceCache; import java.awt.*; +import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.List; public class Jugador extends Actor { @@ -11,8 +15,16 @@ public class Jugador extends Actor { private int velocidadX = 4; - public Jugador(int ancho, int alto, int initialX, int initialY, String imgName) { - super(initialX, initialY, ancho, alto, imgName); + List spritesAnimacion = new ArrayList<>(); + int velocidadCambioSprite = 5; + int tiempoSprites = 0; + + public Jugador(int ancho, int alto, int initialX, int initialY) { + super(initialX, initialY, ancho, alto); + this.spritesAnimacion.add(ResourceCache.getInstance().getImage("Player1.png")); + this.spritesAnimacion.add(ResourceCache.getInstance().getImage("Player2.png")); + this.spritesAnimacion.add(ResourceCache.getInstance().getImage("Player3.png")); + this.sprite = this.spritesAnimacion.getFirst(); } @Override @@ -24,6 +36,17 @@ public class Jugador extends Actor { if (this.x < 0) this.x = 0; if (this.x + this.ancho > Arkanoid.getInstance().getCanvas().getWidth()) this.x = Arkanoid.getInstance().getCanvas().getWidth() - this.ancho; + + + if (!this.spritesAnimacion.isEmpty()) { + tiempoSprites++; + if (tiempoSprites % velocidadCambioSprite == 0){ + tiempoSprites = 0; + int indiceSpriteActual = spritesAnimacion.indexOf(this.sprite); + int indiceSiguienteSprite = (indiceSpriteActual + 1) % spritesAnimacion.size(); + this.sprite = spritesAnimacion.get(indiceSiguienteSprite); + } + } } public void movimientoRaton(int x, int y) { diff --git a/src/main/java/net/h4ckx0r/actores/Ladrillo.java b/src/main/java/net/h4ckx0r/actores/Ladrillo.java index 89f27b9..e5435ae 100644 --- a/src/main/java/net/h4ckx0r/actores/Ladrillo.java +++ b/src/main/java/net/h4ckx0r/actores/Ladrillo.java @@ -24,6 +24,7 @@ public class Ladrillo extends Actor { public void colisionaCon(Actor a, Rectangle act1Rectangle, Rectangle act2Rectangle) { if (a instanceof Pelota) { Arkanoid.getInstance().eliminaActor(this); + Arkanoid.getInstance().incorporaActor(new Explosion(this.x, this.y, this.ancho, this.alto)); } } } diff --git a/src/main/resources/images/explosion/sprite-explosion1.png b/src/main/resources/images/explosion/sprite-explosion1.png new file mode 100644 index 0000000000000000000000000000000000000000..fd2e5d2b3b44f1ab3374ff9403775841b9fb091f GIT binary patch literal 327 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/images/explosion/sprite-explosion7.png b/src/main/resources/images/explosion/sprite-explosion7.png new file mode 100644 index 0000000000000000000000000000000000000000..ae5ae601c5bcda1032e1138ace2d34e79e67b91a GIT binary patch literal 1167 zcmV;A1aSL_P)YfyLUU}&NprNA5j3f z;wSf2zI-djpjP}$U2t%#Lctjw|`}4+Yj_k#txkJEHj$r`6<;Fr? z91Y|WqP}e8Au9mDH)X%wf59*@*sq0V{lP2mt<3>|V#oL*5CH&}V-2C0vvR_#1TZ^= z_PECBIA6J?g1NtI)~j-xVsx9N9u^7N25Y@363N2Pap{9WVOy!WmxaF7N^xhZ^ zY(6%2blfl0DAY79hawWwNM9@#8NC14qKRwVlx{I7@-#H2A?qAxwX>r_6Vz>Wj;7 zJ+!rbM{?Z!7MB{!9>~g{pKpJl7wp`>Lh7zNB7zDGjBVA&Csm4^?E-?Qr@QNLEo1@E zanJD6ku_NM(x(_|$j>BD_JWekNR&I1OPkzM*FLi-M-`W#M%{_&OR{*Hsh9^&BoK4e z+&rNF;wh{zx1;3X004j!^=VO{2SmLNhV(}~Q=R3#DyL_~-@a-IC8S$^rJ|T6i~64z zLI7ZWx&2;!)tQ$_xoRUEh(;7}QT9-QxXqhSctj*F)n@0IlM*(ZlyJLb(3vOyC1-Zz zZ+ksH=D!)WRveV)K{{wj1bh?c9CCz3gZ_!@tKR;>vmn_;Mgh^IB2o8fAa}vFNoGje zz4EzNr5kN6MjZ1Lo}2pTx{rJC|GYSxn)bQW&z^8@gr6$eKv8WDn)8$}>w+ z*b4y7`^!*$a_ryl?>e>(w)(U1e_e0T$MafBqBafqVB9q_6u#pjQz44ATPo5_I{v&y hXsUj8KUF7%hjfYP1AdW?M1b^u+cn#TaZTtDNS>w5Da( z&gf9*-PgPO{{B8se;Hexv(KN;^XA2y56?re%8XyAgM81Cn&mbMI1_$-!r!JQ%hA;! zMYCtFbFy-eZDE7U7X5hiY_oku==6I&+TKjLPn?(7uMV@```*MtNt*2?VaLs#>{Rr{C7f%xlRB$pA;%NdJ7}X z#a;o{L1r0mn4AU-LpcIK0RY(`K@;pUmDEZismeolBu8Ri&0tNc!KkdU??nMR01O-| zLFMtW>8U7tYayoZlT>!YBA}AvhPAn+{#y)iD(WfGdq9C_6Tm zbayj>+V!c#$WK#4gJ}nb7}YIG4U=vcUA7MI&hm51NLSsK6%hc?xqF@vk`{3m9GJUU zPpO@Xuv3xb?mDeKa_79o`9&PBe-Sk&Z?A|n11R);E@kdJ6VOd)H$$>R^|%E}!=tx(_~%LQ{BQGzIp+fY#{>@7q&Q%7 zc-{2R#FDf*J=LbrxFxcfP6y`~)o%$Q)}6jLSA}vD6WeTrZ;UJEQgC?qoAvwKn7H$k zaR#7$Ika(a`-6Y&Y$Kj|<=6vf77;AVFoUv6e$?#iRA3fl`Ev9~g`22S6?7#v!G){h zQ!hxOEoE_Q%~6)DRaf298x~dJuZFM3WZwEH#B<%N~ zSc@W?7fwNM4SY2!hEOv$4naf5q=_^$*b3lzvsp>-Ycw N002ovPDHLkV1n3`%dP+b literal 0 HcmV?d00001 diff --git a/src/main/resources/images/explosion/sprite-explosion9.png b/src/main/resources/images/explosion/sprite-explosion9.png new file mode 100644 index 0000000000000000000000000000000000000000..f9172e330adf28356a1fdc3f8f1302fd0524876a GIT binary patch literal 884 zcmV-)1B?8LP)PbXFR5;6(Q&~tykjXtC0;ti&CXA;~C^7Fvvaa4*NMUT5ac+@*(b za#S+E$NwD8fB3$02>xU0%TqUds`*G4RtPc6)a_p0r8({NU2!IdT1e!{rA$9Y_UyYgAPDPNjv~x*fnUd%|E@jOCO{1H-B~KE%cj7o0^*~ z!~j62E*jg5>Hq*GW#x1jy4lFQ2bSB_dL*T3B>;#m+UKXCiC!^I@e*Ns=5@5as2MNx zd+C?@sNH*nXO%D+cLG3CdZC>-WwMP3BDzFL?w4ho3;=m$#~mF3fK{ewNhZFGENcj) zPcwgO&W}QLX$udaV){*~-3^j>ZSGP#O5#XEevE6~$sL{mU?_-iz^`j#<~>GhMT$QF z5JOc$yrQTkw`JC}+Z~(<#|JS0xfk#J^P+|;M*=;U7{h)E?%oWMDW~wPn#VH<(dP{S z3=8Iq5PYL3`MXK5(v(8M>($v<)zzC?EM_`%aR|$}udGjQlgz}^i?IpTR))3qt7LjD z0PcT-ex6megMM(BL2hw11C~}K)=M`wbeDqJ2Xr_MLf{f3++k0XM zb@7ynSOZzu){UAqopGi06J3>uAdYd^R@gj8tf}JIikO^x!*i0&3lil@*|w-@>y4Ef zuCcoE)QPRx7lr_!O~2PeL&;GT6pAQv)5d}}&YKa!UsokO-NW%uN_D z+ET|%QctLJ--c<-jo4DGX469>XUZNj5nlihi4-CcnYEWztDVk|D65^6$<@J2gS`FS ze{$x(4ey&^uZ~!qy#|IYyPW)dEZtR!`#B3+{q`p_2>@EH7QX=>jV>e>0wO5@0000< KMNUMnLSTZ!nTv}6 literal 0 HcmV?d00001