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
Acceso.java
Auto.java
Movimiento.java
Main.java
Enemigo.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;
}
}