viernes, 12 de abril de 2013

Lanzamiento

LANZAMIENTO


El lanzamiento va a ser efectuado implementando una abstracción del lanzamiento parabólico por medio de un código fuente que por medio de la velocidad y el angulo, dos parámetros que seleccionara el usuario al momento de lanzar!

Código Fuente:

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

public class Proyectil extends JApplet implements Runnable {

    private PanelDibujo panelDibujo;
    private PanelBotones panelBotones;
    private double z; //posición y
    private double z0; //posición y inicial
    private double vz0; //velocidad y inicial;
    private double x;// posición x;
    private double x0; //posicion x inicial;
    private double vx0; //velocidad x inicial ;
    private double velocidadInicial;
    private double tiempo;
    private boolean puedoDisparar = true;
    private int angulo;

    @Override
    public void init() {

        setSize(400, 450);
        panelDibujo = new PanelDibujo();
        panelBotones = new PanelBotones();
        setLayout(new BorderLayout());
        add(BorderLayout.CENTER, panelDibujo);
        add(BorderLayout.SOUTH, panelBotones);
        iniciarVariables();
    }

    public void iniciarVariables() {
        z = 290;
        z0 = 0;
        //se aplica la fórmula v0=v0.senθ
        vz0 = velocidadInicial * Math.sin(Math.toRadians(angulo));
        //se aplica la fórmula v0=v0.cosθ
        vx0 = velocidadInicial * Math.cos(Math.toRadians(angulo));
        x = 10;
        x0 = 0;
        tiempo = 0;
    }

    public void disparar() {
        if (puedoDisparar) {
            new Thread(this).start();
        }
    }

    public void update() {
        //actualizar el tiempo y la nueva posicion.
        double incrementoTiempo = 0.05;
        tiempo += incrementoTiempo;

        //se aplica la fórmula x= v0.cosθ.t
        x = vx0 *Math.cos(Math.toRadians(angulo))* tiempo;
        //posicionamos el proyectil respecto a sus coordenadas iniciales.
        x = x + 10;

        double g = -9.81;

        //se aplica la fórmula y(t)=v0 . sen θ . t - .5 g t2.
        z =  vz0 * Math.sin(Math.toRadians(angulo)) * tiempo + 0.5 * g * tiempo * tiempo;
        //posicionamos el proyectil respecto a sus coordenadas iniciales.
        z = 290 - z;

    }

    public void run() {

        puedoDisparar = false;
        //El bucle se ejecuta hasta que el projectil sobrepasa el suelo.
        while (z < 300) {
            try {

                update();
                Thread.sleep(20);
                panelDibujo.repaint();

            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }

        }
        //Reinicia las varibles y activa el disparo
        iniciarVariables();
        panelDibujo.repaint();
        puedoDisparar = true;
    }

    class PanelDibujo extends JPanel {

        public PanelDibujo() {
            setSize(400, 400);
            setDoubleBuffered(true);
        }

        @Override
        public void paint(Graphics g) {
            g.setColor(Color.DARK_GRAY);
            g.fillRect(0, 0, 400, 400);
            g.setColor(Color.ORANGE);
            g.drawLine(0, 300, 400, 300);
            g.fillOval((int) x, (int) z, 10, 10);
        }
    }

    class PanelBotones extends JPanel implements ActionListener {

        JButton boton;
        JTextField textFieldVelocidad;
        JTextField textFieldAngulo;
        JLabel labelVelocidad;
        JLabel labelAngulo;

        public PanelBotones() {

            setSize(400, 50);
            boton = new JButton("disparar");
            labelAngulo = new JLabel("ángulo");
            textFieldVelocidad = new JTextField("50 ");
            textFieldVelocidad.setColumns(3);
            textFieldAngulo = new JTextField("45");
            labelVelocidad = new JLabel("Velocidad ");
            
            add(boton);
            add(labelAngulo);
            add(textFieldAngulo);
            add(labelVelocidad);
            add(textFieldVelocidad);

            boton.addActionListener(this);
        }

        public void actionPerformed(ActionEvent e) {
            velocidadInicial = Double.valueOf(textFieldVelocidad.getText());
            angulo = Integer.valueOf(textFieldAngulo.getText());
            iniciarVariables();
            disparar();
        }
    }
}
(Tomado de: http://nekan.serveblog.net/content/movimiento-parabolico-de-un-proyectil)

Borrador

BORRADOR

Aquí podemos ver un borrador del tablero del juego, donde se puede observar el avatar que ha seleccionado el jugador y la cancha de juego.


Inicio

INICIO



Esta es la vista previa del inicio del juego.

Cuenta con tres botones, comenzar; que da inicio al juego, Ayuda; brinda una vista rápida de las instrucciones y salir por si no se quiere seguir jugando!