** "11 SR consécutifs ou plus 1 gacha confirmé" ** Dans un jeu social réel, un gacha avec une certaine rareté ou plus est une norme en utilisant le coût de 10 fois à la fois. Sur la base de la logique précédente du gacha, réfléchissons à la façon de le réaliser. Logique gacha simple écrite en Python
#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}
Considérons id_1 à 4 comme la cible de la ** confirmation de rareté du bonus **.
#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}
#Nombre de loterie
times = 10
item_list = gacha(item_dic,times)
#ID de l'objet bonus et dictionnaire de poids pour la loterie
sp_item_dic = {"id_1":1,"id_2":5,"id_3":14,"id_4":30}
#Compte de loterie bonus
sp_times = 1
item_list.extend(gacha(sp_item_dic,sp_times))
Il s'agit d'une méthode d'implémentation simple qui utilise la fonction gacha créée telle quelle. Cependant, comme indiqué dans le code **, le traitement redondant est décrit sur l'appelant **. Par conséquent, je vais essayer d'inclure le traitement dans la fonction gacha.
Considérez quel type d'informations est nécessaire en tant que paramètre pour la fonction gacha. En principe, certains des objets ciblés pour ce gacha seront soumis à la loterie bonus. De plus, le bonus est fixé à un.
Les informations requises pour la loterie bonus sont la liste des identifiants cibles et le nombre de loteries. Tout d'abord, ajoutons simplement un paramètre.
--sp_item_ids: Liste des identifiants soumis au bonus gacha
Aussi, pour que vous puissiez exécuter gacha sans extras Essayez de définir les valeurs initiales des paramètres ajoutés.
def gacha(item_dic, times, sp_item_ids=[]):
total_weight = 0
sp_total_weight = 0
sp_item_dic = {}
for item_key,value in item_dic.items():
total_weight += value
if len(sp_item_ids) > 0:
if item_key in sp_item_ids:
sp_total_weight += value
sp_item_dic[item_key] = value
results = []
for i in range(times):
results.append(lottery(item_dic,total_weight))
#Bonus gacha
if len(sp_item_dic) > 0:
results.append(lottery(sp_item_dic, sp_total_weight))
return results
#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}
#Nombre de loterie
times = 10
#Bonus Liste des identifiants d'objets soumis à la loterie
sp_item_list = ["id_1","id_2","id_3","id_4"]
item_list = gacha(item_dic, times, sp_item_list)
Des résultats similaires ont été obtenus. Cependant, la logique de la fonction gacha est devenue très compliquée. Dans ce cas, il est plus simple et plus propre d'exécuter le gacha d'origine séparément.
** On peut dire que le sens de réparation était erroné **
Annulez la fonction gacha et Créez une nouvelle fonction appelée gacha_omake.
#Gacha avec bonus
def gacha_omake(item_dic, times, sp_item_ids=[]):
item_list = gacha(item_dic, times)
#sp_item_Si des identifiants existent, ce sera un gacha avec un bonus
if len(sp_item_ids) > 0:
sp_item_dic = {}
for item_key,value in item_dic.items():
if item_key in sp_item_ids:
sp_item_dic[item_key] = value
if len(sp_item_dic) > 0:
item_list.extend(gacha(sp_item_dic, 1))
return item_list
def gacha(item_dic, times):
total_weight = 0
for value in item_dic.values():
total_weight += value
results = []
for i in range(times):
results.append(lottery(item_dic,total_weight))
return results
#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}
#Nombre de loterie
times = 10
#Bonus Liste des identifiants d'objets soumis à la loterie
sp_item_list = ["id_1","id_2","id_3","id_4"]
item_list = gacha_omake(item_dic, times, sp_item_list)
Le traitement gacha lui-même est laissé à la fonction gacha En découpant et en résumant uniquement le gacha normal et le processus qui exécute le gacha bonus La fonction de la fonction a été clarifiée.
Recommended Posts