Gacha geschrieben in Python-Data Design-

Inhalt

Betrachten Sie das Daten-Design von Gacha.

Datenelemente für Gacha erforderlich

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.

Gacha mit einer zusätzlichen Seltenheit

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()

Ausführungsergebnis

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

Erwägung

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

Gacha geschrieben in Python-Data Design-
Gacha geschrieben in Python-Übung 1-
Gacha geschrieben in Python -BOX Gacha-
Einfache Gacha-Logik in Python geschrieben
Gacha in Python-Rarity geschrieben mit Bonus bestätigt
Gacha geschrieben in Python-Implementierung in grundlegende Datenstruktur-
Gacha geschrieben in Python-Übung 2 ・ Grundlagen der Step-up-Gacha-
Gacha geschrieben in Python-Übung 3 ・ Hinzufügen von Step-up-Gacha-Funktionen-
Gacha geschrieben in Python-Addition der Periodeneinstellungsfunktion-
Entwurfsmuster in Python: Einführung
Cooles Lisp geschrieben in Python: Hy
Kompatibilitätsdiagnoseprogramm in Python geschrieben