miércoles, 20 de noviembre de 2013

Juego Distribuido ("Speed Racer 2049")

Juego.java


/**
 *
 * @author Eduardo Yair-
 */
import java.awt.Graphics2D;
import java.util.ArrayList;
import javax.swing.JPanel;

public interface Juego{
public void conectar();
public void mover(Movimiento m);
public void actualizar();
public void ganar();
public void perder();
public void recibirEnemigos();
public void dibujarAuto(Auto a,Graphics2D g2d);
public void dibujarEnemigos(ArrayList<Enemigo> enem,Graphics2D g2d);
}


Cliente.java



import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.Timer;
/**
 *
 * @author Eduardo Yair-
 */
public class Cliente extends JLabel implements Juego{
    JFrame ventana=new JFrame("Speed Racer 2049");
    Socket s;
    ArrayList<Enemigo> enemigos=new ArrayList<Enemigo>();
    ArrayList<Auto> autos=new ArrayList<Auto>();
    Timer t;
    ObjectInputStream ois;
    Image fondo=new ImageIcon(getClass().getResource("img/fondo.png")).getImage();
    Image autoi=new ImageIcon(getClass().getResource("img/carpot.png")).getImage();
    Image enemyi=new ImageIcon(getClass().getResource("img/enemy.png")).getImage();
    Image enemyj=new ImageIcon(getClass().getResource("img/enemy1.png")).getImage();
    Image enemyk=new ImageIcon(getClass().getResource("img/enemy2.png")).getImage();
    Image enemyl=new ImageIcon(getClass().getResource("img/ship.png")).getImage();
    
    ObjectOutputStream ooo;
    int pos=0;
    public static void main(String args[]){
        new Cliente();
    }
    public Cliente(){
        super();
        conectar();
        ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Dimension pantalla=Toolkit.getDefaultToolkit().getScreenSize();
        ventana.setSize(pantalla);
        ventana.setUndecorated(true);
        ventana.add(this);
        ventana.setVisible(true);
        this.setFocusable(true);
        this.addKeyListener(teclado);
        setBackground(Color.BLACK);
        t=new Timer(5,escuchador);
        
        t.start();
    }
    public void recibirEnemigos(){
        try{
            //s.setSoTimeout(5);
            Mensaje mensaje=(Mensaje)ois.readObject();
            enemigos=mensaje.enemigos;
            autos=mensaje.autos;
            pos=mensaje.fondo;
            //imprimirEnemigos();
        }catch(IOException e ){
            //e.printStackTrace();
            //System.exit(0);
        }
        catch(Exception e ){
            //e.printStackTrace();
        }
    }
    public void dibujarAuto(Auto c,Graphics2D g2d){
        if(!c.perder){
            g2d.drawImage(autoi,c.posx,c.posy,c.ancho,c.alto , null);
        }
    }
    ActionListener escuchador=new ActionListener(){
        public void actionPerformed(ActionEvent ae) {
            actualizar();
        }
        
    };
    public void paint(Graphics g){
        super.paint(g);
        Graphics2D g2d=(Graphics2D)g;
        g2d.setColor(Color.white);
        g2d.drawImage(fondo, 0, pos,ventana.getWidth() ,ventana.getHeight() , null);
        g2d.drawImage(fondo, 0, 0-ventana.getHeight()+pos,ventana.getWidth() , ventana.getHeight() , null);
        for(Auto a:autos){
            dibujarAuto(a,g2d);
        }
        dibujarEnemigos(enemigos,g2d);
    }
    public void dibujarEnemigos(ArrayList<Enemigo> enem,Graphics2D g2d){
        for(int i=0;i<enem.size();i++){
            int r=i%3;
            if(r==0){
                g2d.drawImage(enemyi,enem.get(i).posx,enem.get(i).posy,enem.get(i).ancho,enem.get(i).alto , null);
            }else if(r==1){
                g2d.drawImage(enemyj,enem.get(i).posx,enem.get(i).posy,enem.get(i).ancho,enem.get(i).alto , null);
            }else if(Math.random()*2<=4){
                g2d.drawImage(enemyk,enem.get(i).posx,enem.get(i).posy,enem.get(i).ancho,enem.get(i).alto , null);
            }else if(Math.random()*2>=4){
                g2d.drawImage(enemyl,enem.get(i).posx,enem.get(i).posy,enem.get(i).ancho,enem.get(i).alto , null);}
        }
    }
     KeyListener teclado=new KeyListener(){
        public void keyTyped(KeyEvent ke) {
        }
        public void keyPressed(KeyEvent ke) {
            if(ke.getKeyCode()==KeyEvent.VK_ESCAPE){
                System.exit(0);
            }  
            Movimiento m=new Movimiento(ke,true);
            mover(m);
        }
        public void keyReleased(KeyEvent ke) {
            Movimiento m=new Movimiento(ke,false);
            mover(m);
        }
    };
    @Override
    public void conectar() {
        try{
            System.out.println("Estableciendo Conexión");
            InetAddress ad=InetAddress.getByName(JOptionPane.showInputDialog("Inserte IP del servidor: "));
            s=new Socket(ad,Integer.parseInt(JOptionPane.showInputDialog("Inserte Puerto: ")));
            ois=new ObjectInputStream(s.getInputStream());
            ooo=new ObjectOutputStream(s.getOutputStream());
        }catch(Exception e){
            //e.printStackTrace();
        }
    }
    public void mover(Movimiento m) {
        try{
            ooo.writeObject(m);
            Thread.sleep(200);
            
            //ooo.flush();
            //s.getOutputStream().flush();
            ooo.reset();
            
        }catch(Exception e){
            //e.printStackTrace();
        }
    }

    @Override
    public void actualizar() {
            recibirEnemigos();
            repaint();
    }

    @Override
    public void ganar() {
    }

    @Override
    public void perder() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

}

Acceso.java


import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JOptionPane;
/**
 *
 * @author Eduardo Yair-
 */

class Acceso {
    JFrame ven=new JFrame("Speed Racer 2049");
    
    public Acceso() {
        ven.setSize(200, 200);
        ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ven.setLocationRelativeTo(null);
        Container c=ven.getContentPane();
        c.setLayout(null);
        JButton b2=new JButton("Unirse a partida");
        b2.addActionListener(clien);
        
        b2.setBounds(25, 50, 150, 25);
        c.add(b2);
        ven.setVisible(true);
    }
    ActionListener clien=new ActionListener(){
        public void actionPerformed(ActionEvent ae) {
            new Cliente();
            ven.dispose();
        }
    };
}


Auto.java


import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.Serializable;

public class Auto implements Serializable{
    int dx,dy,posx,posy,alto,ancho;
    int[]teclas=new int[4];
    Control control=new Control();
    boolean perder=false;
    public Auto(int px,int py,int lx,int ly,int nteclas[]){
        
        teclas=nteclas;
        posx=px;
        posy=py;
        alto=ly;
        ancho=lx;
    }
    
    public void mover(Dimension max){
        posx+=dx;
        posy+=dy;
        if(posx<=0){
            posx=0;
        }
        if(posx+ancho+15>max.width){
            posx=max.width-ancho-15;
        }
        if(posy<0){
            posy=0;
        }
        if(posy+alto+35>max.height){
            posy=max.height-alto-35;
        }
    }
    
    public class Control implements Serializable,KeyListener{

        public void keyTyped(KeyEvent ke) {
        }
        public void keyPressed(KeyEvent ke) {
            int tecla=ke.getKeyCode();
            if(tecla==teclas[2]){
                dy=-5;
            }
            if(tecla==teclas[3]){
                dy=5;
            }
            if(tecla==teclas[0]){
                dx=-5;
            }
            if(tecla==teclas[1]){
                dx=5;
            }
            
        }
        public void keyReleased(KeyEvent ke) {
            int tecla=ke.getKeyCode();
            if(tecla==teclas[2]||tecla==teclas[3]){
                dy=0;
            }
            if(tecla==teclas[0]||tecla==teclas[1]){
                dx=0;
            }
        }
        
    }
}


Movimiento.java

import java.awt.event.KeyEvent;
import java.io.Serializable;
public class Movimiento implements Serializable{
    public Movimiento(KeyEvent k,boolean b){
        ke=k;
        presion=b;
    };
    KeyEvent ke;
    boolean presion;
}


Mensaje.java

import java.io.Serializable;
import java.util.ArrayList;

/**
 *
 * @author eduardoyair-
 */
public class Mensaje implements Serializable{
    ArrayList<Enemigo> enemigos=new ArrayList<Enemigo>();
    ArrayList<Auto> autos=new ArrayList<Auto>();
    int fondo;
    int perder=0;
}

Main.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author eduardoyair
 */
public class main {
    public static void main(String args[]){
        new Acceso();
    }
}


Enemigo.java


import java.io.Serializable;

class Enemigo  implements Serializable{
    int vel,posx,posy=-200,ancho=100,alto=200;
    public Enemigo(int w,int v){
        posx=(int)(Math.random()*w);
        vel=(int)(Math.random()*v)+1;
    }
    public void mover(){
        posy+=vel;
    }
}

1 comentario: