Considérez la conception des données de 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)
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()
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é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