Vistas de página la semana pasada

sábado, 18 de mayo de 2013

MOVIMIENTO DE MARIO

Para darle movimiento usé un KeyPressed sobre el panel que contiene a Mario, luego por medio de dos 'if'  le di el movimiento, sin embargo no logro que Mario se mueva estando encima del otro panel que contiene la imágen de fondo (el primer nivel)
éste es el código que usé para el movimiento:

@SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        LabelMario = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                formKeyPressed(evt);
            }
        });

        LabelMario.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imag/Mario1.png"))); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(154, Short.MAX_VALUE)
                .addComponent(LabelMario)
                .addGap(126, 126, 126))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(58, 58, 58)
                .addComponent(LabelMario)
                .addContainerGap(81, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                       

    private void formKeyPressed(java.awt.event.KeyEvent evt) {                               
        // TODO add your handling code here:
        int x= LabelMario.getX();
        int y= LabelMario.getY();

        if (evt.getKeyChar()==  'l'){
            x=x+4;
            LabelMario.setLocation(x,7);
        }
        if(evt.getKeyChar()=='p'){
            x=x-4;
            LabelMario.setLocation(x, y);
        }
    }

Así se ve: http://www.youtube.com/watch?v=zOCjJUngziM

Así funciona Bros paradise project

Hasta el momento desde el menú de Bros Paradise Project se puede acceder a la historia del  juego y a las instrucciones, también cuando se le da clik en el botón JUGAR! se accede a lo que sería el primer nivel y se ve Mario que está dentro de un panel pero aún no se mueve.
El siguiente enlace muestra lo anteriormente descrito.
http://www.youtube.com/watch?v=u-1gmbgl7Yw

martes, 14 de mayo de 2013

MARIO DENTRO DEL PRIMER NIVEL

Esto es lo que aparece una vez le damos clik en el botón 'JUGAR!'
Básicamente lo que hice fue crear una ventana y le añadí el paisaje de fondo en un JPanel y a Mario en otro para de éste modo tener la opción de moverlo.

MARIO

El Mario que voy a utilizar para el juego es el siguiente:
 Me aseguré de que el fondo de mi Mario sea del mismo color que el de el primer nivel, de este modo lo puedo ajustar al nivel y que se vea bien.
Hasta ahora la idea es agregar el mario al paisaje por medio de un JPanel para de éste modo porder darle movimiento a Mario.

Primer Nivel



Para la entrega anterior del proyecto había hecho un paisaje que me serviría de base para la creación completa del primer nivel, éste lo programé con Graphics g  sin embargo dibujar de esta manera en java no resulta nada práctico así que esta vez decidí elaborar la primera parte de lo que sería mi primer nivel pero con la ayuda de paint.



A pesar de no tener las suficientes herramientas pain si me ofrece más opciones que las que hasta el momento conozco que me ofrece JAVA en ésta área así que por ahora la idea es poder  crear los niveles completos en paint como hice con éste.



LA NUEVA CARA DE BROS PARADISE PROJECT

En estos días he venido realizando unas cuantas mejoras al proyecto, a continuación presento el nuevo menú principal de BROS PARADISE PROJECT:
Éste será el menú definitivo de mi proyecto, como el pasado cuenta con las opciones de historia e instrucciones pero la diferencia fundamental (aparte de la parte gráfica) es que no hay  opción para dos jugadores.
Con el menú anterior tenía los  inconvenientes  de no poder acomodar del todo bien la distribución de los botones en la pantalla (debido a los layouts) y también no poder insertar una imágen así que pasa éste nuevo menú decidí hacerlo por medio de formulario. De esta manera se solucionó el problema del layout y de la imágen.
Este es el código del menú con formulario JFrame y JPanel

//CLASE VENTANA1

package paradiseproject;

import javax.swing.JFrame;

/**
 *
 * @author ANDREA
 */
public class Ventana1 extends javax.swing.JFrame {
  

  
    public Ventana1() {
        initComponents();


    }

      @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        fondoPrincipal1 = new paradiseproject.FondoPrincipal();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setBackground(new java.awt.Color(255, 0, 51));
        jButton1.setForeground(new java.awt.Color(51, 51, 255));
        jButton1.setText("JUGAR!");
        jButton1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED, null, new java.awt.Color(255, 51, 51), null, null));
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("HISTORIA");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jButton3.setText("INSTRUCCIONES");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout fondoPrincipal1Layout = new javax.swing.GroupLayout(fondoPrincipal1);
        fondoPrincipal1.setLayout(fondoPrincipal1Layout);
        fondoPrincipal1Layout.setHorizontalGroup(
            fondoPrincipal1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(fondoPrincipal1Layout.createSequentialGroup()
                .addGroup(fondoPrincipal1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(fondoPrincipal1Layout.createSequentialGroup()
                        .addGap(343, 343, 343)
                        .addComponent(jButton2))
                    .addGroup(fondoPrincipal1Layout.createSequentialGroup()
                        .addGap(320, 320, 320)
                        .addGroup(fondoPrincipal1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jButton3)
                            .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 122, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap(330, Short.MAX_VALUE))
        );
        fondoPrincipal1Layout.setVerticalGroup(
            fondoPrincipal1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, fondoPrincipal1Layout.createSequentialGroup()
                .addContainerGap(296, Short.MAX_VALUE)
                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton3)
                .addGap(56, 56, 56))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(fondoPrincipal1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(fondoPrincipal1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                       

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                        

        JFrame Ventana= new JFrame();
        Ventana.setVisible(true);
        Ventana.setSize(800,500);
        Ventana.setLocation(277,100);
        FondoHistoria miFondoHistoria= new FondoHistoria();
        Ventana.add(miFondoHistoria);
       

                // TODO add your handling code here:
    }                                       

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
        JFrame VentanaInstrucciones= new JFrame();
        VentanaInstrucciones.setVisible(true);
        VentanaInstrucciones.setSize(800,500);
        VentanaInstrucciones.setLocation(277,100);
        FondoInstrucciones miFondoInstrucciones= new FondoInstrucciones();
        VentanaInstrucciones.add(miFondoInstrucciones);
    }                                       

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
VentanaNivel1 miVentanaNivel1 = new VentanaNivel1();
miVentanaNivel1.setVisible(true);
miVentanaNivel1.setLocationRelativeTo(null);
    }                                       

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Ventana1().setVisible(true);

            }
        });
    }

    // Variables declaration - do not modify                    
    private paradiseproject.FondoPrincipal fondoPrincipal1;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    // End of variables declaration                  

}

Y por medio del siguiente código en el formulario JPanel introduje las imagenes:
//CLASE FONDO PRINCIPAL
package paradiseproject;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.ImageIcon;

/**
 *
 * @author ANDREA
 */
public class FondoPrincipal extends javax.swing.JPanel {

    /** Creates new form FondoPrincipal */
    public FondoPrincipal() {
        initComponents();
    }
  @Override
public void paintComponent(Graphics g) {
Dimension tam = getSize();
ImageIcon imagen = new ImageIcon(getClass().getResource("/imagen/BROS.png"));
g.drawImage(imagen.getImage(), 0, 0, tam.width, tam.height, null);
setOpaque(false);
super.paintComponent(g);

}
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
    }// </editor-fold>                       


    // Variables declaration - do not modify                    
    // End of variables declaration                  

}

miércoles, 10 de abril de 2013

PAISAJE

Éste es el preimer escenario que hago para el juego, lo programé con Graphics g, básicamente está hecho a base de círculos y rectángulos. Es un paisaje muy sencillo sin embargo me tomó mucho tiempo pues es difícil lograr cuadrar las coordenadas en donde deseo aparezca mi figura así que asumo que deben haber maneras más prácticas de realizar nuestros gráficos en Java.
El paisaje aparece luego de darle click al botón '1  PLAYER', implementa un actionListener.
Como ya dije es un diseño muy sencillo, lo que realmente espero para la culminació del proyecto es algo con muchas más opciones gráficas. 
A continuación publico el código del escenario y del botón '1 PLAYER'.

 //CLASE PRIMER PAISAJE
package principal;

import java.awt.*;
 import java.applet.*;

/**
 *
 * @author ANDREA
 */
public class PrimerPaisaje extends Applet {
    @Override
 public void paint (Graphics g)
 {

super.paint(g);
//Cielo (la parte superior)
g.setColor(new Color(30, 144, 255));//cambia el color del cielo
 g.fillRect(1,1, 1300, 2000);// fondo cielo

 //Suelo
g.setColor(new Color(139,69,19));
g.fillRect(1,600, 1300, 500);


//maticas
 g.setColor(new Color(34,139,34 ));//con new color se pueden crear distintas combinaciones de colores
 g.fillOval(200, 350, 150, 100);//dibujar ovalo, los parámetros son: x,y, ancho, largo
 g.fillRect(200,400, 150, 200);
 g.setColor(new Color(107,142,35));
 g.fillOval(120, 400, 100, 100);
 g.fillRect(120,450, 98, 150);//Dibujar rectángulo, los parámetros con los mismos del ovalo

 // rectángulos
 g.setColor(new Color(238,122,233 ));
 g.fillRect(750,380, 200, 220);
 g.setColor(new Color(154,255,154 ));
 g.fillRect(700,450, 110, 150);


//nubes
 g.setColor(new Color(255,255,240));
 g.fillOval(200,9, 100, 100);
 g.fillOval(210, 60, 80, 80);
 g.fillOval(190, 30, 100, 80);
 g.fillOval(210, 15, 100, 80);
 g.fillOval(800, 200, 80, 100);
 g.fillOval(810, 180, 60, 70);
 g.fillOval(790, 210, 80, 80);
 g.fillOval(810, 210, 100, 80);

     }

}




//CLASE PLAYER1

package principal;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;

// * @author ANDREA

public class Player1 implements ActionListener {

     @Override
    public void actionPerformed(ActionEvent e) {
        JFrame ventanaPlayer1= new JFrame ();
        ventanaPlayer1.setVisible(true);
        ventanaPlayer1.setSize(1000,700);
        ventanaPlayer1.setLocation(189,5);
        ventanaPlayer1.setTitle("BROS PARADISE PROJECT");
        PrimerPaisaje miPaisaje= new PrimerPaisaje();
        ventanaPlayer1.add(miPaisaje);
       

    }
}

domingo, 7 de abril de 2013

INSTRUCCIONES

Ésta es la ventana que aparece cuando el usuario le de click al botón instrucciones

Aquí está el códígo de la clase Instrucciones y de la clase Fondo Istrucciones:

//CLASE INSTRICCIONES
package principal;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
/**
 *
 * @author ANDREA
 */

public class Instrucciones implements ActionListener {

     @Override
    public void actionPerformed(ActionEvent e) {
        JFrame ventanaInstrucciones= new JFrame ();
        ventanaInstrucciones.setVisible(true);
        ventanaInstrucciones.setSize(900,600);
        ventanaInstrucciones.setLocation(230, 70);
        ventanaInstrucciones.setTitle("INSTRUCCIONES");
        FondoInstrucciones Instrucciones= new FondoInstrucciones();
        ventanaInstrucciones.add(Instrucciones);

    }
}

//CLASE FondoInstrucciones
package principal;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.ImageIcon;

/**
 *
 * @author ANDREA
 * ésta clase es un formulario JPanel.
 */
public class FondoInstrucciones extends javax.swing.JPanel {


    public FondoInstrucciones() {
        initComponents();

    }
    @Override
public void paintComponent(Graphics g) {
Dimension tam = getSize();
ImageIcon imagen = new ImageIcon(getClass().getResource("/imágenes/Instrucciones.png"));
g.drawImage(imagen.getImage(), 0, 0, tam.width, tam.height, null);
setOpaque(false);
super.paintComponent(g);

}
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
    }// </editor-fold>                       


    // Variables declaration - do not modify                    
    // End of variables declaration                  

}

sábado, 30 de marzo de 2013

IMAGEN DE FONDO A UNA VENTANA

Con la ayuda de internet y de un compañero hoy aprendí a ponerle una imagen de fondo a una ventana, he tenido algunos inconvenientes para agregársela a la ventana principal y creo que ésto es debido al Layout que ésta tiene, por ahora y mientras soluciono ese inconveniente publíco lo que logré hacer con la ventana de Historia.

//CLASE FondoHistoria.

package principal;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.ImageIcon;

/**
 *
 * @author ANDREA
 * ésta clase es un formulario JPanel.
 */
public class FondoHistoria extends javax.swing.JPanel {

  
    public FondoHistoria() {
        initComponents();

    }

    @Override
public void paintComponent(Graphics g) {
Dimension tam = getSize();
ImageIcon imagen = new ImageIcon(getClass().getResource("/imágenes/Historia.png"));
g.drawImage(imagen.getImage(), 0, 0, tam.width, tam.height, null);
setOpaque(false);
super.paintComponent(g);

}
  
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
    }// </editor-fold>                       


    // Variables declaration - do not modify                    
    // End of variables declaration                  
}


//CLASE HISTORIA
 package principal;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
/**
 *
 * @author ANDREA
 * En ésta clase se crea la ventana de la historia, se crea un objeto de la clase FondoHistoria y 
 * se adhiere a la ventana
 */
public class Historia implements ActionListener {

     @Override
    public void actionPerformed(ActionEvent e) {
        JFrame ventanaHistoria= new JFrame ();
        ventanaHistoria.setVisible(true);
        ventanaHistoria.setSize(900,600);
        ventanaHistoria.setLocation(230,70);
        ventanaHistoria.setTitle("Historia del juego");
        ventanaHistoria.setBackground(Color.blue);
        FondoHistoria otroFondo=new FondoHistoria();
        ventanaHistoria.add(otroFondo);

    }
}


jueves, 28 de marzo de 2013

Guardar una imagen para poderla abrir desde el proyecto

Guardar una imagen en el proyecto es necesario para cuando la solicitemos para agragarla a una ventana, un JPanel o lo que sea.
los pasos que se deben seguir son los siguientes:
1. Ir a la carpeta en donde se encuentra guardado nuestro proyecto.
2. Abrir el proyeto e ir a la carpeta 'src'
3. En la carpeta 'src' crear una nueva carpeta que es en donde se guardarán las imágenes.
4. Pegar en la nueva carpeta las imágenes que se desean aparezcan en el proyecto.

una vez sigamos estos sencillos pasos las imágenes aparecerán en la carpeta así:


lunes, 25 de marzo de 2013

Ventana de inicio

Éstas son algunas mejoras que le he hecho a la ventana de inicio, ésta ventana cuenta con 4 botones que son:
•1 Player: La opción para un solo jugador
•2 Players: Opción para dos jugadores
•Historia: Acceso a la historia de Bros paradise project
•Instrucciones: Aquí se brindara información acerca de los controles.

//VENTANA DE INICIO


package principal;

import java.awt.Button;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JLabel;


// * @author ANDREA

public class Main {


    public static void main(String[] args) {
        //Propiedades de la ventana
        JFrame miVentana= new JFrame ();
        miVentana.setVisible(true);
        miVentana.setSize(800,400);
        miVentana.setLocationRelativeTo(null);
        miVentana.setTitle("VENTANA DE INICIO BROS PARADISE PROJECT");
        miVentana.setLayout(new java.awt.FlowLayout());
        JLabel b= new JLabel("                     ");
        b.setFont(new java.awt.Font("AR CHRISTY", 0, 75));
        miVentana.add(b);
        JLabel a= new JLabel("BROS PARADISE PROJECT");
        a.setFont(new java.awt.Font("AR CHRISTY", 0, 75));
        miVentana.add(a);



        Button Boton1Player= new Button();
        Boton1Player.setLabel("1 PLAYER");
        miVentana.add(Boton1Player);
        Player1 miOidor= new Player1();
        Boton1Player.addActionListener(miOidor);
        Boton1Player.setBackground(Color.yellow);


        Button Boton2Players=new Button ();
        miVentana.add(Boton2Players);
        Boton2Players.setLabel("2 PLAYERS");
        Boton2Players.setBackground(Color.gray);


        Button BotonHistoria= new Button ();
        BotonHistoria.setLabel("HISTORIA");
        miVentana.add(BotonHistoria);
        Historia miHistoria=new Historia ();
        BotonHistoria.addActionListener(miHistoria);
        BotonHistoria.setBackground(Color.red);
     
     
        Button BotonInstrucciones=new Button();
        miVentana.add(BotonInstrucciones);
        BotonInstrucciones.setLabel("INSTRUCCIONES");
        Instrucciones misInstrucciones= new Instrucciones();
        BotonInstrucciones.addActionListener(misInstrucciones);
        BotonInstrucciones.setBackground(Color.red);    
    }

}

//ACTIONLISTENER PARA EL BOTÓN HISTORIA


package principal;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
/**
 *
 * @author ANDREA
 */
public class Historia implements ActionListener {

     @Override
    public void actionPerformed(ActionEvent e) {
        JFrame ventanaHistoria= new JFrame ();
        ventanaHistoria.setVisible(true);
        ventanaHistoria.setSize(800,400);
        ventanaHistoria.setLocation(280, 160);
        ventanaHistoria.setTitle("Historia del juego");
        ventanaHistoria.setBackground(Color.blue);

     
    }
}

//ACTIONLISTENER PARA EL BOTÓN INSTRUCCIONES

package principal;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;

/**
 *
 * @author ANDREA
 */

public class Instrucciones implements ActionListener {

     @Override
    public void actionPerformed(ActionEvent e) {
        JFrame ventanaInstrucciones= new JFrame ();
        ventanaInstrucciones.setVisible(true);
        ventanaInstrucciones.setSize(800,400);
        ventanaInstrucciones.setLocation(280, 160);
        ventanaInstrucciones.setTitle("INSTRUCCIONES");

     
    }
}


sábado, 23 de marzo de 2013

LAYOUTS

El día de hoy haré una pequeña entrada acerca de los layouts que son la disposición de la cuadricula en la pantalla, ahondaré un poco mas en el tema y hablaré del uso del BorderLayout, GridLayout y FlowLayout.

LOS LAYOUTS: Son clases que dicen como se van a acomodar los componentes en una interfaz gráfica en Java.
Algunos de ellos son: BorderLayout, GridLayout y FlowLayout.
Cada Layout tiene una manera diferente de acomodar los componentes como botones, labels, etc, en una ventana.

 BorderLayout:  Se usa para acomodar los componentes al norte, sur, este, oeste y centro de una ventana. Sólo hay que agregar un componente a un BorderLayout y decir donde queremos que se vea  ya sea al centro, sur, norte u oeste.

GridLayout: Se utiliza para crear matrices en una ventana. Acomoda los componentes en un mismo tamaño, es útil por ejemplo para realizar calculadoras(arreglos de botones), Crucigramas o sudokus (matrices de cajas de texto)

FlowLayout: Este Layout es muy sencillo, ya que solo acomoda los componentes es fila hasta donde se lo permita la ventana.


Por ejemplo ésta es mi ventana principal sin implementar ningún layout:
se ve que los objetos que le he agregado salen unos encima de otrs.

Ésta es la ventana cuando se le implementó un GridLayout:


 Se observa como cambia la disposición de los elementos dentro de la ventana.

jueves, 21 de marzo de 2013

Ventana de inicio/ implementación de ActionListener



---> CLASLE PRINCIPAL

package principal;

import java.awt.Button;
import javax.swing.JFrame;
import javax.swing.JLabel;


// * @author ANDREA

public class Main {


    public static void main(String[] args) {
        JFrame miVentana= new JFrame ();
        miVentana.setVisible(true);
        miVentana.setSize(800,400);
        miVentana.setLocationRelativeTo(null);
        miVentana.setTitle("VENTANA DE INICIO BROS PARADISE PROJECT");
        Button miBoton= new Button();
        miBoton.setVisible(true);
        miBoton.setLabel("1 PLAYER");
        miVentana.add(miBoton);
        miVentana.setLayout(new java.awt.FlowLayout());
        Oidor miOidor= new Oidor();
        miBoton.addActionListener(miOidor);
        miBoton.setLocation(10,40);
        Button otroBoton=new Button ();
        otroBoton.setVisible(true);
        miVentana.add(otroBoton);
        otroBoton.setLabel("2 PLAYERS");
        miVentana.setIconImage(null);
        miVentana.setIconImages(null);
        Button Boton= new Button ();
        Boton.setLabel("HISTORIA");
        miVentana.add(Boton);
        Historia miHistoria=new Historia ();
        Boton.addActionListener(miHistoria);
         
     
        JLabel a= new JLabel("BROS PARADISE PROJECT");
        a.setFont(new java.awt.Font("AR CHRISTY", 0, 60));
        miVentana.add(a);
     
     
    }

}



-->CLASE OIDOR 


package principal;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;


public class Oidor implements ActionListener{
    public void ActionPerformed (ActionEvent evento){




}

    @Override
    public void actionPerformed(ActionEvent e) {

        JOptionPane.showMessageDialog(null, "esperando código fuente");
    }
}

miércoles, 20 de marzo de 2013

@override


Ultimamente ha aparecido al anotación @override en nuestros programas así que me parece importante hacer  una pequeña entrada aclarando qué significa:

@override: Se coloca antes de un método y se utiliza para indicar al compilador que se sobrescribirá el método de la superclase y por lo tanto este método debe estar definido en la clase primaria, de no ser así se genera un error en tiempo de compilación.

sábado, 16 de marzo de 2013

ActionListener

Hoy voy a hacer una pequeña entrada acerca de los actionlisteners, que será un tema primordial para el desarrollo de mi proyecto.

El actionListener es una interfaz y por tal se debe de implementar todos los métodos que ella posee, en éste caso sólo uno que es el ActionPerformed (ActionEvent e). Ahora vamos a ver como se usa `ésta interfaz y en qué nos puede ayudar.

Un evento ActionEvent se produce:
•Al pulsar el botón.
•Al hacer doble clic en un elemento de lista.
•Al pulsar intro  en una caja de texto.
•Al elegir un número.

Los diferentes  elementos del programa están vigilados por listeners que detectan las acciones que tienen lugar sobre el elemento vigilado. Cuando ActionListener detecta una acción se detecta un evento de acción (ActionEvent) en el elemento. Los ActionEvent invocan el método ActionPerformed (ActionEvent e) que realiza las acciones programadas ante ese evento.


¿CÓMO SE USA UN ACTIONLISTENER?
Existen dos formas de usar un ActionListener, la primera es que la clase implemente ésta interfaz de éste modo:

public class principal implements AcionListener {

     public Principal () {

      JButton b = new JButton ("aceptar");
      b.addActionListener(This);
        }
public void actionPerformed(ActionEvent e) {
       }
   }


En éste código se puede ver que la clase implementa ésta interfaz y tiene que implementar sus métodos. Además podemos ver que cree un botón y con el método addActionListener le adicione el ActionListener   y luego se le manda el objeto la componente, de ésta forma:

public class Principal {
   public Principal(){
   
    ActionListener action= new ActionListener(){
    public void actionPerformed (ActionEvent e) {
        }
      }
    JtextField t= new JTextField(8);
    t.addActionListener(accion);
       }
}

Aquí se puede ver que cuando creo el objeto ActionListener tengo que implementar el método actionPerformed,m además se puede ver que se creó un cuadro de texto y se le adicionó el ActionListener con el método addActionLister de la clase JTextField.
Muchos componentes aceptan ActionListener como son los JButton, JTextField, JTextArea, Jabel, etc.


viernes, 8 de marzo de 2013

Creación de una ventana sin usar el formulario de JFrame (Código)


Por medio del siguiente código fuente es posible crear una ventana sin necesidad de utilizar el formulario de JFrame, el código es al más básico pero se pueden agregar todos los atributos que se deseen como por ejemplo: titulo, tamaño, etiquetas, botones, etc.



import javax.swing.JFrame;



 // @author ANDREA

public class Main {

 
    public static void main(String[] args) {
    JFrame miVentana=new JFrame();
    miVentana.setVisible(true);
    }

}

jueves, 7 de marzo de 2013

JFrame/JPanel

En la entradadel día de hoy hablaré de JFrame y JPanel.
JFRAME:
Java Frame es le componente, control u objeto princiapal de una aplicacion visual o grafica en java.
Es el equivalente a FORM1 en los demas lenguajes visuales, como todos ellos Frame es un objeto normal que se deriva de una clase apropiada, tiene sus propiedades y se le pueden asociar sus eventos.

JPanel:
Es el componente mas común de agrupamiento su trabajo consiste en ser el contenedor del resto de los componenentes del programa.
Su layout de default es FlowLayout.


martes, 5 de marzo de 2013

¿Qué es la programación orientada a objetos?

En la entrada de hoy lo que me propongo es ampliar un poco más los conceptos vistos en clase y de éste modo aclarar ciertas dudas.
A continuación publico algunos conceptos que son fundamentales para la clase en general y por supuesto para el desarrollo de mi proyecto.


 PROGRAMACIÓN ORIENTADA A OBJETOS:
La programación orientada a objetos es una  forma especial de programar, más cercana a como exdpresaríamos las cosas en la vida real que otros tipos de programación.
Con la programación orientada a objetos tenemos que aprender a pensar las cosas de una manera distinta, para escribir nuestro programa en terminos de objetos, propiedades y métodos.

CLASES EN PROGRAMACIÓN ORIENTADA A OBJETOS:
Las clases son declaraciones de objetos, también se podrían definir como abstracciones de objetos. Esto quiere decir que la definición de un objeto es la clase. Cuando programamos un objeto y definimos sus características y funcionalidades en realidad lo que estamos haciendo es programar una clase.

PROPIEDADES EN CLASES:
Las propiedades o atributos son las características de los objetos. Cuando definimos una propiedad normalmente especificamos su nombre y su tipo. Nos podemos hacer a la idea de que las propiedades son algo así como variables en donde almacenamos datos relacionados  con los objetos.

MÉTODOS EN LAS CLASES:
 Son las funcionalidades asociadas a los objetos. Cuando estamos programando las clases las llamamos métodos.
Los métodos son como funciones que están asociadas a un objeto.

OBJETOS EN PROGRAMACIÓN ORIENTADA A OBJETOS:
 Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se creará. Ésta acción de crear un objeto a partir de una clase se llama instanciar.

ESTADOS EN OJETOS:
Cuando tenemos un objeto sus propiedades toman valores. Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto (.).

MENSAJES EN OBJETOS:
Es la acción de efectuar una llamada a un método, por ejemplo cuando le decimos a un objeto carro que se ponga en marcha estamos pasándole el mensaje: ponete en marcha.
Para madar mensajes a los objetos utilizamos el operador punto. seguido del método que deseamos invocar, por ejemplo:
miCarro.ponerseenmarcha();
(hay que colocar paréntesis igual que en cualquier llamada a una función, dentro irán los parámetros).

HERENCIA:
 Sirve para crear objetos que incorporen propiedades y métodos de otros objetos. Así podremos crear unos objetos a partir de otros sin tener que reescribirlo todo.

POLIMORFISMO:
Sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando, y abstraernos para dedinir un código que sea compatible con objetos de varios tipos.

domingo, 3 de marzo de 2013

Animación

BROS PARADISE PROJECT debe contar con algunas animaciones como por ejemplo en el inicio, como una especie de historia  introductoria, he averiguado un poco y para éstas animaciones (por ejemplo de un personaje caminando) se utilizan Hilos,  Graphics, JComponent y un panel.
Además se utilizan imágenes que se llaman SPRITE


.
Los temas que son necesarios para realizar las animaciones aún no los manejo pero he encontrado algunos vídeos que me puedes ser de utilidad.
http://www.youtube.com/watch?v=yD8KZ-Nfvtc

Y  también algunas imágenes sprite de Mario Bros.










jueves, 28 de febrero de 2013

Opciones del jugador

Éstas son las opciones que tendrá el jugador.
En el menú de inicio podrá escoger el número de jugadores, ver la historia del juego y ver las instrucciones para los controles.
Dentro del juego tendrá la opción de pausar el juego y de salir de éste.

lunes, 25 de febrero de 2013

DIAGRAMA DE CLASES

Éste es el primer diagrama de clases de mi proyecto, es parcial, más adelante iré publicando más con las mejoras correspondientes.



viernes, 22 de febrero de 2013

Prototipos de GUI


Durante hoy y mañana publicaré algunas imágenes de lo que pretendo que se vea una vez finalice mi proyecto.
 •Para los personajes la idea es que tengan un toque de caricatura, aquí están los tres principales

Mario, Luigi y Peach.
Las siguientes imágenes son del inicio y final del juego.

Inicio



miércoles, 20 de febrero de 2013

LISTADO DE REQUERIMIENTOS

•Tenga la opción de dos jugadores.
•Que Bowser, Peach y Toad se muevan y actúen solos, es decir que el usuario sólo controla a Mario y a Luigi.
•Tenga un contabilizador de tiempo que aparezca en pantalla (cuanta regresiva) y que pasados 4 minutos (5 en el castillo) automáticamente le quite una vida al jugador.
•Sea posible pausar el juego.
•Tenga un contador de monedas, una vez el usuario consiga 100 se le asigna una vida más.
•Una vez el usuario gaste todas sus vidas (3 inicialmente más las que vaya  consiguiendo al avanzar en el juego) salga un aviso de GAME OVER y de la opción de volver a iniciar.
•Tenga un menú de configuración en el que sea posible cambiar opciones como la música y el número de jugadores.
•Tenga otro contabilizador para cuando el usuario consigue una estrella le de una durabilidad a ésta de 20 segundos.

martes, 19 de febrero de 2013

ENTRANDO MÁS EN MATERIA...

OBJETIVO

El objetivo de éste proyecto es crear un juego clon de Mario Bros en 2D que se llamará BROS PARADISE PROJECT.
Por cuestión de tiempo la idea es sólo crear 5 niveles de dificultad y los personajes que intervendrán dentro de mi proyecto son:
MARIO: Primer jugador.
LUIGI: Segundo jugador.
PEACH: La princesa.
TOAD: El fiel servidor.
BOWSER: El villano.

La historia es básicamente la misma que ya todos conocemos (y que mencioné anteriormente en el blog) habrán algunas pequeñas modificaciones en los paisajes pero en sí la metodología del juego no cambia. Mario debe ir recorriendo cada uno de los niveles, superando las dificultades que aumentarán su grado a medida que se avance en el juego y para ello contara con un tiempo límite de 4 minutos por cada nivel (5 para el castillo que es el último y por tanto el de mayor dificultad). Entre los cinco niveles del juego habrá uno en el agua, uno en el cielo y por supuesto el mencionado castillo que es en donde Mario deberá derrotar a Bowser para finalmente rescatar a la princesa.
Para la realización de éste proyecto voy a utilizar la programación orientada a objetos en lenguaje Java.
Aplicaré los conocimientos que vaya adquiriendo a lo largo del semestre para poco a poco ir completando el objetivo de la realización del juego.


lunes, 18 de febrero de 2013

EL VILLANO

Bowser

Es muy conocido por ser el principal antagonista del juego Mario Bros, se le considera un anstagonista debido a su ambición de querer secuestrar a la princesa Peach por hacer tartas muy buenas y conquistar el reino champiñón.
Bowser es un enorme Koopa  comparado con el tamaño y fuerza de los Koopas normales, su caparazón está formado de pinchos filosos, además tiene muchos brazaletes con púas y una gran mandíbula. Tiene cuernos y garras en sus manos y patas.




domingo, 17 de febrero de 2013

LA PRINCESA Y SU FIEL SERVIDOR

PEACH

La princesa Pech (Peach significa melocoton o durazno en inglés), conocida anteriormente como princesa Toadstool es un personaje de la saga de Super Mario Bros para las consolas de Nintendo, es la princesa del reino champiñón y a su servicio tiene una gran cantidad de "honguitos" llamados Toad, su rol principal en los juegos es ser damisela en apuros que debe ser salvada por Mario de las garras del malvado Bowser.
Su primera aparición fue en el año 1985 en Super Mario Bros, juego desde el cual siempre ha sido raptada.
A la princesa Peach se le presenta con su largo y abundante cabello rubio, de ojos azules, con un vestido largo y rosado, llevando guantes que le cubren casi por completo los brazos, lleva puesta una corona decorada con rubies y zafiros, con pendientes y un broche en el pecho también de zafiros. Peach tiene una cara ovalada, con poco maquillaje y tiene 21 años de edad.


TOAD
Toad es el fiel servidor y protector de la princesa Peach. Debido a su nula fuerza y tamaño, siempre termina por suplicar a Mario que sea él quien la rescate cada vez que es raptada. Su frase "Thank you Mario, but our princess is in another castle" (en español: "Muchas gracias Mari pero nuestra princesa está en otro castillo") es conocida por todos los seguidores del fontanero.


sábado, 16 de febrero de 2013

LOS HERMANOS

MARIO

Es el mayor de los hermanos, el más robusto y el de menor altura. mide 1.55 y pesa al rededor de 59 kilogramos.
Mario es un fontanero con acento italiano y viste un mono de trabajo azul, camisa de color rojo y una gorra del mismo color con una M en el centro en un circulo blanco.
Su primera novia conocida se llamó Pauline.
En sus primeras apariciones (Donkey Kong y Wrecking Crew), se dedicaba a ser carpintero, además su nombre era Jumpman. Su misión duradera y constante es salvar a la princesa Peach y el reino donde reside, así como rescatar otros reinos dominados por Bowawe, el principal villano en la mayor parte de sus aventuras.
Sus frases más recordadas y emblemáticas son: "It's a me Mario", "Let's go", "Here we go!"" y "Mamma mia!".
Su antítesis es personificada por Wario.

PROFESIÓN:
Aunque en un comienzo, en el juego Donkey Kong, Mario, mejor oconodido como Jummpman, tenía la profesión de carpintero/constructor, Nintendo ha admitido que Mario es un fontanero que trabaja en las tuberías. A pesar de ello , existen otras profesiones que Mario hace en su vida cotidiana como por ejemplo Doctor Mario, también se le ha visto trabajar como árbitro de boxeo y tenis, tenista, futbolista, jugador de baloncesto, golfista, corredor de autos, juez deportivo y astronauta entre otros.

LUIGI 


Es el hermano menor de Mario en los juegos de Nintendo. Primero apareció en el juego de arcade del año 1983, Mario Bros, luego en super Mario Bros como segundo jugadorm, papel que continuó desempeñando en Super Mario Bros 3 y Super Mario world. El nombre de Luigi fue inspirado por el restaurante de pizzas cerca a la sede de Nintendo of América en Redmond, Washington, que se llamaba "Mario & Luigi".
Por limitaciones de software en su época, Luigi empezó con un diseño igual al de Mario pero ocon una paleta de colores distinta (en la que predominaba el color verde). Al mejorar la tecnología fue cuando el personaje cambió físicamente, más alto y delgado que su hermano. La personalidad de Luigi también se desarrolló y se dice que es cobarde y nervioso, con tendencia a permanecer detrás de su hermano, pero aún así es capaz de superar sus miedos para ayudar a sus seres quridos siempre que lo necesitan.
Mide 1.76 y pesa 62 kilos. En Super Mario Bros y otros juegos al usar a Mario de fuego usa la misma ropa de la de Luigi de fuego.

Por diversas razones casi siempre es capaz de correr más rápido y saltar más alto que su hermano, pero suele tener un ligero problema de freno (suele resbalarse al caer).


NUESTROS PERSONAJES!


A partir de hoy y durante los siguientes 2 días conoceremos un poco más de la historia de los personajes que serán protagonistas de nuestro juego virtual Bros Paradise Project, así como también de las principales características y propiedades que tendrán dentro del proyecto
let's get it started!


viernes, 15 de febrero de 2013

La trama...


Hoy quiero dar a conocer la historia detrás de Super Mario Bros, sé que mucho hemos gastado horas y horas jugando este juego y posiblemente no nos hemos cuestionado por qué Mario hace lo que hace... Pues aquí está la historia que venía en el manual original del primer juego de Mario que salió a la venta por primera vez el 15 de Mayo de 1987.
El juego clon seguirá la misma historia así que es importante que la conozcamos!

"Un día el reino de la pacífica gente hongo fue invadido por los Koopa, una tribu de tortugas famosas por su magia negra. Ésta muy calmada y amante de la paz gente hongo fue convertida en  puras piedras, ladrillos y hasta flores cabellos de caballo de campo. Gracias a esto el reino hongo cayó en la ruina.
La única persona que puede deshacer el hechizo mágico sobre la gente hongo y regresarlos a sus previas formas normales es la princesa Seta, la hija del rey hongo. Desafortunadamente, ella está presentemente en las manos del gran rey Tortuga Koopa.
Mario, el héroe de la historia escucha acerca del apuro de la gente hongo y parte en una cruzada para salvar a la princesa Seta del malvado Koopa y restaurar el reino caído de la gente Hongo.
Usted es Mario! depende de usted el salvar a la gente hongo de la magia negra de los Koopa! "