All pastes #355427 Raw Edit

Miscellany

public java v1 · immutable
·published 2007-02-14 14:04 UTC
rendered paste body
/*****************************TODO:1) Ver Bug de cuando se pasa de Level - SOLUCIONADO2) Que las manzanas no se puedan poner en los bordes ni en donde este algun obstaculo - HECHO3) Que los obstaculos no se puedan poner en donde esta la vibora y en donde esta la manzana - HECHO4) Hacer un save game5) Poder poner en pausa6) Que los distintos puntajes se manden por internet a un server (tzulberti.no-ip.info)7) Guardar puntajes - HECHO*****************************/import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.Vector;import javax.swing.JOptionPane;import java.util.Random;import java.io.*;public class Juego extends JPanel implements KeyListener, FocusListener, MouseListener, ActionListener {		private static int TAMANIO_JUGADOR = 10;	private static int TAMANIO_MANZANA = 10;	private static int TAMANIO_OBSTACULO = 10;	private static int TAMANIO_BORDE = 3;		private static int PUNTAJE_POR_LEVEL = 3;	//Datos realmente importantes	private Player jugador;	private Vector coordenadasDeLosObstaculos = new Vector();	private Coordenada posicionDeLaManzana = new Coordenada();	private boolean perdio = false;	//Datos necesarios por la implementacion	private int ultimaTeclaPresionada = KeyEvent.VK_DOWN;	private Timer volverAPintarTodo;	private char teclaPresionada = 'a';		// Lo del timer, que esta corriendo de fondo	public void actionPerformed(ActionEvent evt) {			ocuparSeDeTodo();			repaint();			};	public Juego(String nombrePlayer, int posX, int posY, tiempoTimer) {		super.requestFocus();		jugador = new Player(nombrePlayer, posX, posY);		//tambien le cargo un obstaculo		Coordenada obst = new Coordenada();		obst.x = 50;		obst.y = 200;		coordenadasDeLosObstaculos.add(obst);		//pongo la manzana		posicionDeLaManzana.x = 10;		posicionDeLaManzana.y = 70;			setBackground(Color.BLACK);		//Le agrego el timer para que empiece		//ClasePedorra aux = new ClasePedorra();		volverAPintarTodo = new Timer(tiempoTimer, this);		volverAPintarTodo.start();		//ahora tambien le doy el foco del teclado		addKeyListener(this);		addFocusListener(this);		addMouseListener(this);	}	//Esta funcion es la que se encarga de pintar todo...	public void paintComponent(Graphics g) {		super.paintComponent(g);				//Primero pintamos la manzana		g.setColor(Color.RED);		g.fillOval(posicionDeLaManzana.x, posicionDeLaManzana.y, TAMANIO_MANZANA, TAMANIO_MANZANA);				//ahora pinto los obstaculos		g.setColor(Color.BLUE);		int i = 0;		Coordenada aux = new Coordenada();		while ( i < coordenadasDeLosObstaculos.size()) {			aux = (Coordenada) coordenadasDeLosObstaculos.get(i);			g.fillRect(aux.x, aux.y, TAMANIO_OBSTACULO, TAMANIO_OBSTACULO);			i++;		};		//pinto los bordes		g.setColor(Color.BLUE);		g.fillRect(0, 0, TAMANIO_BORDE, getHeight());		g.fillRect(getWidth()-TAMANIO_BORDE, 0, TAMANIO_BORDE, getHeight());		g.fillRect(0, 0, getWidth(), TAMANIO_BORDE);		g.fillRect(0, getHeight()-TAMANIO_BORDE, getWidth(), TAMANIO_BORDE);		//finalmente pinto el jugador		int j = 0;		g.setColor(Color.GREEN);		while (j < jugador.posicionesQueOcupa().size()) {			aux = (Coordenada) jugador.posicionesQueOcupa().get(j);			g.fillOval(aux.x, aux.y, TAMANIO_JUGADOR, TAMANIO_JUGADOR);			j++;		};		}			/////////////////////////////////////////////////////////////////////////////////////	///////////////// Funciones para ver como esta el estado del juego //////////////////	/////////////////////////////////////////////////////////////////////////////////////	private void ocuparSeDeTodo() {		boolean tieneQuePasarLevel = false;			if (!perdio()) {				if (comioManzana()) {					comerManzana();					tieneQuePasarLevel = (jugador.puntaje % PUNTAJE_POR_LEVEL == 0);				};							//veo si paso de level				if (((jugador.puntaje % PUNTAJE_POR_LEVEL == 0) && (jugador.puntaje != 0))  && tieneQuePasarLevel) {											//Me fijo que el bloque que voy a poner este en alguna					//posicion valida					boolean elBloqueEstaMalPuesto = true;					Coordenada aux = new Coordenada();					Random nroRandom = new Random();					while ( elBloqueEstaMalPuesto) {						aux.x = (nroRandom.nextInt(getWidth())  / 10) * 10;						aux.y = (nroRandom.nextInt(getHeight()) / 10) * 10;						elBloqueEstaMalPuesto = coordenadasDeLosObstaculos.contains(aux) ||									jugador.posicionesQueOcupa().contains(aux) ||									aux.x == 0 ||									aux.x == getWidth() ||									aux.y == 0 ||									aux.y == getHeight();					};					coordenadasDeLosObstaculos.add(aux);					tieneQuePasarLevel = false;									} 												//ahora muevo el jugador				if (ultimaTeclaPresionada == KeyEvent.VK_LEFT) {					jugador.mover("izq", TAMANIO_JUGADOR);				}				if (ultimaTeclaPresionada == KeyEvent.VK_RIGHT) {					jugador.mover("der", TAMANIO_JUGADOR);				}				if (ultimaTeclaPresionada == KeyEvent.VK_UP) {					jugador.mover("arriba", TAMANIO_JUGADOR);				}				if (ultimaTeclaPresionada == KeyEvent.VK_DOWN) {					jugador.mover("abajo", TAMANIO_JUGADOR);				};					}			else {				volverAPintarTodo.stop();				perdio = true;				guardarPuntaje();				JOptionPane.showMessageDialog(null, "Perdiste");			};			};		/////////////////////////////////////////////////////////////////////////////////////	/////////////    Aca estan las funciones para cuando come manzana     ///////////////	/////////////////////////////////////////////////////////////////////////////////////	private boolean comioManzana() {		return jugador.posicionesQueOcupa().get(0).equals(posicionDeLaManzana);	};	private void comerManzana() {		//pongo una nueva coordenada para la manzana		Random nroRandom = new Random();		jugador.comer("abajo", TAMANIO_JUGADOR);		boolean esaPosicionEstabaOcupada = true;				while ( esaPosicionEstabaOcupada) {			posicionDeLaManzana.x = (nroRandom.nextInt(getWidth()) / 10)	* 10;			posicionDeLaManzana.y = (nroRandom.nextInt(getHeight()) / 10) * 10;			//ahora me fijo que esa posicion, sea una posicion valida.			esaPosicionEstabaOcupada = coordenadasDeLosObstaculos.contains(posicionDeLaManzana) ||							jugador.posicionesQueOcupa().contains(posicionDeLaManzana) ||							posicionDeLaManzana.x == 0 ||							posicionDeLaManzana.x == getWidth() ||							posicionDeLaManzana.y == 0 ||							posicionDeLaManzana.y == getHeight();		};			}	/////////////////////////////////////////////////////////////////////////////////////	///////////////// Aca estan las funciones para ver si perdio       //////////////////	/////////////////////////////////////////////////////////////////////////////////////	private boolean perdio() {		boolean sigueJugando = true;		sigueJugando = (!chocoElPlayer()) && (!seChocoElMismo());		return !sigueJugando;	}	private boolean chocoElPlayer() {		Coordenada aux = new Coordenada();		int i = 0;		int j = 0;		boolean resultado = false;		while (!resultado && i < jugador.posicionesQueOcupa.size()) {			j = 0;			aux = (Coordenada)jugador.posicionesQueOcupa.get(i);						//primer me fijo si choco contra algun borde			if (aux.x == 0 || aux.x > getWidth() - TAMANIO_JUGADOR) {				resultado = true;			};			if (aux.y == 0 || aux.y  > getHeight() - TAMANIO_JUGADOR) {				resultado = true;			};						//ahora me fijo si choco contra algun obstaculo			while ( ! resultado && j < coordenadasDeLosObstaculos.size()) {				resultado = coordenadasDeLosObstaculos.get(j).equals(aux);				j++;			};			i++;		};		return resultado;	};	private boolean seChocoElMismo() {		//esta funcion indica si se choco el mismo a lo largo de la serpiente		int i = 0;		boolean resultado = false;		Coordenada aux = new Coordenada();		while (! resultado && i < jugador.posicionesQueOcupa().size()) {			aux = (Coordenada) jugador.posicionesQueOcupa.get(i);			resultado = jugador.posicionesQueOcupa().indexOf(aux, i+1) != -1;			i++;		};		return resultado;	};	/////////////////////////////////////////////////////////////////////////////////////	/////////////   Estas son las funciones de cuando el jugador pierde   ///////////////	/////////////////////////////////////////////////////////////////////////////////////	void guardarPuntaje() {		try {			long posLeida = 0;			RandomAccessFile frw = new RandomAccessFile("puntaje.dat", "rw");			String textoLeido = " ";			String textoAGrabar = " ";			boolean yaTermine = false;						while (posLeida < frw.length() && !yaTermine) {								//Voy a ver si este jugador ya tiene un puntaje ingresado, y si es asi				//guardo el mayor de los dos				textoLeido = frw.readUTF();					frw.seek(posLeida);				//Primero comparo los nombres				if (textoLeido.contains(jugador.nombre())) {										//comparo los puntajes					Integer puntajeJuego = new Integer(jugador.puntaje());					Integer puntajeGuardado = new Integer(textoLeido.substring(jugador.nombre().length()+1, textoLeido.length()-1));					if (puntajeGuardado < puntajeJuego) {						System.out.println("Superastes tu puntaje");						System.out.println("Viejo Puntaje: "+ puntajeGuardado);						System.out.println("Nuevo Puntaje: " + puntajeJuego);												//vuelvo a formar el nuevo string a guardar 						textoAGrabar = jugador.nombre() + " " + puntajeJuego.toString() + "\n";						frw.writeUTF(textoAGrabar);					}					else {						System.out.println("No superastes tu puntaje");						System.out.println("Viejo Puntaje: "+ puntajeGuardado);						System.out.println("Nuevo Puntaje: " + puntajeJuego);					}						//como ya encontre jugador en el archivo, termine de guardar los datos					yaTermine = true;					}				//Hago esto para avanzar a la proxima linea								frw.readLine();				posLeida = frw.getFilePointer();			};						//termino de leer todo el archivo, pero el jugador no esta, por lo que lo tengo que agregar			if (!yaTermine) {				System.out.println("No se encontro el player, por lo que se lo crea en el archivo");				System.out.println("Nombre: " + jugador.nombre());				System.out.println("Puntaje: " + jugador.puntaje());				textoAGrabar = jugador.nombre() + " " + jugador.puntaje() + "\n";				frw.writeUTF(textoAGrabar);				yaTermine = true;			};			frw.close();		}		catch (Exception e) {			System.out.println("Salio por la exception: " + e);		};	};	/////////////////////////////////////////////////////////////////////////////////////	/////////////////   Estas son las funciones del FocusListener      //////////////////	/////////////////////////////////////////////////////////////////////////////////////	public void focusGained(FocusEvent evt) {		repaint();  // redraw with cyan border			}         	public void focusLost(FocusEvent evt) {		repaint();  // redraw without cyan border		volverAPintarTodo.stop();		Graphics g = new Graphics();		g.drawstring("PAUSA", 100, 100);	}	/////////////////////////////////////////////////////////////////////////////////////	/////////////////   Estas son las funciones del MouseListener     //////////////////	///////////////////////////////////////////////////////////////////////////////////// 	public void mousePressed(MouseEvent evt) {		requestFocus();	}               	public void mouseEntered(MouseEvent evt) { }  // Required by the	public void mouseExited(MouseEvent evt) { }   //    MouseListener	public void mouseReleased(MouseEvent evt) { } //       interface.	public void mouseClicked(MouseEvent evt) { }		/////////////////////////////////////////////////////////////////////////////////////	/////////////////   Estas son las funciones del KeyListener        //////////////////	/////////////////////////////////////////////////////////////////////////////////////		public void keyPressed(KeyEvent evt) {				this.ultimaTeclaPresionada = evt.getKeyCode();			}	public void keyReleased(KeyEvent evt) {};	public void keyTyped(KeyEvent evt) {		this.teclaPresionada = evt.getKeyChar();	} ;}