Lassen Sie uns eine BOX-Gacha erstellen. Die folgenden Quellen werden verwendet. (Gacha geschrieben in Python-Data Design-)
Es gibt eine feste Anzahl von Lottoscheinen in der Lotteriebox, und die Gacha endet, wenn ** alle gezogen ** sind. (Bitte beachten Sie, dass die BOX-Gacha, die die Lotterie der unteren Rarität automatisch auffüllt, eine Fälschung ist. Sie brennt groß.)
Es gibt keine Gewichtseinstellung für jeden Gegenstand in der Lotterie. Die Wahrscheinlichkeit, einen Artikel zu zeichnen, basiert auf der Gesamtzahl der Blätter (n) in der BOX.
p = \frac{1}{n}
Die Wahrscheinlichkeit nach dem Zeichnen ist wie folgt
p = \frac{1}{n-1}
gacha_box.py
import random
#Verwenden Sie einen Verschluss, um den BOX-Status beizubehalten
def gacha_box(gacha_items: dict):
#ID extrahieren
#Gewicht wird nicht verwendet
items = [key for key in gacha_items.keys()]
def lottery(times: int=1):
#Wenn die Anzahl der Lotterien größer als die verbleibende Anzahl ist, stimmen Sie mit der verbleibenden Anzahl überein
if len(items) < times:
times = len(items)
#Nicht überlappende Lotterie
ids = random.sample(items, k=times)
#Löschen Sie die aus dem Artikel gezogene ID
for key in ids:
items.remove(key)
return ids
return lottery
def gacha(gacha_items: dict, times: int=1) -> list:
#Erstellen Sie ein Wörterbuch mit IDs und Gewichten, die für die Lotterie erforderlich sind
lots = {key: info["weight"] for key, info in gacha_items.items()}
return random.choices(tuple(lots), weights=lots.values(), k=times)
def main():
#Gacha-Artikelinformationen
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"}
}
#Seltenheitsname
rarity_names = {5: "UR", 4: "SSR", 3: "SR", 2: "R", 1: "N"}
#Anzahl der Lotterien
times = 10
#Holen Sie sich eine Liste der IDs per Lotterie
ids = gacha(gacha_items, times)
#Ergebnisausgabe
print("Normale Gacha")
for id in ids:
print("ID:%d, %s, %s" % (id, rarity_names[gacha_items[id]["rarity"]], gacha_items[id]["item_name"]))
print("=======")
#Speichern Sie die Lotteriefunktion in func
func = gacha_box(gacha_items)
times = 3
box_ids = func(times)
print("BOX Gacha: 1. Mal,Anzahl der Lotterieeinstellungen:%d,Anzahl der Lotterieergebnisse:%d" %(times,len(box_ids)))
for id in box_ids:
print("ID:%d, %s, %s" % (id, rarity_names[gacha_items[id]["rarity"]], gacha_items[id]["item_name"]))
times = 8
box_ids = func(times)
print("BOX Gacha: Zum zweiten Mal,Anzahl der Lotterieeinstellungen:%d,Anzahl der Lotterieergebnisse:%d" %(times,len(box_ids)))
for id in box_ids:
print("ID:%d, %s, %s" % (id, rarity_names[gacha_items[id]["rarity"]], gacha_items[id]["item_name"]))
if __name__ == '__main__':
main()
Normale Gacha
ID:9, N, N_HOGE
ID:4, SSR, SSR_FUGA
ID:3, SSR, SSR_HOGE
ID:10, N, N_FUGA
ID:9, N, N_HOGE
ID:4, SSR, SSR_FUGA
ID:7, R, R_HOGE
ID:5, SR, SR_HOGE
ID:9, N, N_HOGE
ID:9, N, N_HOGE
=======
BOX Gacha: 1. Mal,Anzahl der Lotterieeinstellungen:3,Anzahl der Lotterieergebnisse:3
ID:2, UR, UR_FUGA
ID:8, R, R_FUGA
ID:4, SSR, SSR_FUGA
BOX Gacha: Zum zweiten Mal,Anzahl der Lotterieeinstellungen:8,Anzahl der Lotterieergebnisse:7
ID:6, SR, SR_FUGA
ID:1, UR, UR_HOGE
ID:5, SR, SR_HOGE
ID:9, N, N_HOGE
ID:10, N, N_FUGA
ID:3, SSR, SSR_HOGE
ID:7, R, R_HOGE
Das Ausführungsergebnis von BOX Gacha unterscheidet sich von normalem Gacha und es gibt keine Duplizierung der ID während des ersten und zweiten Mal. Darüber hinaus wird beim zweiten Mal eine Kontrolle durchgeführt, wenn die Anzahl der Lotterieeinstellungen und die Anzahl der Lotterieergebnisse unterschiedlich sind und Sie sehen, dass die Lotterie innerhalb der verbleibenden Anzahl in der BOX durchgeführt wird. Tatsächlich besteht die richtige Methode darin, die verbleibende Nummer in der BOX zu überprüfen, bevor die Gacha ausgeführt wird, und sie so zu steuern, dass keine weiteren Gachas ausgeführt werden können. Es ist eine gute Idee, eine Funktion hinzuzufügen, um die verbleibende Nummer in der BOX auf den Rückgabewert der Funktion gacha_box zu bringen.
#Verwenden Sie einen Verschluss, um den BOX-Status beizubehalten
def gacha_box(gacha_items: dict):
#ID extrahieren
#Gewicht wird nicht verwendet
items = [key for key in gacha_items.keys()]
def lottery(times: int=1):
#Wenn die Anzahl der Lotterien größer als die verbleibende Anzahl ist, stimmen Sie mit der verbleibenden Anzahl überein
if len(items) < times:
times = len(items)
#Nicht überlappende Lotterie
ids = random.sample(items, k=times)
#Löschen Sie die aus dem Artikel gezogene ID
for key in ids:
items.remove(key)
return ids
#Holen Sie sich die verbleibende Nummer in die BOX
def remain():
return len(items)
return lottery, remain
func, remain = gacha_box(gacha_items)
times = 10
if remain() < times:
print("BOX Restnummer Fehler")
return False
box_ids = func(times)
Recommended Posts