All pastes #778637 Raw Edit

Demo23d.java

public java v1 · immutable
·published 2007-11-17 19:55 UTC
rendered paste body
/*	Demo23d.java	AdC. Lab2. VideoJuego. StandAlone version.	13Jul2007*/import hardware.jnpout32.*;import java.awt.*;//import java.awt.Toolkit;import java.awt.event.*;import javax.swing.*;import java.util.*;import java.applet.*;import java.net.*;import java.io.*;//import java.lang.Thread;import java.lang.*;public class Demo23d extends JComponent implements Runnable {    private final static int ANCHO=640, ALTO=480;    private final static int DIAMETRO=20, RADIO=10;	private final static int NUMCOMIDAS=6;	private final static int THEq=81, THEa=65;    /*private float x, y;    private float vx, vy;*/	private int dog1x,dog1y,dog2x,dog2y,dog3x,dog3y,velxdog1,velydog1,velxdog2,velydog2,velxdog3,velydog3;	private int jerryx,jerryy;	private float tomx,tomy,velxtom,velytom;    private boolean arriba, abajo, izquierda, derecha;	private double catx,caty,distancia;	private int contjerrys;	private boolean tomatrapado,activo;	//private int x2,y2,vx2,vy2;	Random rnd;	Image dog1img,dog2img,dog3img,tomimg,jerryimg,bgimage;	FileInputStream fin;	BufferedReader myInput;	private String thisline,thedouble,theexpo,THEPATH;	private double expo,mydouble,thefactor,lastdouble;	private int thevalue;	private short CIRCUITVALUE;	pPort lpt;    public Demo23d() {        setPreferredSize(new Dimension(ANCHO,ALTO));		rnd = new Random();		dog1x = rnd.nextInt(ANCHO);		dog1y = rnd.nextInt(ALTO);		dog2x = rnd.nextInt(ANCHO);		dog2y = rnd.nextInt(ALTO);		dog3x = rnd.nextInt(ANCHO);		dog3y = rnd.nextInt(ALTO);		tomx = rnd.nextInt(ANCHO-RADIO);		tomy = rnd.nextInt(ALTO-RADIO);		jerryx = rnd.nextInt(ANCHO-RADIO);		jerryy = rnd.nextInt(ALTO-RADIO);		velxdog1 = 5;		velydog1 = 5;		velxdog2 = 5;		velydog2 = 5;		velxdog3 = 5;		velydog3 = 5;		catx = 100;		caty = 100;		distancia = 100;		dog1img = Toolkit.getDefaultToolkit().createImage("dog.gif");		dog2img = Toolkit.getDefaultToolkit().createImage("dog.gif");		dog3img = Toolkit.getDefaultToolkit().createImage("dog.gif");		tomimg = Toolkit.getDefaultToolkit().createImage("tom.gif");		jerryimg = Toolkit.getDefaultToolkit().createImage("jerry.gif");		bgimage = Toolkit.getDefaultToolkit().createImage("fondo.gif");		contjerrys=0;		tomatrapado=false;		activo=false;		THEPATH = "C:\\MATLAB6p5\\work\\circuit.dat";		thisline = new String();		thevalue = 0;		expo=0;		mydouble=0;		thefactor=0;		lastdouble=0;		thedouble = new String();		theexpo = new String();		arriba=false;		derecha=false;		abajo=false;		izquierda=false;		CIRCUITVALUE = 0;		//lpt = new pPort();        addKeyListener(new KeyAdapter() {                public void keyPressed(KeyEvent e) {                    actualiza(e.getKeyCode(), true);                }                public void keyReleased(KeyEvent e) {                    actualiza(e.getKeyCode(), false);                }				/*public void keyTyped(KeyEvent e) {					actualiza(e.getKeyCode(), true);				}*/                private void actualiza(int keyCode, boolean pressed) {					if (keyCode==THEq)					{						activo=true;					}					if (keyCode==THEa)					{						reacomodartomyjerry();					}                    switch (keyCode) {                        case KeyEvent.VK_UP:                            arriba = pressed;                            break;                        case KeyEvent.VK_DOWN:                            abajo = pressed;                            break;                        case KeyEvent.VK_LEFT:                            izquierda = pressed;                            break;                        case KeyEvent.VK_RIGHT:                            derecha = pressed;                            break;                    }                }            });        setFocusable(true);    }    private float clamp(float valor, float min, float max) {        if (valor > max)            return max;        if (valor < min)            return min;        return valor;    }    /*private void fisica(float dt) {        vx = 0;        vy = 0;        if (arriba)            vy = -300;        if (abajo)            vy = 300;        if (izquierda)            vx = -300;        if (derecha)            vx = 300;        x = clamp(x + vx * dt, 0, ANCHO - DIAMETRO);        y = clamp(y + vy * dt, 0, ALTO - DIAMETRO);    }*/	private void fisica(float dt) {		velxtom = 0;		velytom = 0;		if (arriba)		{			velytom = -300;		}		if (abajo)		{			velytom = 300;		}		if (izquierda)		{			velxtom = -300;		}		if (derecha)		{			velxtom = 300;		}		tomx = clamp(tomx + velxtom*dt, 0, ANCHO-DIAMETRO);		tomy = clamp(tomy + velytom*dt, 0, ALTO-DIAMETRO);	}	/*public void moverbala() {		if (x2 > ANCHO-RADIO)		{			vx2 = -5;		}		if (x2 < RADIO)		{			vx2 = 5;		}		if (y2 > ALTO-RADIO)		{			vy2 = -5;		}		if (y2 < RADIO)		{			vy2 = 5;		}		x2 += vx2;		y2 += vy2;	}*/	public void moverdogs() {		if (dog1x > ANCHO-RADIO)		{			velxdog1 = -5;		}		if (dog1x < RADIO)		{			velxdog1 = 5;		}		if (dog1y > ALTO-RADIO)		{			velydog1 = -5;		}		if (dog1y < RADIO)		{			velydog1 = 5;		}		if (dog2x > ANCHO-RADIO)		{			velxdog2 = -5;		}		if (dog2x < RADIO)		{			velxdog2 = 5;		}		if (dog2y > ALTO-RADIO)		{			velydog2 = -5;		}		if (dog2y < RADIO)		{			velydog2 = 5;		}		if (dog3x > ANCHO-RADIO)		{			velxdog3 = -5;		}		if (dog3x < RADIO)		{			velxdog3 = 5;		}		if (dog3y > ALTO-RADIO)		{			velydog3 = -5;		}		if (dog3y < RADIO)		{			velydog3 = 5;		}		dog1x += velxdog1;		dog1y += velydog1;		dog2x += velxdog2;		dog2y += velydog2;		dog3x += velxdog3;		dog3y += velydog3;	}	public boolean comio() {		catx = tomx-jerryx;		caty = tomy-jerryy;		distancia = Math.sqrt((catx*catx) + (caty*caty));		if (distancia < RADIO)		{			contjerrys++;			return true;		}		else {return false;}	}	public void reacomodartomyjerry() {		tomx = rnd.nextInt(ANCHO-RADIO);		tomy = rnd.nextInt(ALTO-RADIO);		jerryx = rnd.nextInt(ANCHO-RADIO);		jerryy = rnd.nextInt(ALTO-RADIO);	}	public void obtenervalordelarchivo() {		try		{			fin =  new FileInputStream(THEPATH);			myInput = new BufferedReader(new InputStreamReader(fin));			thisline = myInput.readLine();			//System.out.println(thisline);		}		catch (Exception ex)		{			ex.printStackTrace();		}	}	public void parsearvalorobtenido() {		thedouble = thisline.substring(2,5);		theexpo = thisline.substring(thisline.length()-3,thisline.length());		expo = Double.valueOf(theexpo).doubleValue();		mydouble = Double.valueOf(thedouble).doubleValue();		thefactor = Math.pow(10,expo);		lastdouble = mydouble*thefactor;		thevalue = (int)lastdouble;		//System.out.println(thisline+"\n"+mydouble+"\n"+expo+"\n"+thevalue);	}	public void checkandsetbuttons() {		/*obtenervalordelarchivo();		parsearvalorobtenido();*/		switch (CIRCUITVALUE)		{		case 143:			arriba=true;			break;		case 151:			derecha=true;			break;		case 167:			abajo=true;			break;		case 199:			izquierda=true;			break;		case 7:			reacomodartomyjerry();			break;		default:			arriba=false;			derecha=false;			abajo=false;			izquierda=false;			break;		}	}	public void run() {		Thread.currentThread().setPriority(5);		try		{			while (true)			{				Thread.sleep(10);				this.CIRCUITVALUE = lpt.input((short)0x379);//				checkandsetbuttons();//				System.out.println("CIRCUITVALUE = "+CIRCUITVALUE);			}		}		catch (InterruptedException ex)		{			ex.printStackTrace();		}	}    public void paint(Graphics g) {		if (activo && contjerrys<NUMCOMIDAS)		{			g.drawImage(bgimage,0,0,this);			g.setColor(Color.LIGHT_GRAY);			g.fillOval(dog1x-RADIO,dog1y-RADIO,DIAMETRO,DIAMETRO);			g.drawImage(dog1img,dog1x-RADIO,dog1y-RADIO,DIAMETRO,DIAMETRO,this);			g.setColor(Color.LIGHT_GRAY);			g.fillOval(dog2x-RADIO,dog2y-RADIO,DIAMETRO,DIAMETRO);			g.drawImage(dog2img,dog2x-RADIO,dog2y-RADIO,DIAMETRO,DIAMETRO,this);			g.setColor(Color.LIGHT_GRAY);			g.fillOval(dog3x-RADIO,dog3y-RADIO,DIAMETRO,DIAMETRO);			g.drawImage(dog3img,dog3x-RADIO,dog3y-RADIO,DIAMETRO,DIAMETRO,this);			g.setColor(Color.LIGHT_GRAY);			g.fillOval(Math.round(tomx),Math.round(tomy),DIAMETRO,DIAMETRO);			g.drawImage(tomimg,Math.round(tomx),Math.round(tomy),DIAMETRO,DIAMETRO,this);			if (comio())			{				jerryx = rnd.nextInt(ANCHO-RADIO);				jerryy = rnd.nextInt(ALTO-RADIO);				g.setColor(Color.LIGHT_GRAY);				g.fillOval(jerryx,jerryy,DIAMETRO,DIAMETRO);				g.drawImage(jerryimg,jerryx,jerryy,DIAMETRO,DIAMETRO,this);			}			else {				g.setColor(Color.LIGHT_GRAY);				g.fillOval(jerryx,jerryy,DIAMETRO,DIAMETRO);				g.drawImage(jerryimg,jerryx,jerryy,DIAMETRO,DIAMETRO,this);			}		}		if (!activo)		{			g.drawString("TOM & JERRY",50,50);			g.drawString("El VideoJuego.",50,70);			g.drawString("Tom ha caido en la perrera municipal persiguiendo a Jerry.",50,90);			g.drawString("Ayudalo a capturar a Jerry "+NUMCOMIDAS+" veces para satisfacer su apetito, evitando ser atrapado por algun perro.",50,110);			g.drawString("Usa las cuatro teclas de direccion para mover a Tom.",50,130);			g.drawString("La tecla 'a' te da la opcion de reacomodar a Tom y Jerry.",50,150);			g.drawString("Presiona la tecla 'q' para iniciar el juego...",50,170);		}		if (contjerrys==NUMCOMIDAS)		{			g.drawString("EXITO!",100,100);			g.drawString("Ganaste al atrapar a Jerry el numero adecuado de veces para saciar a Tom.",50,150);		}		if (tomatrapado)		{			g.drawString("FRACASO!",100,100);			g.drawString("Perdiste al ser atrapado por uno de los perro.",50,150);		}    }    private void dibuja() throws Exception {        SwingUtilities.invokeAndWait(new Runnable() {                public void run() {                    paintImmediately(0, 0, ANCHO, ALTO);                }            });    }    public void cicloPrincipalJuego() throws Exception {//		new Thread(this).start();        long tiempoViejo = System.nanoTime();        while (true) {			new Thread(this).start();			dibuja();			moverdogs();			//checkandsetbuttons();//            long tiempoNuevo = System.nanoTime();            float dt = (tiempoNuevo - tiempoViejo) / 1000000000f;            tiempoViejo = tiempoNuevo;            fisica(dt);//			System.out.println("FUERA DEL TH es "+CIRCUITVALUE);        }    }    public static void main(String[] args) throws Exception {		Thread.currentThread().setPriority(10);        JFrame jf = new JFrame("Demo23d");        jf.addWindowListener(new WindowAdapter() {                public void windowClosing(WindowEvent e) {                    System.exit(0);                }            });        jf.setResizable(false);        Demo23d demo23d = new Demo23d();        jf.getContentPane().add(demo23d);        jf.pack();        jf.setVisible(true);        demo23d.cicloPrincipalJuego();    }}//EOS