示例#1
0
    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 __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)
示例#3
0
 def afinidad(self, j1, j2, visitados=Listirijilla(),
              afinidades=Listirijilla()):
     if j1 == j2:
         raise SamePlayerError
     if j1.grado_uno(j2):
         return j1.relacion(j2)
     visitados.append(j1)
     if len(visitados) > 5:
         return False
     for _id in j1.conecciones:
         player = self.buscar_jugador(_id)
         if player not in visitados:
             afinidad = j1.relacion(player)
             auxiliar_af = self.afinidad(player, j2, visitados)
             if not auxiliar_af:
                 continue
             afinidad += auxiliar_af - 1
             afinidades.append(afinidad)
     return max(afinidades)
示例#4
0
 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 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)
示例#6
0
 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
示例#7
0
 def __init__(self, equipos):
     self.nodo_raiz, t_c = self.armar_torneo(equipos)
     self.podio = Listirijilla()
     self.t_c = t_c  # Tercero y cuarto
示例#8
0
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"
示例#9
0
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)
示例#10
0
 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