Está en la página 1de 4

PRACTICA EVENTOS DEL TECLADO

1. CREA UN NUEVO PROYECTO CON EL NOMBRE BALON EN NETBEANS


2. EN LA CLASE PRINCIPAL, ELIMINA TODAS LAS LINEAS DE CÓDIGO A EXCEPCIÓN DE LA
LINEA

java package Balon

3. COPIA Y PEGA EL CÓDIGO QUE SE TE PROPORCIONA.


a. El código tiene como proposito dibujar un ovalo y mover el objeto mediante las
flechas de desplazamiento del teclado.
4. EJECUTA EL PROYECTO Y UTILIZA LAS FLECHAS DE DESPLAZAMIENTO PARA MOVER EL
OBJETO BALÓN

5. REALIZA LAS MODIFICACIONES NESCESARIAS PARA CONVERTIR TU BALON EN UN


PERSONAJE Y MUEVE EL PERSONAJE UTILIZANDO LOS EVENTOS DEL TECLADO
a. Para este ejemplo solo tienes que eliminar los comentarios del código, y
visualizaras un personaje como el que se muestra en la imagen
b. Una vez que haz comprendido la logica de programación, modificaras el código
para construir y mover un personaje diferente al de la imagen.
EL CÓDIGO ES EL SIGUIENTE: (Recuerda eliminar todo con excepción de la primera línea de código
del java package)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Balon extends JComponent {

private final static int ANCHO = 768;

private final static int ALTO = 384;

private final static int DIAMETRO = 100;

private float x, y;

private float vx, vy;

private boolean arriba, abajo, izquierda, derecha;

public Balon() {
setPreferredSize(new Dimension(ANCHO, ALTO));
x = 200;
y = 200;
addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
actualiza(e.getKeyCode(), true);
}

public void keyReleased(KeyEvent e) {


actualiza(e.getKeyCode(), false);
}

private void actualiza(int keyCode, boolean pressed) {


switch (keyCode) {
case KeyEvent.VK_UP:
arriba = pressed;
break;

case KeyEvent.VK_DOWN:
abajo = pressed;
break;

case KeyEvent.VK_LEFT:
izquierda = pressed;
break;

case KeyEvent.VK_RIGHT:
derecha = pressed;
break;
}
}
});
setFocusable(true);
}

private float clamp(float valor, float min, float max) {


if (valor > max)
return max;
if (valor < min)
return min;
return valor;
}

private void fisica(float dt) {


vx = 0;
vy = 0;
if (arriba)
vy = -300;
if (abajo)
vy = 300;
if (izquierda)
vx = -300;
if (derecha)
vx = 300;
x = clamp(x + vx * dt, 0, ANCHO - DIAMETRO);
y = clamp(y + vy * dt, 0, ALTO - DIAMETRO);
}

public void paint(Graphics g) {


g.setColor(Color.WHITE);
g.fillRect(0, 0, ANCHO, ALTO);

/*g.setColor(Color.ORANGE);
g.fillOval(Math.round(x)-40, Math.round(y), 35, 45);
g.setColor(Color.RED);
g.fillOval(Math.round(x)-100, Math.round(y)+30, DIAMETRO+50, DIAMETRO);
*/
g.setColor(Color.YELLOW);
g.fillOval(Math.round(x), Math.round(y), DIAMETRO, DIAMETRO);

/*
g.setColor(Color.ORANGE);
g.fillOval(Math.round(x)-80, Math.round(y)+10, 35, 45);

g.setColor(Color.BLACK);
g.fillOval(Math.round(x)+30, Math.round(y)+20, 20, 30);
g.fillOval(Math.round(x)+60, Math.round(y)+20, 20, 30);
g.setColor(Color.WHITE);
g.fillOval(Math.round(x)+37, Math.round(y)+30, 10, 18);
g.fillOval(Math.round(x)+67, Math.round(y)+30, 10, 18);

g.setColor(Color.RED);
g.fillArc(Math.round(x)+30, Math.round(y)+50, 50, 40, 180,180);

g.setColor(Color.BLACK);
g.drawArc(Math.round(x)+30, Math.round(y-20), 10, 60, 0, 90);
g.drawArc(Math.round(x)+60, Math.round(y-20), 10, 60, 0, 90);
*/
}

private void dibuja() throws Exception {


SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
paintImmediately(0, 0, ANCHO, ALTO);
}
});
}

public void cicloPrincipalJuego() throws Exception {


long tiempoViejo = System.nanoTime();
while (true) {
long tiempoNuevo = System.nanoTime();
float dt = (tiempoNuevo - tiempoViejo) / 1000000000f;
tiempoViejo = tiempoNuevo;
fisica(dt);
dibuja();
}
}

public static void main(String[] args) throws Exception {


JFrame jf = new JFrame("PingBall");
jf.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
jf.setResizable(false);
Balon ball = new Balon();
jf.getContentPane().add(ball);
jf.pack();
jf.setVisible(true);
ball.cicloPrincipalJuego();
}
}

También podría gustarte