def armar_torneo(equipos): raiz = Partido() tercero = Partido() semi = Listirijilla() for i in range(2): nuevo = Partido(padre=raiz) semi.append(nuevo) if raiz.hijo_izquierdo is None: raiz.hijo_izquierdo = nuevo tercero.hijo_izquierdo = nuevo # no es el padre else: raiz.hijo_derecho = nuevo tercero.hijo_derecho = nuevo # no es el padre cuartos = Listirijilla() for i in range(4): nuevo = Partido(padre=semi[i // 2]) cuartos.append(nuevo) padre = semi[i // 2] if padre.hijo_izquierdo is None: padre.hijo_izquierdo = nuevo else: padre.hijo_derecho = nuevo for i in range(8): nuevo = Partido(equipos[2 * i], equipos[(2 * i) + 1], cuartos[i // 2]) padre = cuartos[i // 2] if padre.hijo_izquierdo is None: padre.hijo_izquierdo = nuevo else: padre.hijo_derecho = nuevo return raiz, tercero
def buscar_partido(self, _id): if _id == 15: return self.t_c por_revisar = Listirijilla(self.nodo_raiz) while por_revisar: current = por_revisar.popleft() if current._id == _id: return current por_revisar.append(current.hijo_izquierdo) por_revisar.append(current.hijo_derecho)
def __init__(self): self.torneo = None self.grafo, jugadores = entregar_grafo() self.tu_equipo = Equipo(Listirijilla(), "Tu Equipo") self.equipos = self.cargar_equipos() equiposs = Listirijilla() for equipo in self.equipos: gui_repr = Listirijilla(equipo.nombre) gui_repr.append(equipo.esperanza) equiposs.append(gui_repr) # No cambiar esta línea self.gui = Window(self, jugadores, equiposs)
def consulta_fase(self, numero): self.gui.resetear_respuestas() if not numero.isdigit() or int(numero) not in range(1, 5): self.gui.agregar_respuesta("El número de fase debe ser un entero " "entre 1 y 4, donde 1 son los octavos " "de final y 4 la final") else: ganadores = Listirijilla() perdedores = Listirijilla() if int(numero) == 1: inicio = 1 final = 9 elif int(numero) == 2: inicio = 9 final = 13 elif int(numero) == 3: inicio = 13 final = 15 else: inicio = 16 final = 17 for _id in range(inicio, final): partido = self.torneo.buscar_partido(_id) ganadores.append(partido.ganador) if partido.equipo1.nombre == partido.ganador: perdedores.append(partido.equipo2.nombre) else: perdedores.append(partido.equipo1.nombre) info = "Perdieron en esta fase: " for equipo in perdedores: info += equipo + ", " info = info[:-2] + "\n" info += "Ganaron en esta fase: " for equipo in ganadores: info += equipo + ", " info = info[:-2] + "\n" self.gui.agregar_respuesta(info)
class Torneo: def __init__(self, equipos): self.nodo_raiz, t_c = self.armar_torneo(equipos) self.podio = Listirijilla() self.t_c = t_c # Tercero y cuarto def buscar_partido(self, _id): if _id == 15: return self.t_c por_revisar = Listirijilla(self.nodo_raiz) while por_revisar: current = por_revisar.popleft() if current._id == _id: return current por_revisar.append(current.hijo_izquierdo) por_revisar.append(current.hijo_derecho) def info_equipo(self, name="Tu Equipo"): por_revisar = Listirijilla(self.nodo_raiz) por_revisar.append(self.t_c) anotados = 0 recibidos = 0 faltas = Listirijilla() rojas = 0 amarillas = 0 eliminador = None mejor_fase = "octavos de final" existe_el_equipo = False while por_revisar: current = por_revisar.popleft() if current is None: continue por_revisar.append(current.hijo_derecho) por_revisar.append(current.hijo_izquierdo) if current.equipo1 == name: anotados += current.goles1 recibidos += current.goles2 amarillas += current.amarillas_eq1 rojas += current.rojas_eq1 for falta in current.faltas_eq1: faltas.append(falta) if not current.ganador == name: eliminador = current.ganador if current._id in range(9, 13): mejor_fase = "cuartos de final" elif current._id in range(13, 16): mejor_fase = "semi final" else: mejor_fase = "final" existe_el_equipo = True elif current.equipo2 == name: anotados += current.goles2 recibidos += current.goles1 amarillas += current.amarillas_eq2 rojas += current.rojas_eq2 for falta in current.faltas_eq2: faltas.append(falta) if not current.ganador == name: eliminador = current.ganador if current._id in range(9, 13): mejor_fase = "cuartos de final" elif current._id in range(13, 16): mejor_fase = "semi final" else: mejor_fase = "final" existe_el_equipo = True if self.nodo_raiz.ganador == name: existe_el_equipo = True eliminador = "Nadie" mejor_fase = "final" if not existe_el_equipo: return False info = Listirijilla(mejor_fase) info.append(eliminador) info.append(anotados) info.append(recibidos) info.append(faltas) info.append(rojas) info.append(amarillas) return info @staticmethod def armar_torneo(equipos): raiz = Partido() tercero = Partido() semi = Listirijilla() for i in range(2): nuevo = Partido(padre=raiz) semi.append(nuevo) if raiz.hijo_izquierdo is None: raiz.hijo_izquierdo = nuevo tercero.hijo_izquierdo = nuevo # no es el padre else: raiz.hijo_derecho = nuevo tercero.hijo_derecho = nuevo # no es el padre cuartos = Listirijilla() for i in range(4): nuevo = Partido(padre=semi[i // 2]) cuartos.append(nuevo) padre = semi[i // 2] if padre.hijo_izquierdo is None: padre.hijo_izquierdo = nuevo else: padre.hijo_derecho = nuevo for i in range(8): nuevo = Partido(equipos[2 * i], equipos[(2 * i) + 1], cuartos[i // 2]) padre = cuartos[i // 2] if padre.hijo_izquierdo is None: padre.hijo_izquierdo = nuevo else: padre.hijo_derecho = nuevo return raiz, tercero def simular_torneo(self): for id_partido in range(1, 13): partido = self.buscar_partido(id_partido) ganador, perdedor = partido.jugar_partido() if partido.padre.equipo1 is None: partido.padre.equipo1 = ganador else: partido.padre.equipo2 = ganador for id_partido in range(13, 15): partido = self.buscar_partido(id_partido) ganador, perdedor = partido.jugar_partido() if partido.padre.equipo1 is None: partido.padre.equipo1 = ganador t_c = self.buscar_partido(15) t_c.equipo1 = perdedor else: partido.padre.equipo2 = ganador t_c = self.buscar_partido(15) t_c.equipo2 = perdedor t_c = self.buscar_partido(15) # tercero y cuarto p_s = self.buscar_partido(16) # primero y segundo tercero, cuarto = t_c.jugar_partido() primero, segundo = p_s.jugar_partido() self.podio.append(primero.nombre) self.podio.append(segundo.nombre) self.podio.append(tercero.nombre) def __repr__(self): return "Torneo_type"
class Partido: _id = 16 def __init__(self, equipo1=None, equipo2=None, padre=None): self._id = Partido._id Partido._id -= 1 if Partido._id == 0: Partido._id = 16 self.equipo1 = equipo1 self.equipo2 = equipo2 self.padre = padre self.hijo_izquierdo = None self.hijo_derecho = None self.amarillas_eq1 = Listirijilla() self.amarillas_eq2 = Listirijilla() self.faltas_eq1 = 0 self.rojas_eq1 = Listirijilla() self.rojas_eq2 = Listirijilla() self.faltas_eq2 = 0 self.goles1 = 0 self.goles2 = 0 self.ganador = None def jugar_partido(self): position = 0 for jugador in self.equipo1.jugadores: prob = 5 for afinidad in self.equipo1.matriz_afinidades[position]: if afinidad < 0.8: prob += 2 position += 1 if fu.probabilidad(prob): self.faltas_eq1 += 1 if fu.probabilidad(20): self.amarillas_eq1.append(jugador.nombre) if fu.probabilidad(5): self.rojas_eq1.append(jugador.nombre) position = 0 for jugador in self.equipo2.jugadores: prob = 5 for afinidad in self.equipo2.matriz_afinidades[position]: if afinidad < 0.8: prob += 2 position += 1 if fu.probabilidad(prob): self.faltas_eq2 += 1 if fu.probabilidad(20): self.amarillas_eq2.append(jugador.nombre) if fu.probabilidad(5): self.rojas_eq2.append(jugador.nombre) esperanza1 = self.equipo1.esperanza * (1 - (self.faltas_eq1 / 100)) esperanza2 = self.equipo2.esperanza * (1 - (self.faltas_eq2 / 100)) self.goles1 = ((esperanza1 / 40)**2) // 1 self.goles2 = ((esperanza2 / 40)**2) // 1 if self.goles1 > self.goles2: ganador = self.equipo1 perdedor = self.equipo2 elif self.goles1 < self.goles2: ganador = self.equipo2 perdedor = self.equipo1 else: if esperanza1 > esperanza2: if fu.probabilidad(80): ganador = self.equipo1 perdedor = self.equipo2 else: ganador = self.equipo2 perdedor = self.equipo1 else: if fu.probabilidad(20): ganador = self.equipo1 perdedor = self.equipo2 else: ganador = self.equipo2 perdedor = self.equipo1 self.ganador = ganador.nombre return ganador, perdedor def __repr__(self): try: padre = self.padre._id except AttributeError: padre = None return "ID: {}, Padre: {}, Equipo 1: {}, Equipo 2: {}"\ .format(self._id, padre, self.equipo1, self.equipo2)
def info_equipo(self, name="Tu Equipo"): por_revisar = Listirijilla(self.nodo_raiz) por_revisar.append(self.t_c) anotados = 0 recibidos = 0 faltas = Listirijilla() rojas = 0 amarillas = 0 eliminador = None mejor_fase = "octavos de final" existe_el_equipo = False while por_revisar: current = por_revisar.popleft() if current is None: continue por_revisar.append(current.hijo_derecho) por_revisar.append(current.hijo_izquierdo) if current.equipo1 == name: anotados += current.goles1 recibidos += current.goles2 amarillas += current.amarillas_eq1 rojas += current.rojas_eq1 for falta in current.faltas_eq1: faltas.append(falta) if not current.ganador == name: eliminador = current.ganador if current._id in range(9, 13): mejor_fase = "cuartos de final" elif current._id in range(13, 16): mejor_fase = "semi final" else: mejor_fase = "final" existe_el_equipo = True elif current.equipo2 == name: anotados += current.goles2 recibidos += current.goles1 amarillas += current.amarillas_eq2 rojas += current.rojas_eq2 for falta in current.faltas_eq2: faltas.append(falta) if not current.ganador == name: eliminador = current.ganador if current._id in range(9, 13): mejor_fase = "cuartos de final" elif current._id in range(13, 16): mejor_fase = "semi final" else: mejor_fase = "final" existe_el_equipo = True if self.nodo_raiz.ganador == name: existe_el_equipo = True eliminador = "Nadie" mejor_fase = "final" if not existe_el_equipo: return False info = Listirijilla(mejor_fase) info.append(eliminador) info.append(anotados) info.append(recibidos) info.append(faltas) info.append(rojas) info.append(amarillas) return info
def afinidad_equipo(self, jugadores): # como no existe un patrón de relaciones es más eficiente definir # las relaciones de a una arquero = Listirijilla() defensa1 = Listirijilla() defensa2 = Listirijilla() defensa3 = Listirijilla() defensa4 = Listirijilla() medio1 = Listirijilla() medio2 = Listirijilla() medio3 = Listirijilla() medio4 = Listirijilla() delantero1 = Listirijilla() delantero2 = Listirijilla() af = self.grafo.afinidad(jugadores[0], jugadores[2]) arquero.append(af) defensa2.append(af) af = self.grafo.afinidad(jugadores[0], jugadores[3]) arquero.append(af) defensa3.append(af) af = self.grafo.afinidad(jugadores[1], jugadores[2]) defensa1.append(af) defensa2.append(af) af = self.grafo.afinidad(jugadores[1], jugadores[5]) defensa1.append(af) medio1.append(af) af = self.grafo.afinidad(jugadores[2], jugadores[3]) defensa2.append(af) defensa3.append(af) af = self.grafo.afinidad(jugadores[2], jugadores[6]) defensa2.append(af) medio2.append(af) af = self.grafo.afinidad(jugadores[3], jugadores[4]) defensa4.append(af) defensa3.append(af) af = self.grafo.afinidad(jugadores[3], jugadores[7]) defensa3.append(af) medio3.append(af) af = self.grafo.afinidad(jugadores[4], jugadores[8]) defensa4.append(af) medio4.append(af) af = self.grafo.afinidad(jugadores[5], jugadores[6]) medio1.append(af) medio2.append(af) af = self.grafo.afinidad(jugadores[5], jugadores[9]) medio1.append(af) delantero1.append(af) af = self.grafo.afinidad(jugadores[6], jugadores[7]) medio3.append(af) medio2.append(af) af = self.grafo.afinidad(jugadores[6], jugadores[9]) medio2.append(af) delantero1.append(af) af = self.grafo.afinidad(jugadores[7], jugadores[8]) medio3.append(af) medio4.append(af) af = self.grafo.afinidad(jugadores[7], jugadores[10]) medio3.append(af) delantero2.append(af) af = self.grafo.afinidad(jugadores[8], jugadores[10]) delantero2.append(af) medio4.append(af) af = self.grafo.afinidad(jugadores[9], jugadores[10]) delantero1.append(af) delantero2.append(af) matriz = Listirijilla(arquero) matriz.append(defensa1) matriz.append(defensa2) matriz.append(defensa3) matriz.append(defensa4) matriz.append(medio1) matriz.append(medio2) matriz.append(medio3) matriz.append(medio4) matriz.append(delantero1) matriz.append(delantero2) return matriz
def cargar_equipos(self): equipos = Listirijilla() # podria utilizar un for i in range(16), y llamarlos equipo i # con un {}.format, pero es muy fome =D nombres_equipos = Listirijilla() nombres_equipos.append('Super Campeones') nombres_equipos.append('Tatitas FC') nombres_equipos.append('Real Madrazo') nombres_equipos.append('Scooby doo papa') nombres_equipos.append('Alumbrados FC') nombres_equipos.append('Ratones FC') nombres_equipos.append('Laucheros FC') nombres_equipos.append('Coca Juniors') nombres_equipos.append('Dream Team') nombres_equipos.append('Error 404 legs not found') nombres_equipos.append('Con la mente en el juego FC') nombres_equipos.append('Gryffindor') nombres_equipos.append('Hufflepuff') nombres_equipos.append('Ravenclaw') nombres_equipos.append('Slytherin') positions = Listirijilla() for nombre in nombres_equipos: jugadores = Listirijilla() for i in range(11): n = random.randint(0, 200) while n in positions: n = random.randint(0, 200) positions.append(n) jugadores.append(self.grafo.jugadores[n]) equipo = Equipo(jugadores, nombre) equipo.matriz_afinidades = self.afinidad_equipo(jugadores) equipos.append(equipo) return equipos