Beispiel #1
0
def encode(cards):
    counts = {}
    for card in cards.split():
        if card in counts.keys():
            counts[card] += 1
        else:
            counts[card] = 1
    cards_with_counts = [str(counts[card]) + ":" + card for card in counts.keys()]
    deck = LoRDeck(cards_with_counts)
    return deck.encode()
Beispiel #2
0
    def test_buildFromCode(self):
        deck = get_dataframe()

        testDeck = deck['cardCode'].value_counts().to_dict()
        f = lambda key, value: str(value) + ':' + key

        cardList = []
        for key, value in zip(testDeck.keys(), testDeck.values()):
            cardList.append(f(key, value))

        testDeck = LoRDeck(cardList)
        code = testDeck.encode()
        testDataframe = buildFromCode(code)

        valid = deck['cardCode'].unique().tolist()
        test = testDataframe['cardCode'].unique().tolist()

        valid.sort()
        test.sort()

        for x, y in zip(valid, test):
            self.assertEqual(x, y)
Beispiel #3
0
        keywordDict[card["region"]] |= set(card["keywords"])

        masterDeck = [Card(c) for c in parsed]
        for i in range(len(masterDeck) + 1):
            card = random.choice(masterDeck)
            if basicCheck(card, myDeck, "Ionia"):
                myDeck.addCard(card, "Ionia")
            if basicCheck(card, myDeck, "Shadow Isles"):
                myDeck.addCard(card, "Shadow Isles")

#         for card in parsed:
#             keywordDict[card["region"]] = dict.fromkeys(keywordDict[card["region"]], 1)
#         for card in parsed:
#             for keyword in card["keywords"]:
#                 keywordDict[card["region"]][keyword] += 1
#
#         rString = ""
#         for region, data in keywordDict.items():
#             rString += f"{region}: "
#             for key, count in data.items():
#                 rString += f"{key}[{count}], "
#             rString = rString[:-2]
#             rString += "\n"
#     print(rString)
    print(myDeck)
    print(repr(myDeck))
    print(len(myDeck))
    print(myDeck.returnDeck())
    deckCode = LoRDeck(myDeck.returnDeck())
    print(deckCode.encode())
def exportCode(deck):
    col = deck['count'].apply(int).apply(str) + ':' + deck['cardCode']
    deck = LoRDeck(col.to_list())
    return deck.encode()
Beispiel #5
0
#                     successRate["Success"] += 1
#                 else:
#                     successRate["Failure"] += 1
#                 del userDeck
#             print(f"\nTesting finished with a { (successRate['Success']/(successRate['Success']+successRate['Failure']))*100 }% Success rate.")
#             if ((successRate['Success']/(successRate['Success']+successRate['Failure']))*100) == 0 and numPulls >= 6:
#                 print("\n\t This deck probably chose genres that are impossible to go together.")
#             userInput = input("\t Would you like to try again with the same genres? (y/n)\n")
#     except MemoryError:
#         print("Sorry that's too much.")

with open("deckCodes.txt", "w") as outfile:
    successRate = defaultdict(int)
    genres = randomGenreList(GENRES)
    for i in range(10):
        print(f"\n DECK {i+1}\n")
        if basicCheck not in genres: genres.append(basicCheck)
        randomDeck = Deck(random.choice(REGIONS), random.choice(REGIONS),
                          *genres)
        if randomDeck.fillDeck():
            randomDeck.printDeckInfo()
            rCode = LoRDeck(randomDeck.returnDeck())
            print(rCode.encode() + "\n")
            successRate["Success"] += 1
        else:
            successRate["Failure"] += 1
        del randomDeck
    print(
        f"\nTesting finished with a { (successRate['Success']/(successRate['Success']+successRate['Failure']))*100 }% Success rate."
    )
Beispiel #6
0
                
                #o numero de cartas no deck não pode ser maior do que 40 e o numero de campeoes nao pode ser maior que 6
                if contador > 41 or contadordeCampeos > 6:
                    contador -= numeroDeCartas

                #esse laço continua ate completar o deck com 40 cartas
                elif contador <= 41:
                    if listaCarta[pos][2] == 'Champion':
                        imagemCampeoes[str(listaCarta[pos][5]) + str(listaCarta[pos][0])] = (listaCarta[pos][6])
                    elif listaCarta[pos][2] != 'Champion' and listaCarta[pos][4] == 'Unit':
                        imagemUnidades[str(listaCarta[pos][5]) + str(listaCarta[pos][0])] = (listaCarta[pos][6])
                    elif listaCarta[pos][2] != 'Champion' and listaCarta[pos][4] == 'Spell':
                        imagemFeiticos[str(listaCarta[pos][5]) + str(listaCarta[pos][0])] = (listaCarta[pos][6])
                    listaDeck.append(listaCarta[pos][0])
                    cartaENumDeCartas = str(numeroDeCartas) + ':' + str(listaCarta[pos][3])
                    novodeck.append(cartaENumDeCartas)

        deck = LoRDeck(novodeck[:len(novodeck)])
        result = str(deck.encode())   

        str_error = None
    except Exception:
        pass

a = []
for key in sorted(imagemUnidades):
        a.append(imagemUnidades[key])

print(result)
        
        
Beispiel #7
0
    def testingScript(printBool: bool):
        success, failure = 0, 0

        if printBool:
            print(
                "\n\t\t/+/=====================================================[ Specific Test (Shadow Isles/ Ionia) ]=====================================================\+\ \n"
            )
        # Test a deck with specifications
        genres = [basicCheck, KBM("Ephemeral", 3), firstRegionBias]
        myDeck = Deck("Shadow Isles", "Ionia", *genres)
        if myDeck.fillDeck():
            if printBool: myDeck.printDeckInfo()
            success += 1
        else:
            failure += 1
        print()
        rCode = LoRDeck(myDeck.returnDeck())
        print(rCode.encode())
        del myDeck
        if printBool:
            print(
                "\n\t\t/+/=====================================================[ Mix Test (Demacia, Freljord) ]=====================================================\+\ \n"
            )
        # Test the MIX genre
        genres = [basicCheck, MIX(CBM(4, 5), NKBM("Frostbite", 6))]
        myDeck = Deck("Freljord", "Freljord", *genres)
        myDeck.cardOverride("She Who Wanders", 2)
        myDeck.cardOverride("Tryndamere", 2)
        myDeck.cardOverride("Braum", 2)
        myDeck.cardOverride("Ashe", 2)
        if myDeck.fillDeck():
            if printBool: myDeck.printDeckInfo()
            success += 1
        else:
            failure += 1
        print()
        rCode = LoRDeck(myDeck.returnDeck())
        print(rCode.encode())
        del myDeck
        if printBool:
            print(
                "\n\t\t/+/=====================================================[ Partial Import Test (Shadow Isles, Ionia) ]=====================================================\+\ \n"
            )
        # Test a deck from an unfinished deck code
        genres = [basicCheck, CBM(4, 5)]
        myDeck = fromUnfinishedDeck("CEAQCAIFGUAQCAICBEAA", genres)
        if myDeck.fillDeck():
            if printBool: myDeck.printDeckInfo()
            success += 1
        else:
            failure += 1
        print()
        rCode = LoRDeck(myDeck.returnDeck())
        print(rCode.encode())
        del myDeck
        if printBool:
            print(
                "\n\t\t/+/=====================================================[ All Random Test ]=====================================================\+\ \n"
            )
        # Test a deck with no specifications, filled in by randomness
        genres = randomGenreList(GENRES)
        if basicCheck not in genres: genres.append(basicCheck)
        randomDeck = Deck(random.choice(REGIONS), random.choice(REGIONS),
                          *genres)
        if randomDeck.fillDeck():
            if printBool: randomDeck.printDeckInfo()
            success += 1
        else:
            failure += 1
        print()
        rCode = LoRDeck(randomDeck.returnDeck())
        print(rCode.encode())
        del randomDeck
        return success, failure
Beispiel #8
0
        print(rCode.encode())
        del randomDeck
        return success, failure

#     successRate = defaultdict(int)
#     for tests in range(10):
#         k,v = testingScript(True)
#         successRate["Success"] += k
#         successRate["Failure"] += v
#     print(f"\nTesting finished with a { (successRate['Success']/(successRate['Success']+successRate['Failure']))*100 }% Success rate.")

    savepath = Path(os.getcwd()[:-7] +
                    "/src/main/resources/") / "deckCodes.txt"
    with open(os.path.join(os.path.expanduser('~'), savepath), "w") as outfile:
        successRate = defaultdict(int)
        genres = randomGenreList(GENRES)
        for i in range(10):
            if basicCheck not in genres: genres.append(basicCheck)
            randomDeck = Deck(random.choice(REGIONS), random.choice(REGIONS),
                              *genres)
            if randomDeck.fillDeck():
                rCode = LoRDeck(randomDeck.returnDeck())
                outfile.write(rCode.encode() + "\n")
                successRate["Success"] += 1
            else:
                successRate["Failure"] += 1
            del randomDeck
        print(
            f"\nTesting finished with a { (successRate['Success']/(successRate['Success']+successRate['Failure']))*100 }% Success rate."
        )
Beispiel #9
0
def AllRandom(request):
    for x in range(8):
        try:
            with open('cartas.csv') as csv_file:
                listaCarta = list(csv.reader(csv_file))
            #aqui está a lógica que vai criar um deck aleatorio com 40 cartas
            #iniciando listas e contadores
            listaDeck = []
            novodeck = []
            #imagem dos Campeoes
            a = {}
            #imagem dos Feiticos
            b = {}
            #imagem das Unidades
            c = {}
            copias = []
            contador = 1
            contadordeCampeos = 0
            cor = [
                'Freljord', 'Demacia', 'Ionia', 'ShadowIsles', 'PiltoverZaun',
                'Noxus', 'Targon', 'Shurima', 'Vazio'
            ]
            #escolhe 2 regiões aleatoriamentes, tem uma chance de escolher apenas uma região
            escolhaCor = random.choices(cor, k=2)

            #loop que escolhe uma carta aleatoria, há restrições nas escolhas
            while contador < 41:

                #escolhe uma carta aleatoria
                pos = random.randint(1, len(listaCarta))

                #a carta deve pertencer à alguma das regiões escolhidas anteriormente e deve ser colecionável
                if listaCarta[pos][2] != 'None' and (
                        listaCarta[pos][1] == escolhaCor[0]
                        or listaCarta[pos][1] == escolhaCor[1]):
                    #escolhe um valor entre 1 e 3, esse valor vai ser a quantidade de cópias da carta escolhida
                    numeroDeCartas = random.randint(1, 3)
                    contador += numeroDeCartas
                    #o numero maximo de campeoes é 6
                    if listaCarta[pos][
                            2] == "Champion" and contadordeCampeos < 6:
                        contadordeCampeos = numeroDeCartas

                    #o numero de cartas no deck não pode ser maior do que 40 e o numero de campeoes nao pode ser maior que 6
                    if contador > 41 or contadordeCampeos > 6:
                        contador -= numeroDeCartas

                    #esse laço continua ate completar o deck com 40 cartas
                    elif contador <= 41:
                        if listaCarta[pos][2] == 'Champion':
                            a[str(listaCarta[pos][5]) +
                              str(listaCarta[pos][0])] = (listaCarta[pos][6])
                        elif listaCarta[pos][2] != 'Champion' and listaCarta[
                                pos][4] == 'Unit':
                            c[str(listaCarta[pos][5]) +
                              str(listaCarta[pos][0])] = (listaCarta[pos][6])
                        elif listaCarta[pos][2] != 'Champion' and listaCarta[
                                pos][4] == 'Spell':
                            b[str(listaCarta[pos][5]) +
                              str(listaCarta[pos][0])] = (listaCarta[pos][6])
                        cartaENumDeCartas = str(numeroDeCartas) + ':' + str(
                            listaCarta[pos][3])
                        for x in novodeck:
                            if x == cartaENumDeCartas:
                                novodeck.remove(x)
                        novodeck.append(cartaENumDeCartas)
            deck = LoRDeck(novodeck[:len(novodeck)])
            data = deck.encode()
            str_error = None
        except:
            pass

    # ordenar as cartas
    imagemCampeoes = []
    for key in sorted(a):
        imagemCampeoes.append(a[key])
    imagemFeiticos = []
    for key in sorted(b):
        imagemFeiticos.append(b[key])
    imagemUnidades = []
    for key in sorted(c):
        imagemUnidades.append(c[key])

    return render(
        request, 'AllRandom.html', {
            'data': data,
            'imagemCampeoes': imagemCampeoes,
            'imagemFeiticos': imagemFeiticos,
            'imagemUnidades': imagemUnidades,
            'copias': copias
        })
Beispiel #10
0
def Singleton(request):
    for x in range(8):
        try:
            with open('cartas.csv') as csv_file:
                listaCarta = list(csv.reader(csv_file))
            #aqui está a lógica que vai criar um deck aleatorio com 40 cartas
            #iniciando listas e contadores
            listaDeck = []
            novodeck = []
            #imagem dos Campeoes
            a = {}
            #imagem dos Feiticos
            b = {}
            #imagem das Unidades
            c = {}
            copias = []
            contador = 1
            contadordeCampeos = 0
            cor = [
                'Freljord', 'Demacia', 'Ionia', 'ShadowIsles', 'PiltoverZaun',
                'Noxus', 'Targon', 'Shurima', 'Vazio'
            ]
            #escolhe 2 regiões aleatoriamentes, tem uma chance de escolher apenas uma região
            escolhaCor = random.choices(cor, k=2)

            #loop que escolhe uma carta aleatoria, há restrições nas escolhas
            while contador < 41:

                #escolhe uma carta aleatoria
                pos = random.randint(1, len(listaCarta))
                for x in listaDeck:
                    if x == listaCarta[pos][0]:
                        pos = random.randint(1, len(listaCarta))
                #a carta deve pertencer à alguma das regiões escolhidas anteriormente e deve ser colecionável
                if listaCarta[pos][2] != 'None' and (
                        listaCarta[pos][1] == escolhaCor[0]
                        or listaCarta[pos][1] == escolhaCor[1]):
                    #escolhe 1 carta
                    numeroDeCartas = 1
                    contador += numeroDeCartas
                    #o numero maximo de campeoes é 6
                    if listaCarta[pos][
                            2] == "Champion" and contadordeCampeos <= 5:
                        contadordeCampeos = numeroDeCartas

                    #o numero de cartas no deck não pode ser maior do que 40 e o numero de campeoes nao pode ser maior que 6
                    if contador > 41 or contadordeCampeos > 6:
                        contador -= numeroDeCartas

                    #esse laço continua ate completar o deck com 40 cartas
                    elif contador <= 41:
                        if listaCarta[pos][2] == 'Champion':
                            a[str(listaCarta[pos][5]) +
                              str(listaCarta[pos][0])] = (listaCarta[pos][6])
                        elif listaCarta[pos][2] != 'Champion' and listaCarta[
                                pos][4] == 'Unit':
                            c[str(listaCarta[pos][5]) +
                              str(listaCarta[pos][0])] = (listaCarta[pos][6])
                        elif listaCarta[pos][2] != 'Champion' and listaCarta[
                                pos][4] == 'Spell':
                            b[str(listaCarta[pos][5]) +
                              str(listaCarta[pos][0])] = (listaCarta[pos][6])

                        listaDeck.append(listaCarta[pos][0])
                        cartaENumDeCartas = str(numeroDeCartas) + ':' + str(
                            listaCarta[pos][3])
                        copias.append(str(numeroDeCartas))
                        novodeck.append(cartaENumDeCartas)
                        #print(numeroDeCartas)
            if len(novodeck) == 40:
                deck = LoRDeck([
                    novodeck[0], novodeck[1], novodeck[2], novodeck[3],
                    novodeck[4], novodeck[5], novodeck[6], novodeck[7],
                    novodeck[8], novodeck[9], novodeck[10], novodeck[11],
                    novodeck[12], novodeck[13], novodeck[14], novodeck[15],
                    novodeck[16], novodeck[17], novodeck[18], novodeck[19],
                    novodeck[20], novodeck[21], novodeck[22], novodeck[23],
                    novodeck[24], novodeck[25], novodeck[26], novodeck[27],
                    novodeck[28], novodeck[29], novodeck[30], novodeck[31],
                    novodeck[32], novodeck[33], novodeck[34], novodeck[35],
                    novodeck[36], novodeck[37], novodeck[38], novodeck[39]
                ])
            #returns encoded string
            data = deck.encode()
            str_error = None
        except:
            pass

    # ordenar as cartas
    imagemCampeoes = []
    for key in sorted(a):
        imagemCampeoes.append(a[key])
    imagemFeiticos = []
    for key in sorted(b):
        imagemFeiticos.append(b[key])
    imagemUnidades = []
    for key in sorted(c):
        imagemUnidades.append(c[key])

    #print(contador)
    #print(novodeck)
    return render(
        request, 'Singleton.html', {
            'data': data,
            'imagemCampeoes': imagemCampeoes,
            'imagemFeiticos': imagemFeiticos,
            'imagemUnidades': imagemUnidades,
            'copias': copias
        })