Página principal | Lista de namespace | Lista de archivos

jugador.h

00001 /***********************************************************************************
00002  *  CLASE JUGADOR
00003  *  Clase que representa un jugador del juego Monopoly. Esta clase es una clase derivada
00004  *  de la clase propietario y por ello puede poseer propiedades.
00005  *  A su vez, es la clase base de una nueva clase derivada: jugador_reglas, que es la
00006  *  clase que contiene las reglas de los agentes de IA.
00007  *
00008  *  Requiere:
00009  *     - clase propietario (herencia)
00010  *     - clase casilla
00011  *     - clase dado
00012  *     - clase tarjeta
00013  *     - clase negociacion
00014  *
00015  *  Autor: Javier Aragón Zabalegui (PFC para la uc3m: street Master's)
00016  *  Contacto: 100039831@alumnos.uc3m.es
00017  *  version 1.0
00018  **********************************************************************************/
00019 
00020 #ifndef __JUGADOR__
00021 #define __JUGADOR__
00022 
00023 #include "propietario.h"
00024 #include "casilla.h"
00025 #include "dado.h"
00026 
00027 #include <vector>
00028 #include <set>
00029 #include <list>
00030 #include <string>
00031 using namespace std;
00032 
00033 class tarjeta;          //forward declaration
00034 class negociacion;      //forward declaration
00035 class casilla;          //forward declaration
00036 class calle;            //forward declaration
00037 
00038 
00039 class jugador : public propietario {
00040 
00041  private:
00042 
00043   //Atributos
00044   string _nombre;               //Nombre del jugador
00045   string _color;                //color de la ficha
00046   long _dinero_total;           //dinero disponible
00047   long _capital;                //capital total = dinero_total + inversiones
00048   int _turnosEncarcelado;       //Turnos en la cárcel
00049   int _tiradasDobles;           //Tiradas dobles consecutivas actualmente
00050   long _estado;                 //Indica si es moroso / acreedor
00051   int _multiPago;               //Sus pagos se multiplicarán por esta cantidad
00052 
00053   //Asociaciones   
00054   casilla *_estaEn;             //Casilla en la que está
00055   dado *lanza;                  //Dado propio 
00056   list <tarjeta*> _tieneTarjeta;//Puede tener una o varias tarjetas de suerte
00057 
00058 
00059   //LOGS: Vectores de log para sacar las estadísticas del juego
00060   vector <long> _logDinero;
00061   vector <int> _logPropiedades;
00062   vector <int> _logEdificios;
00063   vector <int> _logConstruibles;
00064   vector <long> _logCapital;
00065   
00066  public:
00067 
00071   jugador ();
00072   
00076   jugador ( string nombre, string color, long dinero_total, long capital, int turnosEncarcelados, 
00077             int tiradasDobles, long estado, int multiPago );
00078   
00082   jugador (const jugador& right);
00083 
00087   ~jugador ();
00088 
00096   jugador& operator= (const jugador& right);
00097 
00103   bool jugador::operator!= ( const jugador& player );
00104 
00105   friend ostream& operator<< ( ostream& os, jugador *j );
00106 
00107 
00108   
00109   // Métodos GET 
00110    
00111   string get_nombre () const;
00112   string get_color () const;
00113   long get_dinero_total () const;
00114   long get_capital () const;
00115   int get_turnosEncarcelado () const;
00116   int get_tiradasDobles () const;
00117   long get_estado () const;
00118   casilla* get_estaEn () const;  
00119   int get_numPropiedades () const;
00120   int get_multiPago () const;
00121   list <tarjeta*> get_tieneTarjeta () const;
00122  
00123   int obtenerCasilla() const;
00124 
00125   // Métodos SET
00126    
00127   void set_nombre ( string nombre );
00128   void set_color ( string color );
00129   void set_tiradasDobles ( int tiradasDobles );
00130   void set_estado ( long estado );
00131   void set_estaEn ( casilla *nuevaCasilla );
00132   void set_turnosEncarcelado ( int turnosEncarcelado );  
00133   void set_dinero_total ( long dinero_total );
00134   void set_capital ( long capital );
00135   void set_multiPago ( int multiPago );
00136   void incluir_tieneTarjeta ( tarjeta *tjt );
00137   void set_tieneTarjeta ( list <tarjeta*> tieneTarjeta );
00138 
00139 
00140   // Otros métodos
00141   
00147   int tirarDado ( bool &tiradaDoble, int &dado1, int &dado2 );
00148 
00155   int tirarDado ();
00156 
00160   int ultimaTirada ();
00161   
00166   long invertir ( long cantidad );  
00167 
00173   long recuperarInversion ( long recupera, long costoAntes );
00174 
00181   virtual long pagar ( long cantidad );   
00182   
00186   void desvincularDeCasilla();
00187   
00191   bool estaEncarcelado ();
00192 
00196   string get_infoPropiedades();
00197 
00202   string listarPropiedadesHipotecables ();
00203   
00208   string listarPropiedadesHipotecadas ();
00209 
00214   string listarCallesConstruibles ();
00215 
00220   string listarCallesConstruidas ();
00221 
00225   int get_casasConstruidas ();
00226 
00230   int get_hotelesConstruidos ();
00231 
00236   int tieneTarjetasCarcel ();
00237 
00241   string mazoTarjetaSuerte ();
00242 
00247   tarjeta *devuelveTarjeta ();
00248 
00253   void negociar ( jugador *receptor );
00254 
00258   tarjeta *get_tarjeta ();
00259   
00263   tarjeta *get_tarjeta ( int orden ); 
00264 
00269   void anyadirListaTarjetas ( list <tarjeta*> listaTarjetas );
00270 
00274   void eliminarListaTarjetas ( list <tarjeta*> listaTarjetas );
00275   
00279   void eliminarTarjeta ();
00280 
00285   long expropiarEdificios ();
00286 
00292   virtual string guardarDatosPersonales ();
00293 
00299   string guardar ();
00300 
00305   void anyadirListaPropiedades ( list <propiedad*> listaPropiedades );
00306 
00312   void eliminarListaPropiedades ( list <propiedad*> listaPropiedades );
00313 
00314   // Métodos virtuales: Se redefinen en los jugadores automáticos (jugador_reglas)
00315   
00320   virtual long pujar( propiedad *p, long maxActual, jugador *ganador );
00321 
00326   virtual bool decidirComprar ( propiedad *p );
00327 
00334   virtual bool decidirSalirPagando ( int tpcPropiedadesLibres, long multa );
00335 
00341   virtual bool decidirSalirTarjeta ( int tpcPropiedadesLibres );
00342 
00347   virtual int decidirAccionTarjeta ( int numAcciones, tarjeta *tjt );
00348 
00353   virtual char decidirImpuestoEspecial ( long cantidad, int tpc );
00354 
00358   int poseeEstacion ();
00359 
00363   int poseeServicio ();
00364 
00368   int poseeConstruibles ();
00369 
00370 
00371   // Métodos para el control de logs (estadísticas)
00372   
00376   void actualizarLogs ();
00377 
00381   void verLogDinero ();
00382   
00386   void verLogCapital ();
00387 
00391   void verLogPropiedades ();
00392 
00396   void verLogEdificios ();
00397 
00401   void verLogConstruibles ();
00402   
00406   void guardarLogs ();
00407   
00411   void cerrarLogs ();
00412 
00413   // Métodos necesarios para el jugador basado en reglas
00414   
00418   long utilidadEsperadaAlquiler ( vector <propiedad*> propiedades, int n );
00419   
00423   long sumaHipoteca ( vector <propiedad*> propiedades );
00424 
00429   void imprimir ( vector <propiedad*> candidato );
00430   
00434   void unir ( vector <propiedad*> &v1, vector <propiedad*> v2 );
00435   
00441   vector <propiedad*> alternativasHipotecaImprimir ( long cantidad, vector <propiedad*> L, int index, bool imprime );
00442 
00447   void calculoUtilidadEsperadaHipotecarImprimir ( long cantidad );
00448 
00452   void unirCalles ( vector <calle*> &v1, vector <calle*> v2 );
00453   //void unir ( vector <calle*> &v1, vector <calle*> v2 );
00454 
00459   long perdidaEsperadaVenderEdificio ( calle *c, vector <calle*> L, int pos );
00460 
00464   long sumaVenta (  vector <calle*> candidato );
00465 
00469   long utilidadEsperadaVender ( vector <calle*> L, vector <calle*> candidato );
00470   
00476   vector <calle*> alternativasVenderImprimir ( long cantidad, vector <calle*> L, int index, bool imprime );
00477  
00481   void imprimirCalles ( vector <calle*> original, vector <calle*> candidato );
00482 
00486   int contarEdificios (  vector <calle*> candidato, calle* c );  
00487 
00493   bool controlFactibilidadVenta ( vector <calle*> candidato );
00494 
00501   void calculoUtilidadEsperadaVenderImprimir ( long cantidad );
00502  
00506   long sumaDeshipoteca ( vector <propiedad*> propiedades );
00507 
00513   vector <propiedad*> alternativasDeshipotecarImprimir ( long cantidad, vector <propiedad*> L, int index, bool imprime );
00514   
00519   void calculoUtilidadEsperadaDeshipotecarImprimir ( long cantidad );
00520   
00524   void imprimirCallesConstruir ( vector <calle*> original, vector <calle*> candidato  );
00525 
00529   long sumaConstruccion (  vector <calle*> candidato );
00530 
00535   long beneficioEsperadoConstruirEdificio ( calle* c, vector <calle*> L, int pos );
00536   
00540   long utilidadEsperadaConstruir ( vector <calle*> L, vector <calle*> candidato );
00541 
00545   bool controlFactibilidadConstruir ( vector <calle*> candidato );
00546 
00551   vector <calle*> alternativasConstruirImprimir ( long cantidad, vector <calle*> L, int index, bool imprime );
00552 
00559   void calculoUtilidadEsperadaConstruirImprimir ( long cantidad );
00560 
00561 };
00562 
00563 inline string jugador::get_nombre () const
00564 {
00565   return _nombre;
00566 }
00567 
00568 inline string jugador::get_color () const
00569 {
00570   return _color;
00571 }
00572 
00573 inline long jugador::get_dinero_total () const
00574 {
00575   return _dinero_total;
00576 }
00577 
00578 inline long jugador::get_capital () const
00579 {
00580   return _capital;
00581 }
00582 
00583 inline int jugador::get_turnosEncarcelado () const
00584 {
00585   return _turnosEncarcelado;
00586 }
00587 
00588 inline int jugador::get_tiradasDobles () const
00589 {
00590   return _tiradasDobles;
00591 }
00592 
00593 inline long jugador::get_estado () const
00594 {
00595   return _estado;
00596 }
00597 
00598 inline casilla *jugador::get_estaEn () const
00599 {
00600   return _estaEn;
00601 }
00602 
00603 inline int jugador::get_multiPago () const
00604 {
00605   return _multiPago;
00606 }
00607 
00608 inline int jugador::get_numPropiedades () const
00609 {
00610   return _posee.size ();
00611 }
00612 
00613 inline list <tarjeta*> jugador::get_tieneTarjeta () const
00614 {
00615   return _tieneTarjeta;
00616 }
00617 
00618 inline void jugador::set_nombre ( string nombre )
00619 {
00620   _nombre = nombre;
00621 }
00622 
00623 inline void jugador::set_color ( string color )
00624 {
00625   _color = color;
00626 }
00627 
00628 inline void jugador::set_tiradasDobles ( int tiradasDobles )
00629 {
00630   _tiradasDobles = tiradasDobles;
00631 }
00632 
00633 inline void jugador::set_estado ( long estado )
00634 {
00635   _estado = estado;
00636 }
00637 
00638 inline void jugador::set_estaEn ( casilla *nuevaCasilla )
00639 {
00640   _estaEn = nuevaCasilla;
00641 }
00642 
00643 inline void jugador::set_turnosEncarcelado ( int turnosEncarcelado )
00644 {
00645   _turnosEncarcelado = turnosEncarcelado;
00646 }
00647 
00648 inline void jugador::incluir_tieneTarjeta ( tarjeta *tjt )
00649 {
00650   _tieneTarjeta.push_front ( tjt );
00651 }
00652 
00653 inline void jugador::set_capital ( long capital )
00654 {
00655   _capital = capital;
00656 }
00657 
00658 inline void jugador::set_dinero_total ( long dinero_total )
00659 {
00660   _dinero_total = dinero_total;
00661 }
00662 
00663 inline void jugador::set_multiPago ( int multiPago )
00664 {
00665   _multiPago = multiPago;
00666 }
00667 
00668 inline void jugador::set_tieneTarjeta ( list <tarjeta*> tieneTarjeta )
00669 {
00670   _tieneTarjeta = tieneTarjeta;
00671 }
00672 
00673 
00674 #endif

Generado el Fri Jun 30 12:38:29 2006 para Street Master's por  doxygen 1.3.9.1