Gacha écrit en Python-Data design-

Contenu

Considérez la conception des données de Gacha.

Éléments de données requis pour gacha

Jusqu'à présent, nous n'avons pratiqué que la ** ID ** et la ** valeur de poids ** en tant que données gacha.

#ID d'article et dictionnaire de poids pour la loterie
item_dic = {"id_1":1,"id_2":5,"id_3":14,"id_4":30,"id_5":50}

Je vais énumérer les éléments nécessaires pour faire réellement un gacha.

Le tableau est le suivant gacha_items

id weight rarity item_name
1 1 5 UR_HOGE
2 1 5 UR_FUGA
3 9 4 SSR_HOGE
4 9 4 SSR_FUGA
5 20 3 SR_HOGE
6 20 3 SR_FUGA
7 30 2 R_HOGE
8 30 2 R_FUGA
9 40 1 N_HOGE
10 40 1 N_FUGA

Le tableau de correspondance entre la rareté et son nom est le suivant. ratiry_names

id rarity_name
5 UR
4 SSR
3 SR
2 R
1 N
gacha_items = {
    1: {"weight":1, "rarity":5, "item_name":"UR_HOGE"},
    2: {"weight":1, "rarity":5, "item_name":"UR_FUGA"},
    3: {"weight":9, "rarity":4, "item_name":"SSR_HOGE"},
    4: {"weight":9, "rarity":4, "item_name":"SSR_FUGA"},
    5: {"weight":20,"rarity":3, "item_name":"SR_HOGE"},
    6: {"weight":20,"rarity":3, "item_name":"SR_FUGA"},
    7: {"weight":30,"rarity":2, "item_name":"R_HOGE"},
    8: {"weight":30,"rarity":2, "item_name":"R_FUGA"},
    9: {"weight":40,"rarity":1, "item_name":"N_HOGE"},
    10:{"weight":40,"rarity":1, "item_name":"N_FUGA"}
}

rarity_names = {5: "UR", 4: "SSR", 3: "SR", 2: "R", 1: "N"}

Description de chaque dictionnaire

--gacha_items contient des informations telles que les poids utilisant id comme clé --rarity_names contient des noms rares correspondant à la rareté (id)

Gacha avec une rareté supplémentaire

En prime, je vais créer un gacha qui peut être spécifié plus que la rareté. (J'utiliserai la source de @shiracamus)

gacha.py


import random

def gacha(gacha_items: dict, times: int=1) -> list:
    #Créez un dictionnaire des identifiants et des poids requis pour la loterie
    lots = {key: info["weight"] for key, info in gacha_items.items()}
    return random.choices(tuple(lots), weights=lots.values(), k=times)

def gacha_omake(gacha_items: dict, times: int, omake_rarity: int) -> list:
    #Créez un dictionnaire avec des restrictions de rareté pour les cibles bonus
    omake = {key: info for key, info in gacha_items.items() if info["rarity"] >= omake_rarity}
    ids = gacha(gacha_items, times)
    omake and ids.extend(gacha(omake))
    return ids

def main():
    #Informations sur l'article Gacha
    gacha_items = {
        1: {"weight": 1, "rarity": 5, "item_name": "UR_HOGE"},
        2: {"weight": 1, "rarity": 5, "item_name": "UR_FUGA"},
        3: {"weight": 9, "rarity": 4, "item_name": "SSR_HOGE"},
        4: {"weight": 9, "rarity": 4, "item_name": "SSR_FUGA"},
        5: {"weight": 20, "rarity": 3, "item_name": "SR_HOGE"},
        6: {"weight": 20, "rarity": 3, "item_name": "SR_FUGA"},
        7: {"weight": 30, "rarity": 2, "item_name": "R_HOGE"},
        8: {"weight": 30, "rarity": 2, "item_name": "R_FUGA"},
        9: {"weight": 40, "rarity": 1, "item_name": "N_HOGE"},
        10: {"weight": 40, "rarity": 1, "item_name": "N_FUGA"}
    }

    #Nom de rareté
    rarity_names = {5: "UR", 4: "SSR", 3: "SR", 2: "R", 1: "N"}

    #Nombre de loterie
    times = 10

    #Bonus de rareté (ou plus)
    omake_rarity = 3

    #Obtenez une liste d'identifiants par loterie
    ids = gacha_omake(gacha_items, times, omake_rarity)

    #Sortie de résultat
    for id in ids:
        print("ID:%d, %s, %s" % (id, rarity_names[gacha_items[id]["rarity"]], gacha_items[id]["item_name"]))

if __name__ == '__main__':
    main()

Résultat d'exécution

ID:8, R, R_FUGA
ID:7, R, R_HOGE
ID:5, SR, SR_HOGE
ID:5, SR, SR_HOGE
ID:5, SR, SR_HOGE
ID:3, SSR, SSR_HOGE
ID:5, SR, SR_HOGE
ID:10, N, N_FUGA
ID:5, SR, SR_HOGE
ID:9, N, N_HOGE
ID:5, SR, SR_HOGE

Considération

Considérons la différence par rapport à la dernière fois. (Gacha écrit en python-Rareté confirmée avec bonus-)

Les informations minimales requises pour gacha sont l'ID et la probabilité (poids), De plus, en ajoutant ces informations, nous avons pu obtenir un ** comportement ** et un ** résultat ** qui sont proches du gacha réel.

L'important est que la ** définition des données (conception des données) ** soit effectuée et la logique qui y correspond soit décrite afin de réaliser le traitement.

Le gacha lui-même est une logique simple. Cependant, dans les services réels, il est nécessaire de concevoir des données capables de gérer l'opération gacha, et il n'est pas exagéré de dire que la conception des données est tout. (En fait, ces données seront stockées dans la base de données pour le fonctionnement)

Recommended Posts

Gacha écrit en Python-Data design-
Gacha écrit en python-Practice 1-
Gacha écrit en Python -BOX Gacha-
Logique gacha simple écrite en Python
Gacha écrit en python-Rareté confirmée avec bonus-
Gacha écrit en python-Implémentation dans la structure de données de base-
Gacha écrit en python-Practice 2 ・ Bases du step-up gacha-
Gacha écrit en python-Practice 3 ・ Ajout de fonctions gacha step-up-
Gacha écrit en python - Ajout d'une fonction de réglage de période -
Modèles de conception en Python: introduction
Cool Lisp écrit en Python: Hy
Programme de diagnostic de compatibilité écrit en python