jueves, 23 de julio de 2009

La Ruleta Rusa con Observer y Observable


/* RuletaRusa.java
*
* Instrucciones del juego
* http://es.wikipedia.org/wiki/Ruleta_rusa
*
* En este ejemplo jugamos con un revolver con capacidad
* para 8 balas.
*
* Usaremos un numero aleatorio para elegir en que agujero
* va la bala en orden ascendente del 1 al 8.
*
* Luego se ira disparando en orden entre el jugador1 y
* el jugador2 hasta que le toque a uno de los dos. Dos jugadores y dos equipos que * observan a los jugadores.
*
* Utilizaremos las clases Observable y Observer para
* simular una partida y lanzar un anuncio al observador que pertenece
* al equipo del que se le dispara la bala!.
*
*/

import java.util.*;

class Revolver
{
private int num_agujero; // compartimento.
private int cur_agujero; // agujero a punto de disparar
private boolean nasdarobia; // mientras no pase nada brindamos

public Revolver(){
nasdarobia = true;
Random r = new Random();
num_agujero = (int) (r.nextInt(8) +1) ;
if (num_agujero==8)
cur_agujero=1;

}

public void disparar(){
if (cur_agujero==8)
cur_agujero=1;
else
cur_agujero+=1;

if (num_agujero==cur_agujero) {
nasdarobia=false;
}

}

public boolean isDisparo()
{
if (nasdarobia==false)
return true;
else
return false;
}
}
class LaRuletaRusa extends Observable
{

void turnoJugador1(Revolver arma)
{
setChanged();
arma.disparar();
if (arma.isDisparo())
notifyObservers(new String("J1B"));
else
notifyObservers(new String("J1"));
}


void turnoJugador2(Revolver arma)
{
setChanged();
arma.disparar();
if (arma.isDisparo())
notifyObservers(new String("J2B"));
else
notifyObservers(new String("J2"));

}
}

class Equipo1 implements Observer
{
public void update(Observable ob, Object par)
{
if (par.equals("J2B")){
System.out.println("Equipo 1: BANG!! JAJAJAJ el Jugador 2 esta acabado!");
}else{
System.out.println("Equipo 1: Nasdaaarroviak!");
}

}
}


class Equipo2 implements Observer
{
public void update(Observable ob, Object par)
{
if (par.equals("J1B")){
System.out.println("Equipo 2: HAHAHAHA! Vuestro jugador ha caido!");
}else{
System.out.println("Equipo 2: Nasdarobia!!");
}

}
}
class Juego
{
public static void main(String args[])
{
LaRuletaRusa ruleta = new LaRuletaRusa();
ruleta.addObserver(new Equipo1());
ruleta.addObserver(new Equipo2());

Revolver weapon = new Revolver();

while(weapon.isDisparo()==false)
{

//Aguita con estos ifs
if (weapon.isDisparo()==false)
ruleta.turnoJugador1(weapon);

if (weapon.isDisparo()==false)
ruleta.turnoJugador2(weapon);
}
}
}



--------------------
salida / output
--------------------
PS C:\test> java Juego
Equipo 2: Nasdarobia!!
Equipo 1: Nasdaaarroviak!
Equipo 2: Nasdarobia!!
Equipo 1: Nasdaaarroviak!
Equipo 2: Nasdarobia!!
Equipo 1: Nasdaaarroviak!
Equipo 2: Nasdarobia!!
Equipo 1: Nasdaaarroviak!
Equipo 2: HAHAHAHA! Vuestro jugador ha caido!
Equipo 1: Nasdaaarroviak! (Este último Nasdaarroviak no tendria que salir)

** Revisar.

No hay comentarios:

Publicar un comentario