Betrachten Sie das Daten-Design von Gacha.
Bisher haben wir nur ** ID ** und ** Gewichtswert ** als Gacha-Daten geübt.
#Artikel-ID und Gewichtswörterbuch für die Lotterie
item_dic = {"id_1":1,"id_2":5,"id_3":14,"id_4":30,"id_5":50}
Ich werde die Elemente auflisten, die für die Herstellung einer Gacha erforderlich sind.
Die Tabelle ist wie folgt 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 |
Die Entsprechungstabelle zwischen der Rarität und ihrem Namen lautet wie folgt. 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"}
Beschreibung jedes Wörterbuchs
--gacha_items enthält Informationen wie Gewichte, wobei id als Schlüssel verwendet wird --rarity_names enthält seltene Namen, die der Rarität (id) entsprechen.
Als Bonus werde ich eine Gacha erstellen, die mehr als nur eine Seltenheit sein kann. (Ich werde die Quelle von @shiracamus verwenden)
gacha.py
import random
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 gacha_omake(gacha_items: dict, times: int, omake_rarity: int) -> list:
#Erstellen Sie ein Wörterbuch mit Seltenheitsbeschränkungen für Bonusziele
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():
#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
#Bonus-Rarität (oder mehr)
omake_rarity = 3
#Holen Sie sich eine Liste der IDs per Lotterie
ids = gacha_omake(gacha_items, times, omake_rarity)
#Ergebnisausgabe
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
Betrachten wir den Unterschied zum letzten Mal. (Gacha in Python-Rarity geschrieben mit Bonus-)
Die für Gacha erforderlichen Mindestinformationen sind ID und Wahrscheinlichkeit (Gewicht). Durch Hinzufügen dieser Informationen konnten wir außerdem ** Verhalten ** und ** Ergebnis ** erhalten, die nahe an der tatsächlichen Gacha liegen.
Wichtig ist, dass ** Datendefinition (Datenentwurf) ** durchgeführt wird, um die Verarbeitung zu realisieren, und die entsprechende Logik beschrieben wird.
Die Gacha selbst ist eine einfache Logik. Bei tatsächlichen Diensten ist es jedoch erforderlich, Daten zu entwerfen, die den Gacha-Betrieb verarbeiten können, und es ist keine Übertreibung zu sagen, dass das Datendesign alles ist. (Tatsächlich werden diese Daten für den Betrieb in der DB gespeichert.)
Recommended Posts