From b579f73fbc923005f0d2e5cb7d6d0cb9c4f9bf0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fco=20Javier=20Fraga=20Hern=C3=A1ndez?= Date: Wed, 25 Jan 2023 14:08:53 +0100 Subject: [PATCH] =?UTF-8?q?Opciones=20de=20tama=C3=B1o=20y=20velocidad=20d?= =?UTF-8?q?e=20la=20pelota?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pong/entities/Pelota.java | 11 +- src/pong/entities/Raqueta.java | 2 +- src/pong/main/Run.java | 4 +- src/pong/ui/EventoTeclado.java | 3 +- src/pong/ui/VentanaInicio.java | 40 +++++ src/pong/ui/VentanaJuego.java | 14 +- .../{ui/VentanaMenu.java => vistas/Menu.java} | 27 +-- src/pong/vistas/Opciones.java | 154 ++++++++++++++++++ src/pong/{ui => vistas}/Pista.java | 8 +- 9 files changed, 236 insertions(+), 27 deletions(-) create mode 100644 src/pong/ui/VentanaInicio.java rename src/pong/{ui/VentanaMenu.java => vistas/Menu.java} (84%) create mode 100644 src/pong/vistas/Opciones.java rename src/pong/{ui => vistas}/Pista.java (95%) diff --git a/src/pong/entities/Pelota.java b/src/pong/entities/Pelota.java index 7e6f6a3..c84d2ec 100644 --- a/src/pong/entities/Pelota.java +++ b/src/pong/entities/Pelota.java @@ -1,7 +1,7 @@ package pong.entities; import java.awt.Graphics; -import pong.ui.Pista; +import pong.vistas.Pista; /** * Esta clase representa la pelota del juego, es movida @@ -12,7 +12,7 @@ public class Pelota extends Thread { private Pista panel; - private int x, y, tamanio, limiteX, limiteY; + private int x, y, tamanio, limiteX, limiteY, velocidad; private boolean direccionIzquierda, direccionAbajo, moverse; /** @@ -25,6 +25,7 @@ public Pelota(Pista panel) { this.moverse = true; this.direccionAbajo = true; this.direccionIzquierda = true; + this.velocidad = 30; centrar(); setTamanio(15); @@ -36,11 +37,15 @@ public void setTamanio(int tamanio) { this.limiteX = panel.getWidth() - tamanio; } + public void setVelocidad(int velocidad) { + this.velocidad = velocidad; + } + @Override public void run() { while (moverse) { try { - sleep(30); + sleep(velocidad); } catch (InterruptedException ex) { ex.printStackTrace(); } diff --git a/src/pong/entities/Raqueta.java b/src/pong/entities/Raqueta.java index 5033435..71d5f6c 100644 --- a/src/pong/entities/Raqueta.java +++ b/src/pong/entities/Raqueta.java @@ -2,7 +2,7 @@ import java.awt.Graphics; import pong.ui.EventoTeclado; -import pong.ui.Pista; +import pong.vistas.Pista; /** * Esta clase representa las raquetas del juego. diff --git a/src/pong/main/Run.java b/src/pong/main/Run.java index 517017d..9708308 100644 --- a/src/pong/main/Run.java +++ b/src/pong/main/Run.java @@ -1,6 +1,6 @@ package pong.main; -import pong.ui.VentanaMenu; +import pong.ui.VentanaInicio; /** * Inicializa el programa. @@ -9,7 +9,7 @@ */ public class Run { public static void main(String[] args) { - VentanaMenu v = new VentanaMenu(); + VentanaInicio v = new VentanaInicio(); v.setVisible(true); } diff --git a/src/pong/ui/EventoTeclado.java b/src/pong/ui/EventoTeclado.java index fea7840..6e83b77 100644 --- a/src/pong/ui/EventoTeclado.java +++ b/src/pong/ui/EventoTeclado.java @@ -1,5 +1,6 @@ package pong.ui; +import pong.vistas.Pista; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; @@ -39,7 +40,7 @@ public void keyPressed(KeyEvent e) { } if (id == KeyEvent.VK_ESCAPE){ - VentanaMenu vm = new VentanaMenu(); + VentanaInicio vm = new VentanaInicio(); VentanaJuego vj = (VentanaJuego) panel.getParent().getParent() .getParent().getParent(); diff --git a/src/pong/ui/VentanaInicio.java b/src/pong/ui/VentanaInicio.java new file mode 100644 index 0000000..133f2a0 --- /dev/null +++ b/src/pong/ui/VentanaInicio.java @@ -0,0 +1,40 @@ +package pong.ui; + +import java.awt.CardLayout; +import javax.swing.JFrame; +import javax.swing.JPanel; +import pong.vistas.Menu; +import pong.vistas.Opciones; + +public class VentanaInicio extends JFrame { + + private JPanel menu, opciones; + private CardLayout carta; + + public VentanaInicio() { + inicializar(); + estilos(); + + add(menu); + add(opciones); + } + + private void inicializar() { + this.menu = new Menu(); + this.opciones = new Opciones(); + } + + private void estilos() { + setSize(600, 400); + setTitle("Pong"); + setResizable(false); + setUndecorated(true); + setLocationRelativeTo(null); + setDefaultCloseOperation(EXIT_ON_CLOSE); + setLayout(carta = new CardLayout()); + } + + public void siguiente(){ + carta.next(getContentPane()); + } +} diff --git a/src/pong/ui/VentanaJuego.java b/src/pong/ui/VentanaJuego.java index af4af7f..bf34e92 100644 --- a/src/pong/ui/VentanaJuego.java +++ b/src/pong/ui/VentanaJuego.java @@ -1,5 +1,6 @@ package pong.ui; +import pong.vistas.Pista; import java.awt.Color; import javax.swing.JFrame; @@ -11,17 +12,16 @@ */ public class VentanaJuego extends JFrame { - private final static int ALTURA = 600; - private final static int ANCHURA = 400; + private Pista panel; - public VentanaJuego() { - Pista panel = new Pista(ALTURA, ANCHURA); + public VentanaJuego(int altura, int anchura) { + panel = new Pista(altura, anchura); EventoTeclado ev = new EventoTeclado(panel); add(panel); addKeyListener(ev); - setSize(ALTURA, ANCHURA); + setSize(altura, anchura); setUndecorated(true); setSize(panel.getWidth(), panel.getHeight()); setResizable(false); @@ -30,4 +30,8 @@ public VentanaJuego() { setDefaultCloseOperation(EXIT_ON_CLOSE); setBackground(Color.BLACK); } + + public void establecerVelocidad(int velocidad) { + panel.iniciarJuego(velocidad); + } } diff --git a/src/pong/ui/VentanaMenu.java b/src/pong/vistas/Menu.java similarity index 84% rename from src/pong/ui/VentanaMenu.java rename to src/pong/vistas/Menu.java index 6e3ce51..16a63af 100644 --- a/src/pong/ui/VentanaMenu.java +++ b/src/pong/vistas/Menu.java @@ -1,17 +1,24 @@ -package pong.ui; +package pong.vistas; +import java.awt.CardLayout; import java.awt.Color; import java.awt.Font; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JFrame; import javax.swing.JLabel; +import javax.swing.JPanel; import javax.swing.SwingConstants; +import pong.ui.VentanaInicio; -public class VentanaMenu extends JFrame implements MouseListener{ +/** + * + * @author javier + */ +public class Menu extends JPanel implements MouseListener { private JLabel jTitulo, jJuego, jSalir; - - public VentanaMenu() { + + public Menu() { inicializar(); estilos(); posicionar(); @@ -33,12 +40,6 @@ private void inicializar() { private void estilos() { setSize(600, 400); setBackground(Color.BLACK); - setTitle("Pong"); - getContentPane().setBackground(Color.BLACK); - setResizable(false); - setUndecorated(true); - setLocationRelativeTo(null); - setDefaultCloseOperation(EXIT_ON_CLOSE); jTitulo.setFont(new Font("Vintage", Font.BOLD, 60)); jJuego.setFont(new Font("Vintage", Font.BOLD, 25)); @@ -64,11 +65,11 @@ private void posicionar(){ @Override public void mouseClicked(MouseEvent e) { + VentanaInicio v = (VentanaInicio) this.getTopLevelAncestor(); + if (e.getSource().equals(jJuego)){ - VentanaJuego v = new VentanaJuego(); + v.siguiente(); - setVisible(false); - v.setVisible(true); }else if (e.getSource().equals(jSalir)){ System.exit(0); } diff --git a/src/pong/vistas/Opciones.java b/src/pong/vistas/Opciones.java new file mode 100644 index 0000000..379c3a1 --- /dev/null +++ b/src/pong/vistas/Opciones.java @@ -0,0 +1,154 @@ +package pong.vistas; + +import java.awt.Color; +import java.awt.Font; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import javax.swing.*; +import pong.ui.VentanaInicio; +import pong.ui.VentanaJuego; + +/** + * + * @author javier + */ +public class Opciones extends JPanel implements MouseListener { + private ButtonGroup grupoPantalla, grupoVelocidad; + private JRadioButton jRadioGrande, jRadioLenta, jRadioModerada, jRadioNormal, + jRadioPeque, jRadioRapida; + private JLabel jTamanio, jVelocidad, jIniciar; + + public Opciones() { + inicializar(); + estilo(); + posicionar(); + + add(jRadioGrande); + add(jRadioNormal); + add(jRadioPeque); + add(jRadioRapida); + add(jRadioModerada); + add(jRadioLenta); + add(jTamanio); + add(jVelocidad); + add(jIniciar); + + jRadioPeque.setSelected(true); + jRadioModerada.setSelected(true); + + grupoPantalla.add(jRadioGrande); + grupoPantalla.add(jRadioNormal); + grupoPantalla.add(jRadioPeque); + grupoVelocidad.add(jRadioRapida); + grupoVelocidad.add(jRadioModerada); + grupoVelocidad.add(jRadioLenta); + } + + private void inicializar() { + grupoPantalla = new ButtonGroup(); + grupoVelocidad = new ButtonGroup(); + jRadioGrande = new JRadioButton("1200 x 800"); + jRadioNormal = new JRadioButton("900 x 600"); + jRadioPeque = new JRadioButton("600 x 400"); + jRadioRapida = new JRadioButton("Rapida"); + jRadioModerada = new JRadioButton("Normal"); + jRadioLenta = new JRadioButton("Lenta"); + jTamanio = new JLabel("TamaƱo pantalla"); + jVelocidad = new JLabel("Velocidad pelota"); + jIniciar = new JLabel ("Iniciar"); + } + + private void estilo() { + setBackground(Color.BLACK); + setSize(600, 400); + setLayout(null); + + jRadioGrande.setForeground(new java.awt.Color(255, 255, 255)); + jRadioGrande.setBackground(Color.BLACK); + + jRadioNormal.setForeground(new java.awt.Color(255, 255, 255)); + jRadioNormal.setBackground(Color.BLACK); + + jRadioPeque.setForeground(new java.awt.Color(255, 255, 255)); + jRadioPeque.setBackground(Color.BLACK); + + jRadioRapida.setForeground(new java.awt.Color(255, 255, 255)); + jRadioRapida.setBackground(Color.BLACK); + + jRadioModerada.setForeground(new java.awt.Color(255, 255, 255)); + jRadioModerada.setBackground(Color.BLACK); + + jRadioLenta.setForeground(new java.awt.Color(255, 255, 255)); + jRadioLenta.setBackground(Color.BLACK); + + jTamanio.setFont(new java.awt.Font("Vintage", Font.BOLD, 14)); + jTamanio.setForeground(new java.awt.Color(255, 255, 255)); + + jVelocidad.setFont(new java.awt.Font("Vintage", Font.BOLD, 14)); + jVelocidad.setForeground(new java.awt.Color(255, 255, 255)); + + jIniciar.setFont(new Font("Vintage", Font.BOLD, 20)); + jIniciar.setForeground(new java.awt.Color(255, 255, 255)); + } + + private void posicionar() { + jVelocidad.setBounds(151, 183, 140, 17); + jTamanio.setBounds(151, 100, 140, 17); + jRadioGrande.setBounds(357, 135, 100, 19); + jRadioLenta.setBounds(151, 218, 90, 19); + jRadioModerada.setBounds(254, 218, 95, 19); + jRadioRapida.setBounds(357, 218, 90, 19); + jRadioPeque.setBounds(151, 135, 90, 19); + jRadioNormal.setBounds(254, 135, 90, 19); + jIniciar.setBounds((getWidth() - 100)/2, 250, + 100, 100); + jIniciar.addMouseListener(this); + } + + @Override + public void mouseClicked(MouseEvent e) { + VentanaJuego vj; + VentanaInicio vi = (VentanaInicio) this.getTopLevelAncestor(); + + if (e.getSource().equals(jIniciar)) { + if (jRadioNormal.isSelected()) { + vj = new VentanaJuego(900, 600); + } else if (jRadioGrande.isSelected()) { + vj = new VentanaJuego(1200, 800); + } else { + vj = new VentanaJuego(600, 400); + } + + if (jRadioModerada.isSelected()) { + vj.establecerVelocidad(30); + } else if (jRadioRapida.isSelected()) { + vj.establecerVelocidad(20); + } else { + vj.establecerVelocidad(40); + } + + vj.setVisible(true); + vi.dispose(); + } + } + + @Override + public void mousePressed(MouseEvent e) { } + + @Override + public void mouseReleased(MouseEvent e) { } + + @Override + public void mouseEntered(MouseEvent e) { + if (e.getSource().equals(jIniciar)){ + jIniciar.setForeground(new Color(219, 219, 219)); + } + } + + @Override + public void mouseExited(MouseEvent e) { + if (e.getSource().equals(jIniciar)){ + jIniciar.setForeground(Color.WHITE); + } + } +} diff --git a/src/pong/ui/Pista.java b/src/pong/vistas/Pista.java similarity index 95% rename from src/pong/ui/Pista.java rename to src/pong/vistas/Pista.java index 7992f68..8da4b2e 100644 --- a/src/pong/ui/Pista.java +++ b/src/pong/vistas/Pista.java @@ -1,4 +1,4 @@ -package pong.ui; +package pong.vistas; import java.awt.Color; import java.awt.Font; @@ -35,7 +35,6 @@ public Pista(int Altura, int Anchura) { this.jugador1 = new Raqueta(this, Raqueta.JUGADOR1); this.jugador2 = new Raqueta(this, Raqueta.JUGADOR2); this.pelota = new Pelota(this); - this.pelota.start(); } public Raqueta getJugador1() { @@ -46,6 +45,11 @@ public Raqueta getJugador2() { return jugador2; } + public void iniciarJuego(int velocidadPelota) { + this.pelota.setVelocidad(velocidadPelota); + this.pelota.start(); + } + @Override public void paint(Graphics g) { super.paint(g);