Conception de données Gacha (Structure de base 1, [Structure de base 2](https://qiita.com/saib-ryo/items/ Mettre en œuvre selon c1b7837fe04022b6864d)).
Amélioration du code source ici
gacha_lottery
id | gacha_group | item_type | times | rarity | omake_times | omake_rarity | cost |
---|---|---|---|---|---|---|---|
A_normal_1 | A | 0 | 1 | 0 | 0 | 0 | 10 |
A_normal_11 | A | 0 | 10 | 0 | 1 | 3 | 100 |
B_fighter_2 | B | 0 | 2 | 0 | 0 | 0 | 30 |
A_omake_2_11 | A | 0 | 9 | 2 | 2 | 3 | 200 |
A_omake_fighter_6 | A | 2 | 5 | 0 | 1 | 3 | 100 |
Puisqu'il sera positionné comme l'ID utilisé lors de l'exécution du gacha, faites-en un ID de chaîne de caractères concret et facile à comprendre.
gacha_items
id | gacha_group | weight | item_id |
---|---|---|---|
1 | A | 3 | 5101 |
2 | A | 9 | 4201 |
3 | A | 9 | 4301 |
4 | A | 9 | 4301 |
5 | A | 20 | 3201 |
6 | A | 20 | 3301 |
7 | A | 20 | 3401 |
8 | A | 40 | 2201 |
9 | A | 40 | 2301 |
10 | A | 40 | 2401 |
11 | B | 15 | 4201 |
12 | B | 30 | 3201 |
13 | B | 55 | 2201 |
items
id | rarity | item_name | item_type | HP |
---|---|---|---|---|
5101 | 5 | UR_Courageux | 1 | 1200 |
4201 | 4 | SSR_guerrier | 2 | 1000 |
4301 | 4 | SSR_sorcier | 3 | 800 |
4401 | 4 | SSR_Prêtre | 4 | 800 |
3201 | 3 | SR_guerrier | 2 | 600 |
3301 | 3 | SR_sorcier | 3 | 500 |
3401 | 3 | SR_Prêtre | 4 | 500 |
2201 | 2 | R_guerrier | 2 | 400 |
2301 | 2 | R_sorcier | 3 | 300 |
2401 | 2 | R_Prêtre | 4 | 300 |
3199 | 3 | SR_Courageux | 1 | 600 |
rarity
id | rarity_name |
---|---|
5 | UR |
4 | SSR |
3 | SR |
2 | R |
1 | N |
En tant que mécanisme gacha qui peut être réalisé avec la structure de données de Structure de base 2, les exigences suivantes seront satisfaites.
--Définir plusieurs éléments pour gacha en tant que groupe (population) --Réduction des attributs lors de l'exécution de gacha (item_type)
** Informations Gacha ** et ** éléments comme différences majeures par rapport à la structure de données de l'implémentation précédente (Gacha écrit en Python-Data design-) Les informations ** peuvent être isolées. Par conséquent, il est nécessaire de lier les informations.
gacha.py
import random
def gacha(lots, times: int=1) -> list:
return random.choices(tuple(lots), weights=lots.values(), k=times)
def get_rarity_name(rarity: int) -> str:
rarity_names = {5: "UR", 4: "SSR", 3: "SR", 2: "R", 1: "N"}
return rarity_names[rarity]
#Dictionnaire des identifiants et des paramètres Gacha
def get_gacha_lottery_info(gacha_lottery_id: str) -> dict:
gacha_lottery = {
"A_normal_1": {"gacha_group": "A", "item_type": 0, "times": 1, "rarity": 0, "omake_times": 0, "omake_rarity": 0, "cost":10},
"A_normal_11": {"gacha_group": "A", "item_type": 0, "times": 10, "rarity": 0, "omake_times": 1, "omake_rarity": 3, "cost":100},
"B_fighter_2": {"gacha_group": "B", "item_type": 0, "times": 2, "rarity": 0, "omake_times": 0, "omake_rarity": 0, "cost":30},
"A_omake_2_11": {"gacha_group": "A", "item_type": 0, "times": 9, "rarity": 2, "omake_times": 2, "omake_rarity": 3, "cost":200},
"A_omake_fighter_6": {"gacha_group": "A", "item_type": 2, "times": 5, "rarity": 0, "omake_times": 1, "omake_rarity": 3, "cost":100}
}
return gacha_lottery[gacha_lottery_id]
def set_gacha(items: dict, gacha_items: dict):
#Inclure les informations d'élément requises pour les paramètres gacha dans les informations d'élément gacha
dic_gacha_items = {}
for gacha_item_id, info in gacha_items.items():
info["item_info"] = items[info["item_id"]]
dic_gacha_items[gacha_item_id] = info
#Extraire la liste des cibles de loterie
def get_lots(lottery_info: dict):
lots = {}
omake_lots = {}
for id, info in dic_gacha_items.items():
if lottery_info["gacha_group"] != info["gacha_group"]:
continue
if lottery_info["item_type"] and lottery_info["item_type"] != info["item_info"]["item_type"]:
continue
if not(lottery_info["rarity"]) or lottery_info["rarity"] <= info["item_info"]["rarity"]:
lots[id] = info["weight"]
if lottery_info["omake_times"]:
if not(lottery_info["omake_rarity"]) or lottery_info["omake_rarity"] <= info["item_info"]["rarity"]:
omake_lots[id] = info["weight"]
return lots, omake_lots
#Exécution de Gacha
def exec(gacha_lottery_id: str) -> list:
lottery_info = get_gacha_lottery_info(gacha_lottery_id)
lots, omake_lots =get_lots(lottery_info)
ids = gacha(lots, lottery_info["times"])
if len(omake_lots) > 0:
ids.extend(gacha(omake_lots, lottery_info["omake_times"]))
return ids
return exec
def main():
#Informations sur l'élément
items = {
5101: {"rarity": 5, "item_name": "UR_Courageux", "item_type": 1, "hp": 1200},
4201: {"rarity": 4, "item_name": "SSR_guerrier", "item_type": 2, "hp": 1000},
4301: {"rarity": 4, "item_name": "SSR_sorcier", "item_type": 3, "hp": 800},
4401: {"rarity": 4, "item_name": "SSR_Prêtre", "item_type": 4, "hp": 800},
3201: {"rarity": 3, "item_name": "SR_guerrier", "item_type": 2, "hp": 600},
3301: {"rarity": 3, "item_name": "SR_sorcier", "item_type": 3, "hp": 500},
3401: {"rarity": 3, "item_name": "SR_Prêtre", "item_type": 4, "hp": 500},
2201: {"rarity": 2, "item_name": "R_guerrier", "item_type": 2, "hp": 400},
2301: {"rarity": 2, "item_name": "R_sorcier", "item_type": 3, "hp": 300},
2401: {"rarity": 2, "item_name": "R_Prêtre", "item_type": 4, "hp": 300},
3199: {"rarity": 3, "item_name": "SR_Courageux", "item_type": 1, "hp": 600}
}
#Informations sur l'article Gacha
gacha_items = {
1: {"gacha_group": "A", "weight": 3, "item_id": 5101},
2: {"gacha_group": "A", "weight": 9, "item_id": 4201},
3: {"gacha_group": "A", "weight": 9, "item_id": 4301},
4: {"gacha_group": "A", "weight": 9, "item_id": 4401},
5: {"gacha_group": "A", "weight": 20, "item_id": 3201},
6: {"gacha_group": "A", "weight": 20, "item_id": 3301},
7: {"gacha_group": "A", "weight": 20, "item_id": 3401},
8: {"gacha_group": "A", "weight": 40, "item_id": 2201},
9: {"gacha_group": "A", "weight": 40, "item_id": 2301},
10: {"gacha_group": "A", "weight": 40, "item_id": 2401},
11: {"gacha_group": "B", "weight": 15, "item_id": 4201},
12: {"gacha_group": "B", "weight": 30, "item_id": 3201},
13: {"gacha_group": "B", "weight": 55, "item_id": 2201}
}
#Gacha taple à réaliser
gacha_lottery_ids = (
"A_normal_1","A_normal_11","B_fighter_2","A_omake_2_11","A_omake_fighter_6"
)
#Définir les éléments, etc.
func_gacha = set_gacha(items, gacha_items)
# gacha_lottery_Exécuter gacha en définissant l'id
for gacha_lottery_id in gacha_lottery_ids:
print("==%s==" % gacha_lottery_id)
ids = func_gacha(gacha_lottery_id)
for id in ids:
item_info = items[gacha_items[id]["item_id"]]
print("ID:%d, %s, %s" % (id, get_rarity_name(item_info["rarity"]), item_info["item_name"]))
if __name__ == '__main__':
main()
Exécutez gacha pour l'ID de ** gacha_lottery ** et vérifiez le comportement
==A_normal_1==
ID:10, R, R_Prêtre
==A_normal_11==
ID:8, R, R_guerrier
ID:10, R, R_Prêtre
ID:10, R, R_Prêtre
ID:6, SR, SR_sorcier
ID:5, SR, SR_guerrier
ID:8, R, R_guerrier
ID:5, SR, SR_guerrier
ID:8, R, R_guerrier
ID:10, R, R_Prêtre
ID:5, SR, SR_guerrier
ID:7, SR, SR_Prêtre
==B_fighter_2==
ID:13, R, R_guerrier
ID:13, R, R_guerrier
==A_omake_2_11==
ID:7, SR, SR_Prêtre
ID:10, R, R_Prêtre
ID:10, R, R_Prêtre
ID:6, SR, SR_sorcier
ID:8, R, R_guerrier
ID:7, SR, SR_Prêtre
ID:9, R, R_sorcier
ID:9, R, R_sorcier
ID:6, SR, SR_sorcier
ID:4, SSR, SSR_Prêtre
ID:1, UR, UR_Courageux
==A_omake_fighter_6==
ID:8, R, R_guerrier
ID:5, SR, SR_guerrier
ID:5, SR, SR_guerrier
ID:8, R, R_guerrier
ID:5, SR, SR_guerrier
ID:2, SSR, SSR_guerrier
Les exigences fonctionnelles ont été satisfaites. Il y a des pièces inadéquates en tant que mécanisme pouvant supporter un fonctionnement réel, Tout d'abord, cette configuration est la forme de base. À l'avenir, afin de répondre aux ** exigences fonctionnelles requises pour le fonctionnement **, nous modifierons la structure des données, comme l'ajout de nouvelles informations et la réorganisation des informations, et modifierons l'implémentation en conséquence.
Dans cette implémentation, nous n'avons introduit aucune difficulté technique. En termes simples, il s'agit simplement de ** revoir la structure des données et de modifier l'implémentation *. Sur le site de développement proprement dit, le concepteur de services est invité à revoir la composition du texte et à réécrire l'histoire ** afin d'exprimer le ** brouillon ** du planificateur (exigences fonctionnelles) ** scénariste ** Une telle capacité est requise. ( C'est important, mais il y a une réalité qui n'est pas comprise *)
Étant donné que la quantité d'informations (maître) augmentera et que le gacha sera effectué en tenant compte de l'état de l'utilisateur, nous l'implémenterons en utilisant DB à partir de la prochaine fois.
Recommended Posts