def configurar_el_juego(self): """Pone a los jugadores en el juego.""" Interfaz.setear_titulo('Configurando el juego') n = Interfaz.elegir('Jugadores', 'Seleccione el numero de jugadores', range(2,7)) nombre_colores = NOMBRE_COLORES.values() for i in range(n): nombre = Interfaz.elegir('Jugador %d' % (i + 1), 'Ingrese el nombre del jugador %d' % (i + 1)) color = Interfaz.elegir('Jugador %d' % (i + 1), 'Ingrese el color del jugador %d' % (i + 1), nombre_colores) nombre_colores.remove(color) c = NOMBRE_COLORES.keys()[NOMBRE_COLORES.values().index(color)] self.jugadores.append(Jugador(c, nombre))
def reagrupar(self, tablero): """Recibe el tablero y le pide al jugador que seleccione todos los ejercitos que desea reagrupar. Devuelve una lista de reagrupamientos. Solo se podran reagrupar ejercitos a paises limitrofes, nunca un pais podra quedar vacio. Un ejemplo de devolcion de esta funcion puede ser: [('Argentina', 'Uruguay', 2), ('Argentina', 'Brasil', 1), ('Chile', 'Argentina', 1)] Esto significa que de Argentina se reagrupan 3 ejercitos, 2 con destino a Uruguay y 1 con destino a Brasil. Argentina tiene que tener al menos 4 ejercitos. De Chile se pasa uno a Argentina, por lo que Chile tiene que tener al menos 1. Todos los paises tienen que pertenecer al jugador. Despues de implementado el reagrupamiento, Brasil quedara con 1 ejercito mas, Uruguay con 2 mas, Argentina con 2 menos (salen 3, entra 1) y Chile con 1 menos.""" paises = tablero.paises_color(self.color) opciones_paises = [] opciones_paises_destino = [] lista_reagrupamientos = [] for pais in paises: if (tablero.paises[pais][1] > 1): opciones_paises.append(pais) pais_origen = Interfaz.elegir('Reagrupar Ejercitos','Seleccione el pais de origen',opciones_paises) opciones_paises.remove(pais_origen) cantidad_ejercitos = tablero.paises[pais_origen][1] for pais in paises_limitrofes[pais_origen]: if tablero.color_pais(pais) ==self.color: opciones_paises_destino.append(pais) while cantidad_ejercitos > 1: pais_destino = Interfaz.elegir('Reagrupar Ejercitos','Seleccione el pais de Destino',opciones_paises_destino) cantidad_ejercitos_mover = Interfaz.elegir('Reagrupar Ejercitos','Seleccione la cantidad',range(1,cantidad_ejercitos)) cantidad_ejercitos -= int(cantidad_ejercitos_mover) lista_reagrupamientos.append((pais_origen,pais_destino,cantidad_ejercitos_mover)) return lista_reagrupamientos
def reagrupar(self, tablero): """Recibe el tablero y le pide al jugador que seleccione todos los ejercitos que desea reagrupar. Devuelve una lista de reagrupamientos. Solo se podran reagrupar ejercitos a paises limitrofes, nunca un pais podra quedar vacio. Un ejemplo de devolucion de esta funcion puede ser: [('Argentina', 'Uruguay', 2), ('Argentina', 'Brasil', 1), ('Chile', 'Argentina', 1)] Esto significa que de Argentina se reagrupan 3 ejercitos, 2 con destino a Uruguay y 1 con destino a Brasil. Argentina tiene que tener al menos 4 ejercitos. De Chile se pasa uno a Argentina, por lo que Chile tiene que tener al menos 1. Todos los paises tienen que pertenecer al jugador. Despues de implementado el reagrupamiento, Brasil quedara con 1 ejercito mas, Uruguay con 2 mas, Argentina con 2 menos (salen 3, entra 1) y Chile con 1 menos.""" reagrupamientos = [] restricciones = {} pais_origen = True while pais_origen: pais_origen = self.pedir_pais_propio(tablero, "%s esta reagrupando. Seleccionar pais de origen." % self) while pais_origen and not tablero.ejercitos_pais(pais_origen) > 1: pais_origen = self.pedir_pais_propio(tablero, "%s esta reagrupando. Seleccionar pais de origen." % self) if pais_origen: ejercitos_posibles = tablero.ejercitos_pais(pais_origen) if restricciones.has_key(pais_origen): # Si esta en restricciones es porque se hizo un reagrupamiento previo, al pais elegido. ejercitos_posibles -= restricciones[pais_origen] if ejercitos_posibles == 1: continue # Si es 1 ya no puede mover mas ejercitos desde ese pais. cantidad_a_mover = Interfaz.elegir(self, 'Cuantos ejercitos se desplazan de %s?' % pais_origen, range(1, ejercitos_posibles)) pais_destino = self.pedir_pais_propio(tablero, '%s esta reagrupando. Seleccionar pais de destino.' % self) while pais_destino and not tablero.es_limitrofe(pais_origen, pais_destino): pais_destino = self.pedir_pais_propio(tablero, '%s esta reagrupando. Seleccionar pais de destino.' % self) if not pais_destino: continue cantidad_a_poner = cantidad_a_mover cantidad_a_sacar = cantidad_a_mover if restricciones.has_key(pais_origen): cantidad_a_sacar += restricciones[pais_origen] if restricciones.has_key(pais_destino): cantidad_a_poner += restricciones[pais_destino] restricciones[pais_origen] = restricciones.get(pais_origen, 0) + cantidad_a_mover reagrupamientos.append((pais_origen, pais_destino, cantidad_a_mover)) tablero.actualizar_interfaz({pais_origen: - cantidad_a_sacar, pais_destino: cantidad_a_poner}) return reagrupamientos
def realizar_fase_ataque(self, jugador): """Implementa la fase de ataque de un jugador. Sucesivamente hace combatir a los paises seleccionados. Devuelve el numero de paises conquistados.""" Interfaz.setear_titulo('%s ataca' % jugador) Interfaz.alertar(jugador, '%s ataca' % jugador) paises_ganados = 0 while True: ataque = jugador.atacar(self.tablero) if not ataque: break atacante, atacado = ataque assert (self.tablero.es_limitrofe(atacante, atacado)) assert (self.tablero.ejercitos_pais(atacante) > 1) self.dados.lanzar_dados(self.tablero.ejercitos_pais(atacante), self.tablero.ejercitos_pais(atacado)) self.tablero.asignar_ejercitos(atacante, -self.dados.ejercitos_perdidos_atacante()) self.tablero.asignar_ejercitos(atacado, -self.dados.ejercitos_perdidos_atacado()) Interfaz.setear_titulo('%s: -%d, %s: -%d %s' % ( atacante, self.dados.ejercitos_perdidos_atacante(), atacado, self.dados.ejercitos_perdidos_atacado(), self.dados)) if self.tablero.ejercitos_pais(atacado) == 0: paises_ganados += 1 mover = Interfaz.elegir(jugador, 'Cuantos ejercitos se desplazan a %s?' % atacado, range(1, min(self.tablero.ejercitos_pais(atacante) - 1, 3) + 1)) self.tablero.asignar_ejercitos(atacante, -mover) self.tablero.ocupar_pais(atacado, jugador.color, mover) self.tablero.actualizar_interfaz(self.tablero.paises) else: self.tablero.actualizar_interfaz(self.tablero.paises) time.sleep(5) return paises_ganados
def sumar_ejercito(self,opciones_paises): pais = Interfaz.elegir('Agregar Ejercito','Seleccione el pais, para agregar tropas',opciones_paises) if self.ejercitos_paises.has_key(pais): self.ejercitos_paises[pais]+=1 else: self.ejercitos_paises[pais]=1