00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef __TABLERO__
00016 #define __TABLERO__
00017
00018 #include "cadenas.h"
00019 #include "fichero.h"
00020
00021 #include "configuracion.h"
00022
00023 #include "jugador.h"
00024 #include "jugador_reglas.h"
00025 #include "calle.h"
00026 #include "casilla.h"
00027 #include "estacion.h"
00028 #include "impuesto.h"
00029 #include "impuesto5.h"
00030 #include "salida.h"
00031 #include "servicio.h"
00032 #include "carcel.h"
00033 #include "encarceladora.h"
00034 #include "casilla_tarjetas.h"
00035 #include "mazo.h"
00036 #include "banca.h"
00037
00038 #include <vector>
00039 #include <map>
00040 #include <string>
00041 #include <iostream>
00042 #include <fstream>
00043 using namespace std;
00044
00045 class tablero {
00046
00047 private:
00048
00049 bool _partidaAbierta;
00050 string _nombrePartida;
00051 string _ciudad;
00052 string _moneda;
00053 string _fichCasillas;
00054 string _fichSuerte;
00055 string _fichCajaComunidad;
00056 long _dineroInicial;
00057 int _numJugadores;
00058 static int _numCasillas;
00059 static int _salida;
00060 static int _turno;
00061 int _jugadorActual;
00062 static bool _subastas;
00063
00064
00070 static vector <casilla*> contiene;
00071 static vector <jugador*> juega;
00072 map < string, mazo* > _mazo;
00073 static banca* _banca;
00074
00097 int casilla_tipo_calle ( string linea );
00098
00103 int casilla_tipo_servicio ( string linea );
00104
00109 int casilla_tipo_estacion ( string linea );
00110
00115 int casilla_tipo_impuesto ( string linea );
00116
00122 int casilla_tipo_impuesto_especial ( string linea );
00123
00129 int casilla_tipo_salida ( string linea );
00130
00136 int casilla_tipo_parking ( string linea );
00137
00142 int casilla_tipo_encarceladora ( string linea );
00143
00149 int casilla_tipo_carcel ( string linea );
00150
00156 int casilla_tipo_tarjetas ( string linea );
00157
00158 public:
00159
00160
00161 tablero ();
00162
00163
00164 tablero ( string nombrePartida, string ciudad, string moneda, string fichCasillas,
00165 string fichSuerte, string fichCajaComunidad, int numJugadores, int numCasillas,
00166 bool partidaAbierta, int salida, int turno, int jugadorActual, long dineroInicial,
00167 bool subastas );
00168
00169
00170 tablero (const tablero& right);
00171
00172
00173
00174
00175 tablero& operator= (const tablero& right);
00176 casilla *operator[](unsigned int i);
00177
00178
00198 friend ostream& operator<< ( ostream& os, tablero &tab );
00199
00200
00201 ~tablero ();
00202
00203
00204 string get_nombrePartida () const;
00205 string get_ciudad () const;
00206 string get_moneda () const;
00207 string get_fichCasillas () const;
00208 string get_fichSuerte () const;
00209 string get_fichCajaComunidad () const;
00210 long get_dineroInicial () const;
00211 int get_numJugadores () const;
00212 static int get_numCasillas ();
00213 bool get_partidaAbierta () const;
00214 static int get_salida ();
00215 static int get_turno ();
00216 int get_jugadorActual () const;
00217 static banca *get_banca ();
00218 static bool get_subastas ();
00219
00220
00221
00222 void set_nombrePartida ( string nombre );
00223 void set_ciudad ( string ciudad );
00224 void set_moneda ( string moneda );
00225 void set_fichCasillas ( string nombreFichero );
00226 void set_fichSuerte ( string nombreFichero );
00227 void set_fichCajaComunidad ( string nombreFichero );
00228 void set_dineroInicial ( long dineroInicial );
00229 void set_numJugadores ( int numJugadores );
00230 static void set_numCasillas ( int numCasillas );
00231 void set_partidaAbierta ( bool abierta );
00232 static void set_salida ( int salida );
00233 static void set_turno ( int turno );
00234 void set_jugadorActual ( int jugadorActual );
00235 void set_mazo ( string tipo, mazo* mazoTarjetas );
00236 static void set_banca ( banca *b );
00237 static void set_subastas ( bool subastas);
00238
00239
00240
00245 string tablero::obtenerNombreJugador ( int numeroJugador );
00246
00254 int cargar_casillas ();
00255
00260 int guardar ( string fichero );
00261
00266 void cargarPropiedades ( jugador *j, string lista );
00267
00272 void cargarTarjetas ( jugador *j, string lista );
00273
00279 int cargar ( string fichero, string &prompt );
00280
00286 bool existenDeudas ();
00287
00292 bool existenDeudas ( int idJugador);
00293
00298 string verMorosos ();
00299
00312 bool pagarDeudas ();
00313
00319 void redistribuirBienes ( jugador * j );
00320
00325 void subastarLista ( vector <jugador*> acreedores, list <propiedad*> listaPropiedades, jugador *propietario );
00326
00333 static void subastarPropiedad ( propiedad *p, vector<jugador*> interesados );
00334
00340 int declararBancarrota ( int numeroJugador);
00341
00347 int declararBancarrota ( jugador *j );
00348
00354 string dibujarTablero ( int casillasArriba, int casillasAbajo, int casillasDcha, int casillasIzqda );
00355
00360 void anyadir_jugador ( jugador* nuevo );
00361
00366 void eliminarJugador ( jugador* player );
00367
00374 int anyadir_casilla ( casilla *nuevo );
00375
00379 bool repetido ( string nombre );
00380
00385 int incluir_jugador ( int id, string nombre, string color, int jugadorAuto );
00386
00391 int incluirBanca ( int numCasas, int numHoteles );
00392
00398 jugador* buscar_jugador_color ( string color ) const;
00399
00406 int buscar_jugador_color_int ( string color ) const;
00407
00413 int buscar_jugador_nombre_int ( string nombre ) const;
00414
00415
00416
00417
00424 void incluir_calle ( int numero_casilla, string nombre, string nombreCorto, string color,
00425 long precio, long hipoteca, long alquiler0, long alquiler1, long alquiler2,
00426 long alquiler3, long alquiler4, long alquiler_h, int precio_casa,
00427 int precio_hotel );
00428
00435 void incluir_servicio ( int numero_casilla, string nombre, string nombreCorto, long precio,
00436 long hipoteca, int multiplicador1, int multiplicador2 );
00437
00444 void incluir_estacion ( int numero_casilla, string nombre, string nombreCorto, long precio,
00445 long hipoteca, long alquiler1, long alquiler2, long alquiler3,
00446 long alquiler4 );
00447
00451 void incluir_impuesto ( int numero_casilla, string nombre, string nombreCorto, int precio );
00452
00456 void incluir_impuesto_especial ( int numero_casilla, string nombre, string nombreCorto, int precio,
00457 int tpc );
00458
00463 void incluir_casilla_tarjetas ( int numero_casilla, string nombre, string nombreCorto, string mazo );
00464
00468 void incluir_salida ( int numero_casilla, string nombre, string nombreCorto, long sueldo );
00469
00473 void incluir_casilla_generica ( int numero_casilla, string nombre, string nombreCorto );
00474
00478 void incluir_carcel ( int numeroCasilla, string nombre, string nombreCorto, int maxTurnos, long multa );
00479
00483 void incluir_encarceladora ( int numeroCasilla, string nombre, string nombreCorto );
00484
00489 void cerrar ();
00490
00495 int recolocar ( void );
00496
00503 bool verificar ( void );
00504
00510 void colocarJugador ( int numJugador, int numCasilla );
00511
00518 string elegirOrdenTirada ( void );
00519
00524 static string dibujarMovimiento ( int casillaOrigen, int casillaDestino );
00525
00529 static int subastar ( propiedad *p);
00530
00536 int ofrecerLibertad ( jugador* j );
00537
00542 string evaluarAccion ( jugador* j, int resultadoAccion );
00543
00549 string moverJugador ();
00550
00555 void razonarJugadores ( string &prompt );
00556
00561 string leyenda ();
00562
00568 int crearMazo ( string tipo );
00569
00574 int ver_lista_jugadores ( );
00575
00581 int ver_jugador ( string color );
00582
00587 int ver_jugador ( int pos );
00588
00593 string cambiarJugadorActual ( int nuevoJugadorActual );
00594
00599 string cambiarJugadorActual ( string campo, string valor );
00600
00604 string verHipotecables ();
00605
00609 string verHipotecados ();
00610
00614 string verConstruibles ();
00615
00619 string verConstruidas ();
00620
00626 int hipotecar ( string atributo, string valor );
00627
00634 int deshipotecar ( string atributo, string valor );
00635
00643 int construir ( string atributo, string valor );
00644
00652 int vender ( string atributo, string valor );
00653
00658 static casilla* buscarSiguienteCasillaTipo ( jugador* j,string tipo );
00659
00665 static int buscarSiguienteCasillaTipoInt ( jugador* j, string tipo );
00666
00671 static void encarcelar ( jugador* j );
00672
00676 static void colocarJugador ( jugador* j, int numCasilla );
00677
00682 static int moverA ( jugador* j, int numCasillaFinal );
00683
00689 static int mover( jugador* j, int totalDados, bool tiradaDoble, bool salario );
00690
00695 static int moverAAccion ( jugador* j, int numCasillaFinal );
00696
00702 static int pagarATodos ( jugador *j, long cantidad );
00703
00707 static void pagarSalario ( jugador *j, int numCasillaFinal );
00708
00712 void verBanca ();
00713
00717 void verCasilla ( int num );
00718
00723 void negociar ();
00724
00728 static int estacionesLibres ();
00729
00733 static int serviciosOcupados ();
00734
00738 static int totalPropiedades ();
00739
00743 int propiedadesLibres ();
00744
00748 static int obtenerCasasDisponibles();
00749
00753 static int obtenerHotelesDisponibles();
00754
00758 bool jugadorClienteIA ();
00759
00763 bool existeClienteIA ();
00764
00770 void utilidadEsperadaHipotecar ( long cantidad );
00771
00777 void utilidadEsperadaVender ( long cantidad );
00778
00783 void utilidadEsperadaDeshipotecar ( long cantidad );
00784
00790 void utilidadEsperadaConstruir ( long cantidad );
00791
00796 void mostrarLog ( string colorJugador, string tipoLog );
00797
00801 void guardarLog ();
00802
00803 };
00804
00805
00806
00807 inline string tablero::get_nombrePartida () const
00808 {
00809 return _nombrePartida;
00810 }
00811
00812 inline string tablero::get_ciudad () const
00813 {
00814 return _ciudad;
00815 }
00816
00817 inline string tablero::get_moneda () const
00818 {
00819 return _moneda;
00820 }
00821
00822 inline string tablero::get_fichCasillas () const
00823 {
00824 return _fichCasillas;
00825 }
00826
00827 inline string tablero::get_fichSuerte () const
00828 {
00829 return _fichSuerte;
00830 }
00831
00832 inline string tablero::get_fichCajaComunidad () const
00833 {
00834 return _fichCajaComunidad;
00835 }
00836
00837 inline long tablero::get_dineroInicial () const
00838 {
00839 return _dineroInicial;
00840 }
00841
00842 inline int tablero::get_numJugadores () const
00843 {
00844 return _numJugadores;
00845 }
00846
00847 inline int tablero::get_numCasillas ()
00848 {
00849 return _numCasillas;
00850 }
00851
00852 inline bool tablero::get_partidaAbierta () const
00853 {
00854 return _partidaAbierta;
00855 }
00856
00857 inline int tablero::get_salida ()
00858 {
00859 return tablero::_salida;
00860 }
00861
00862 inline int tablero::get_turno ()
00863 {
00864 return tablero::_turno;
00865 }
00866
00867 inline int tablero::get_jugadorActual () const
00868 {
00869 return _jugadorActual;
00870 }
00871
00872 inline banca *tablero::get_banca ()
00873 {
00874 return _banca;
00875 }
00876
00877 inline bool tablero::get_subastas ()
00878 {
00879 return _subastas;
00880 }
00881
00882
00883
00884 inline void tablero::set_nombrePartida ( string nombre )
00885 {
00886 _nombrePartida = nombre;
00887 }
00888
00889 inline void tablero::set_ciudad ( string ciudad )
00890 {
00891 _ciudad = ciudad;
00892 }
00893
00894 inline void tablero::set_moneda ( string moneda )
00895 {
00896 _moneda = moneda;
00897 }
00898
00899 inline void tablero::set_fichCasillas ( string nombreFichero )
00900 {
00901 _fichCasillas = nombreFichero;
00902 }
00903
00904 inline void tablero::set_fichSuerte ( string nombreFichero )
00905 {
00906 _fichSuerte = nombreFichero;
00907 }
00908
00909 inline void tablero::set_fichCajaComunidad ( string nombreFichero )
00910 {
00911 _fichCajaComunidad = nombreFichero;
00912 }
00913
00914 inline void tablero::set_dineroInicial ( long dineroInicial )
00915 {
00916 _dineroInicial = dineroInicial;
00917 }
00918
00919 inline void tablero::set_numJugadores ( int numJugadores )
00920 {
00921 _numJugadores = numJugadores;
00922 }
00923
00924 inline void tablero::set_numCasillas ( int numCasillas )
00925 {
00926 _numCasillas = numCasillas;
00927 }
00928
00929 inline void tablero::set_partidaAbierta ( bool abierta )
00930 {
00931 _partidaAbierta = abierta;
00932 }
00933
00934 inline void tablero::set_salida ( int salida )
00935 {
00936 tablero::_salida = salida;
00937 }
00938
00939 inline void tablero::set_turno ( int turno )
00940 {
00941 tablero::_turno = turno;
00942 }
00943
00944 inline void tablero::set_jugadorActual ( int jugadorActual )
00945 {
00946 _jugadorActual = jugadorActual;
00947 }
00948
00949 inline void tablero::set_mazo ( string tipo, mazo* mazoTarjetas )
00950 {
00951 _mazo[tipo] = mazoTarjetas;
00952 }
00953
00954 inline void tablero::set_banca ( banca *b )
00955 {
00956 _banca = b;
00957 }
00958
00959 inline void tablero::set_subastas ( bool subastas )
00960 {
00961 _subastas = subastas;
00962 }
00963
00964 #endif