Bienvenido a Tecnohackers

Tecnohackers » Programacion » Area de Programacion
 » 

Juego en java2D didactico (para que aprendar a hacer juegos)



Autor Tema: Juego en java2D didactico (para que aprendar a hacer juegos)  (Leído 1537 veces)

Desconectado kaiser

  • Veterano
  • ***
  • Mensajes: 249
    • http://foro.latinohack.com
Juego en java2D didactico (para que aprendar a hacer juegos)
« en: Febrero 04, 2009, 04:30:45 am »
Bien este es un juego que programe con el fin de que enseñe a programar juegos por el estilo se trata de una nave que te tira tiros que rebotan y vos tenes que esquivarlos

You are not allowed to view links. Register or Login

Sugiero descargarlo del link ya que estan las imagenes el source igual lo dejo aca por si quieren verlo, tiene comentarios para que no se pierdan

Código: You are not allowed to view links. Register or Login
/*se importan las clases que se usaran en el juego*/

import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import java.awt.event.*;

/*se define la clase principal*/

public class Prin extends JFrame {

/*se declaran las variables*/

public static final int ANCHO = 550;
public static final int ALTO = 550;
    private Vos vos;
private BufferedImage Vosim;
private Ene ene;
private BufferedImage Eneim;
public static LinkedList rayos = new LinkedList();
public static int puntuacion = 0;

/*constructor de la clase*/

    public Prin() {
    super("probando un juego");
    this.setSize(ANCHO,ALTO);
    Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
Dimension ventana = getSize();
this.setLocation((pantalla.width - ventana.width) / 2,(pantalla.height - ventana.height) / 2);
    this.setResizable(false);
    this.setBackground(Color.black);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.addKeyListener(new KeyAdapter(){
    public void keyPressed(KeyEvent evt) {
        press(evt);  
    }
   
    public void keyReleased(KeyEvent evt) {
        nopress(evt);
    }
    });
    vos = new Vos(200 , 200);
    Vosim = vos.getImagen();
    ene = new Ene(ANCHO/2 , ALTO-ALTO);
    Eneim = ene.getImagen();
    this.setVisible(true);
    }
   
    /*main de la clase*/
   
    public static void main(String[] args){
    new Prin();
    }
   
    /*se capturan las teclas presionadas y soltadas*/
    public void press(KeyEvent evt) {
    vos.apreto(evt);
    }
   
    public void nopress(KeyEvent evt) {
    vos.solto(evt);
    }
   
    /*metodo que se llama constantemente desde el metodo paint
     que comprueba las colisiones entre vos y los demas objetos
     dibuja los objetos y su movimiento*/
   
    public void dobleBuffer(Graphics2D g2) {
    //colisiones
    if(vos.getRectangle().intersects(ene.getRectangle())==true) {
    vos.morir();
    }
   
    for(int indexRayo=0; indexRayo<rayos.size(); indexRayo++) {
        Rayo auxRayo = (Rayo)rayos.get(indexRayo);
        if (auxRayo.getRectangle().intersects(vos.getRectangle())==true)
                vos.morir();
        }
   
   
   
   
    //pintar

    vos.dibujar(g2, Vosim);
    ene.dibujar(g2, Eneim);
    for(int index=0; index<rayos.size(); index++) {
        Rayo aux = (Rayo)rayos.get(index);
        aux.dibujar(g2, aux.getImagen());
        }
        puntaje(g2);

    //mover
    vos.mover();
    ene.mover();
        for (int index=0; index<rayos.size(); index++) {
            Rayo aux = (Rayo)rayos.get(index);
            aux.mover(index);
        }
       
    repaint();
    }
   
    /*metodo que sirve para contar un puntaje en si lo que hace es contar la cantida de veses que se invoca el metodo paint*/
   
    public void puntaje(Graphics2D g) {
       puntuacion++;
            g.setFont(new Font(&quot;Arial&quot;,Font.BOLD,20));
            g.setPaint(Color.green);
            g.drawString(&quot;Puntos:&quot;,20,20);
            g.setPaint(Color.green);
            g.drawString(puntuacion+&quot;&quot;,100, 20);
      }
     
      /*metodo que retorna el puntaje*/
     
      public static int getPuntaje() {
      return puntuacion;
      }
     
      /*metodo paint es el encargodo de crear una imagen en la cual se podra dibujar
      y de llamar al metod doble buffer*/
   
    public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    Image Ima = createImage(ANCHO , ALTO);
    dobleBuffer((Graphics2D)Ima.getGraphics());
    g2.drawImage(Ima , 0 , 29 , this);
    try{Thread.sleep(10); } catch(Exception e) {}
    }
   
    /*metodo ruta es el que retorna la ruta de donde se encuentran las imagenes*/
   
    public static String ruta(String img){
String cadena=&quot;&quot;;
String ret =  Prin.class.getResource(&quot;img/&quot;+img).toString();
   char j[] = ret.toCharArray();
        for(int a=0;a<j.length-6;a++) {
        if(j[a+6]=='%') {
        j[a+6]=' ';
        }
        if(j[a+6]=='2' || j[a+6]=='0') {
        continue;
        }
        cadena= cadena + (new StringBuffer().append(j[a+6])).toString();
        }
        return cadena;
}
   
   
}

/*Que es lo que se tiene que hace en un juego??
 *
 *primero se deve de generar un frame
 *despues se tiene que hacer una capa dibujable
 *se tiene que cargar las imagenes en el programa
 *se deben de dibujar las imagenes
 *se tiene que mover las imagenes sobre esa capa dibujable
 *se tiene que comprobar las colisiones entre distintos rectangulos
 *
 *esas son algunas de las cosas que se tiene que hacer para que se pueda realizar el juego*/


Código: You are not allowed to view links. Register or Login
/* se importan las librerias*/

import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import java.awt.event.*;

/*clase vos se definen todos los metodo y variables
 referentes a lo que vos vas a comandar*/

public class Vos {

/*variables*/
    private static final String rutaImagen = Prin.ruta("vos.png");
    public static int altoImagen = 45;
    public static int anchoImagen = 45;
    private int posX,posY;
    private int velocidad = 10;
    private boolean abajo,arriba,izquierda,derecha;
   
    /*constructor*/
    public Vos(int posX, int posY) {
    this.posX = posX;
    this.posY = posY;
    }
   
    /*carga la imagen*/
   
    public BufferedImage getImagen() {
    try {
    return ImageIO.read(new File(rutaImagen));
    }
    catch(Exception e) {
    return null;
    }
    }
   
    /*retorna un rectangulo grande como la imagen*/
   
    public Rectangle getRectangle() {
    return new Rectangle(posX, posY, anchoImagen, altoImagen);
    }
   
    /*se dibuja la imagen en la capa que creo el metodo paint*/
   
    public void dibujar(Graphics2D g2, BufferedImage im) {
    g2.drawImage(im, posX, posY, null);
    }
   
    /*define que se hara con las teclas apretadas y soltadas*/
   
    public void apreto(KeyEvent evt) {
    switch(evt.getKeyCode()) {
    case KeyEvent.VK_UP : arriba = true; break;
    case KeyEvent.VK_DOWN : abajo = true; break;
    case KeyEvent.VK_LEFT : izquierda = true; break;
    case KeyEvent.VK_RIGHT : derecha = true; break;
    }
    }
   
    public void solto(KeyEvent evt) {
    switch(evt.getKeyCode()) {
    case KeyEvent.VK_UP : arriba = false; break;
    case KeyEvent.VK_DOWN : abajo = false; break;
    case KeyEvent.VK_LEFT : izquierda = false; break;
    case KeyEvent.VK_RIGHT : derecha = false; break;
    }
    }
   
    /*mueve la imagen sobre el panel dibujable*/
   
    public void mover() {
    if (izquierda==true && posX >= 0){
            posX -= velocidad;
    }
        if (derecha==true && posX <= Prin.ANCHO-anchoImagen-25) {
            posX += velocidad;
        }
        if (arriba==true && posY >=0) {
            posY -= velocidad;
        }
        if (abajo==true && posY <= Prin.ALTO-(altoImagen*2+10)) {
            posY += velocidad;
        }
    }
   
    /*finaliza el juego*/
   
    public void morir() {
    JOptionPane.showMessageDialog(null, "Moriste, tu puntaje es de "+Prin.getPuntaje()+" puntos." , "Game over" ,  JOptionPane.INFORMATION_MESSAGE);
    System.exit(0);
    }
   
   
}


Código: You are not allowed to view links. Register or Login
/* se importan las librerias*/

import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;

/*clase vos se definen todos los metodo y variables
 referentes a la nave enemiga*/

public class Ene {
/*variables*/
    private static final String rutaImagen = Prin.ruta("ene.png");
    public static int altoImagen = 45;
    public static int anchoImagen = 45;
    private int velocidad = 7;
    private int posX,posY;
    private String direccion;
    protected static final double disparos = 0.02;
    private int a=0;
    /*constructor*/
    public Ene(int posX, int posY) {
    this.posX = posX;
    this.posY = posY;
    this.direccion();
    }
    /*carga la imagen*/
    public BufferedImage getImagen() {
    try {
    return ImageIO.read(new File(rutaImagen));
    }
    catch(Exception e) {
    return null;
    }
    }
    /*retorna un rectangulo grande como la imagen*/
    public Rectangle getRectangle() {
    return new Rectangle(posX, posY, anchoImagen, altoImagen);
    }
    /*se dibuja la imagen en la capa que creo el metodo paint*/
    public void dibujar(Graphics2D g2, BufferedImage im) {
    g2.drawImage(im , posX, posY, null);
    }
    /*define una direccion aleatoria para la nave*/
    public void direccion() {
    Random r = new Random();
    switch((int)(r.nextDouble()*4)) {
    case 0 : direccion = "iAr"; break;
    case 1 : direccion = "dAr"; break;
    case 2 : direccion = "iAb"; break;
    case 3 : direccion = "dAb"; break;
    }
    }
    /*mueve la nave*/
    public void mover() {
    if (direccion.equals("iAr")==true) {

            if (posX>=0 && posY>=0) {
                posX -= velocidad;
                posY -= velocidad;
            }
            else{
            this.direccion();
            }
}
        if (direccion.equals("iAb")==true) {
       
            if (posX>=0 && posY <= Prin.ALTO-(altoImagen*2+10)) {
                posX -= velocidad;
                posY += velocidad;
            }
            else {
            this.direccion();
            }
        }
        if (direccion.equals("dAr")==true){
       
            if (posX<=Prin.ANCHO-anchoImagen-25 && posY>=0) {
                posX += velocidad;
                posY -= velocidad;
            }
            else {
            this.direccion();
            }
        }
        if (direccion.equals("dAb")==true) {
       
            if (posX<=Prin.ANCHO-anchoImagen-25 && posY <= Prin.ALTO-(altoImagen*2+10)) {
                posX += velocidad;
                posY += velocidad;
            }
            else {
        this.direccion();
        }
        }
 
        if (Math.random()        a++;
        Prin.rayos.add(new Rayo(posX+anchoImagen/2,posY));
        }  

    }
   
   
}


Código: You are not allowed to view links. Register or Login
/* se importan las librerias*/

import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.imageio.*;
import java.util.*;

/*clase vos se definen todos los metodo y variables
 referentes a los rayos que tira la nave enemiga*/

public class Rayo {
/*variables*/
public static final String rutaImagen = Prin.ruta("tiro.png");
    public static int altoImagen = 11;
    public static int anchoImagen = 11;
    private int velocidad = 10;
    private int posX , posY;
    private String direccion;
    /*constructor*/
    public Rayo(int posX , int posY) {
    this.posX=posX;
    this.posY=posY;
    this.direccion();
    }
    /*carga la imagen*/
    public BufferedImage getImagen() {
    try {
    return ImageIO.read(new File(rutaImagen));
    }
    catch(Exception e) {
    return null;
    }
    }
    /*retorna un rectangulo grande como la imagen*/
    public Rectangle getRectangle() {
    return new Rectangle(posX , posY , altoImagen , anchoImagen);
    }
    /*se dibuja la imagen en la capa que creo el metodo paint*/
    public void dibujar(Graphics2D g2, BufferedImage im) {
        g2.drawImage(im, posX, posY, null);        
    }
    /*define una direccion aleatoria para los rayos*/
    public void direccion() {
    Random r = new Random();
    switch((int)(r.nextDouble()*4)) {
    case 0 : direccion = "iAr"; break;
    case 1 : direccion = "dAr"; break;
    case 2 : direccion = "iAb"; break;
    case 3 : direccion = "dAb"; break;
 
    }
    }
    /*mueve los rayos*/
    public void mover(int index){
       
    if (direccion.equals("iAr")==true) {

            if (posX>=0 && posY>=0) {
                posX -= velocidad;
                posY -= velocidad;
            }
            else{
            this.direccion();
            }
}
        if (direccion.equals("iAb")==true) {
       
            if (posX>=0 && posY <= Prin.ALTO-(altoImagen*2+10)) {
                posX -= velocidad;
                posY += velocidad;
            }
            else {
            this.direccion();
            }
        }
        if (direccion.equals("dAr")==true){
       
            if (posX<=Prin.ANCHO-anchoImagen-25 && posY>=0) {
                posX += velocidad;
                posY -= velocidad;
            }
            else {
            this.direccion();
            }
        }
        if (direccion.equals("dAb")==true) {
       
            if (posX<=Prin.ANCHO-anchoImagen-25 && posY <= Prin.ALTO-(altoImagen*2+10)) {
                posX += velocidad;
                posY += velocidad;
            }
            else {
        this.direccion();
        }
        }
       
       
   
    }


}


A su vez nesesitan las imagenes de las dos naves y la imagen del rayo, yo para las naves use unos circulos que ya estubieron en un juego (4 en raya hecho por plaga)

Decide reusarlos en otro juego

Para podes verlo descargen el archivo ya que ahi estan las imagenes lo unico que tiene que hacer es copilar las 4 clase y ejecutar la clase Prin.java

Desconectado char

  • Gran Colaborador
  • ****
  • Mensajes: 1149
  • Ingeniero de Sistemas
    • TIC´S
Respuesta: Juego en java2D didactico (para que aprendar a hacer juegos)
« Respuesta #1 en: Agosto 17, 2009, 05:53:19 am »
Link Fail xDD

::Así es Volví::

Desconectado kaiser

  • Veterano
  • ***
  • Mensajes: 249
    • http://foro.latinohack.com
Respuesta: Juego en java2D didactico (para que aprendar a hacer juegos)
« Respuesta #2 en: Agosto 17, 2009, 06:20:02 pm »
Ok, en lo que pueda lo resubo... Gracias por avisar y disculpa las molestias causadas...

Desconectado char

  • Gran Colaborador
  • ****
  • Mensajes: 1149
  • Ingeniero de Sistemas
    • TIC´S
Respuesta: Juego en java2D didactico (para que aprendar a hacer juegos)
« Respuesta #3 en: Agosto 17, 2009, 06:43:00 pm »
kaiser

No olvides expecificar bajo qué plataforma de Java trabajaste.

Netbeans, eclipse digo esto porque muchas veces he visto users con poco experiencia que intentan conpilar el código con el compilador errado...Sólo es una mejora.

Saludos

::Así es Volví::

Tags:
Tags:

 


SMF 2.0.19 | SMF © 2016, Simple Machines
Paginas Afiliadas
Twitter - FaceBook - Daraxblog
Designed by Smf Personal