def juego_usuario_sin_levantar_acumulado(partida,ronda,mazo,pozo): """ Recibe la partida, la ronda, el mazo y el pozo. Desarrolla el turno del usuario en el caso que no haya un levantar acumulado. """ mensaje = "\nIngrese la posición de la carta que quiere jugar (0 para levantar): " pos_carta = partida.pedir_carta(mensaje) if pos_carta == -1: try: ronda.jugador_actual().levantar_carta(mazo) except ValueError: mazo,pozo = modulo_rellenar_mazo.rellenar_mazo(mazo,pozo) print("Se acabaron las cartas del mazo y se rellenaron con las del pozo") ronda.jugador_actual().levantar_carta(mazo) print("\n" + str(ronda.jugador_actual())) mensaje = "\nIngrese la posición de la carta que quiere jugar (0 para pasar): " pos_carta = partida.pedir_carta(mensaje) if pos_carta != -1: partida.asignar_carta_jugada(ronda.jugador_actual().tirar_carta(pos_carta,pozo)) print("Tiraste la carta {}".format(partida.consultar_carta_jugada())) #Casos que el sea una carta que acumula robos if partida.consultar_carta_jugada().valor_carta() == ESP_X2: partida.asignar_levantar_acumulado(partida.consultar_levantar_acumulado()+2) elif partida.consultar_carta_jugada().valor_carta() == ESP_X4: partida.asignar_levantar_acumulado(partida.consultar_levantar_acumulado()+4) #El color actual sera None si es una carta x4 o cambio de color elif partida.consultar_carta_jugada().valor_carta() == ESP_CAMBIO_SENTIDO: ronda.cambiar_sentido() print("El sentido de la ronda ahora es ",end = "") if ronda.sentido_es_horario(): print("horario") else: print("antihorario") elif partida.consultar_carta_jugada().valor_carta() == ESP_SALTEO: partida.asignar_estado_saltear(True) elif partida.consultar_carta_jugada().valor_carta() == ESP_NUEVA_FUNCIONALIDAD: partida.x2_a_todos() partida.asignar_color_actual(partida.consultar_carta_jugada().color_carta())
def ia_jugar_carta(self, mazo, pozo, levantar_acumulado, color_actual): """ Recibe el mazo, el pozo, el acumulado para levantar cartas y el color de la última carta, y devuelve una carta tirada, o None si no hubo ninguna opcion correcta para tirar """ if levantar_acumulado > 0: for pos_actual in range(self.cant_cartas()): if self.ver_carta(pos_actual).valor_carta() in (ESP_X2, ESP_X4): return (self.tirar_carta(pos_actual, pozo)) return None else: for pos_actual in range(len(self.cartas)): if self.puedo_tirar(pos_actual, pozo.ver_tope(), color_actual): return (self.tirar_carta(pos_actual, pozo)) try: self.levantar_carta(mazo) except ValueError: mazo, pozo = modulo_rellenar_mazo.rellenar_mazo(mazo, pozo) print( "Se acabaron las cartas del mazo y se rellenaron con las del pozo" ) self.levantar_carta(mazo) if self.puedo_tirar(self.cant_cartas() - 1, pozo.ver_tope(), color_actual): return self.tirar_carta(self.cant_cartas() - 1, pozo) else: return None
def x2_a_todos(self): """Agrega dos cartas a las manos de todos los jugadores excepto el que tira la carta.""" cartas_a_levantar = 2 print("\nTodos levantan dos cartas menos {}".format( self.ronda.jugador_actual().nombre_jugador())) for i in range(len(self.ronda) - 1): self.ronda.jugador_siguiente() for i in range(cartas_a_levantar): try: self.ronda.jugador_actual().levantar_carta(self.mazo) except ValueError: self.mazo, self.pozo = modulo_rellenar_mazo.rellenar_mazo( self.mazo, self.pozo) print( "Se acabaron las cartas del mazo y se rellenaron con las del pozo" ) self.ronda.jugador_actual().levantar_carta(self.mazo) print("El jugador {} agarró 2 cartas".format( self.ronda.jugador_actual().nombre_jugador())) self.ronda.jugador_siguiente()
def juego_pc(partida,ronda,mazo,pozo): """ Recibe la partida, la ronda, el mazo y el pozo. Desarrolla el turno de la pc. """ nombre_jugador_actual = ronda.jugador_actual().nombre_jugador() print("\nTurno del jugador {}".format(nombre_jugador_actual)) partida.asignar_carta_jugada(ronda.jugador_actual().ia_jugar_carta(mazo,pozo,partida.consultar_levantar_acumulado(),partida.consultar_color_actual())) if not(partida.consultar_carta_jugada() is None): print("El jugador {} jugo la carta {}".format(nombre_jugador_actual, partida.consultar_carta_jugada())) if partida.consultar_carta_jugada().valor_carta() == ESP_X2: partida.asignar_levantar_acumulado(partida.consultar_levantar_acumulado()+2) elif partida.consultar_carta_jugada().valor_carta() == ESP_X4: partida.asignar_levantar_acumulado(partida.consultar_levantar_acumulado()+4) elif partida.consultar_carta_jugada().valor_carta() == ESP_CAMBIO_SENTIDO: ronda.cambiar_sentido() print("\nEl sentido de la ronda ahora es ",end = "") if ronda.sentido_es_horario(): print("horario") else: print("antihorario") elif partida.consultar_carta_jugada().valor_carta() == ESP_SALTEO: partida.asignar_estado_saltear(True) elif partida.consultar_carta_jugada().valor_carta() == ESP_NUEVA_FUNCIONALIDAD: partida.x2_a_todos() #El color actual sera None si es una carta x4 o cambio de color partida.asignar_color_actual(partida.consultar_carta_jugada().color_carta()) else: if partida.consultar_levantar_acumulado() > 0: for i in range(partida.consultar_levantar_acumulado()): try: ronda.jugador_actual().levantar_carta(mazo) except ValueError: mazo,pozo = modulo_rellenar_mazo.rellenar_mazo(mazo,pozo) print("Se acabaron las cartas del mazo y se rellenaron con las del pozo") ronda.jugador_actual().levantar_carta(mazo) print("El jugador {} levanto {} cartas.".format(nombre_jugador_actual, partida.consultar_levantar_acumulado())) partida.asignar_levantar_acumulado(0) else: print("El jugador {} agarró una carta y pasó el turno".format(nombre_jugador_actual)) print("Le quedan {} cartas".format(ronda.jugador_actual().cant_cartas()))
def juego_usuario_con_levantar_acumulado(partida,ronda,mazo,pozo): """ Recibe la partida, la ronda, el mazo y el pozo. Desarrolla el turno del usuario en el caso que haya un levantar acumulado mayor que 0. """ mensaje = "\nHay un acumulado de {} cartas para robar. Escoje una carta x2 o x4, o ingresa otra opcion para perder el turno y levantar las cartas.".format(partida.consultar_levantar_acumulado()) pos_carta = partida.pedir_carta(mensaje) if ronda.jugador_actual().ver_carta(pos_carta).valor_carta() == ESP_X2: partida.asignar_levantar_acumulado(partida.consultar_levantar_acumulado()+2) partida.asignar_carta_jugada(ronda.jugador_actual().tirar_carta(pos_carta,pozo)) partida.asignar_color_actual(partida.consultar_carta_jugada().color_carta()) print("Tiraste la carta {}".format(partida.consultar_carta_jugada())) elif ronda.jugador_actual().ver_carta(pos_carta).valor_carta() == ESP_X4: partida.asignar_levantar_acumulado(partida.consultar_levantar_acumulado()+4) partida.asignar_carta_jugada(ronda.jugador_actual().tirar_carta(pos_carta,pozo)) partida.asignar_color_actual(partida.determinar_nuevo_color()) print("Tiraste la carta {}".format(partida.consultar_carta_jugada())) else: for i in range(partida.consultar_levantar_acumulado()): try: ronda.jugador_actual().levantar_carta(mazo) except ValueError: mazo,pozo = modulo_rellenar_mazo.rellenar_mazo(mazo,pozo) print("Se acabaron las cartas del mazo y se rellenaron con las del pozo") ronda.jugador_actual().levantar_carta(mazo) print("Levantaste {} cartas".format(partida.consultar_levantar_acumulado())) partida.asignar_levantar_acumulado(0)