00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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;
00034 class negociacion;
00035 class casilla;
00036 class calle;
00037
00038
00039 class jugador : public propietario {
00040
00041 private:
00042
00043
00044 string _nombre;
00045 string _color;
00046 long _dinero_total;
00047 long _capital;
00048 int _turnosEncarcelado;
00049 int _tiradasDobles;
00050 long _estado;
00051 int _multiPago;
00052
00053
00054 casilla *_estaEn;
00055 dado *lanza;
00056 list <tarjeta*> _tieneTarjeta;
00057
00058
00059
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
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
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
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
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
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
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
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