Gacha geschrieben in Python-Implementierung in grundlegende Datenstruktur-

Inhalt

Gacha-Datenentwurf (Grundstruktur 1, [Grundstruktur 2](https://qiita.com/saib-ryo/items/ Implementieren Sie gemäß c1b7837fe04022b6864d)).

Der Quellcode wurde hier verbessert

Gacha geschrieben in Python-Data Design-

Informationsliste einstellen

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

Machen Sie es zu einer konkreten und leicht verständlichen Zeichenfolgen-ID, da es als ID für die Ausführung der Gacha positioniert wird.

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_Mutig 1 1200
4201 4 SSR_Krieger 2 1000
4301 4 SSR_Magier 3 800
4401 4 SSR_Priester 4 800
3201 3 SR_Krieger 2 600
3301 3 SR_Magier 3 500
3401 3 SR_Priester 4 500
2201 2 R_Krieger 2 400
2301 2 R_Magier 3 300
2401 2 R_Priester 4 300
3199 3 SR_Mutig 1 600

rarity

id rarity_name
5 UR
4 SSR
3 SR
2 R
1 N

Aussichtspunkt der Renovierung

Funktionale Anforderungen

Als Gacha-Mechanismus, der mit der Datenstruktur von Grundstruktur 2 realisiert werden kann, werden die folgenden Anforderungen erfüllt.

  • Mehrere Elemente für Gacha als Gruppe (Population) festlegen

Datenstrukturänderungen

** Gacha-Informationen ** und ** Elemente als wesentliche Unterschiede zur Datenstruktur in der vorherigen Implementierung (Gacha geschrieben in Python-Data Design-) Informationen ** können isoliert sein. Daher ist es notwendig, die Informationen zu verknüpfen.

Implementierung

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]

#Gacha ID und Einstellungswörterbuch
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):
    #Fügen Sie für die Gacha-Einstellungen erforderliche Artikelinformationen in die Gacha-Artikelinformationen ein
    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

    #Extrahieren Sie die Lotteriezielliste
    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

    #Gacha Hinrichtung
    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():
    #Gegenstand Information
    items = {
        5101: {"rarity": 5, "item_name": "UR_Mutig", "item_type": 1, "hp": 1200},
        4201: {"rarity": 4, "item_name": "SSR_Krieger", "item_type": 2, "hp": 1000},
        4301: {"rarity": 4, "item_name": "SSR_Magier", "item_type": 3, "hp": 800},
        4401: {"rarity": 4, "item_name": "SSR_Priester", "item_type": 4, "hp": 800},
        3201: {"rarity": 3, "item_name": "SR_Krieger", "item_type": 2, "hp": 600},
        3301: {"rarity": 3, "item_name": "SR_Magier", "item_type": 3, "hp": 500},
        3401: {"rarity": 3, "item_name": "SR_Priester", "item_type": 4, "hp": 500},
        2201: {"rarity": 2, "item_name": "R_Krieger", "item_type": 2, "hp": 400},
        2301: {"rarity": 2, "item_name": "R_Magier", "item_type": 3, "hp": 300},
        2401: {"rarity": 2, "item_name": "R_Priester", "item_type": 4, "hp": 300},
        3199: {"rarity": 3, "item_name": "SR_Mutig", "item_type": 1, "hp": 600}
    }

    #Gacha-Artikelinformationen
    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 ausführen
    gacha_lottery_ids = (
        "A_normal_1","A_normal_11","B_fighter_2","A_omake_2_11","A_omake_fighter_6"
    )

    #Set Items etc.
    func_gacha = set_gacha(items, gacha_items)

    # gacha_lottery_Führen Sie Gacha aus, indem Sie die ID festlegen
    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()

Ausführungsergebnis

Führen Sie gacha für die ID ** gacha_lottery ** aus und überprüfen Sie das Verhalten

==A_normal_1==
ID:10, R, R_Priester
==A_normal_11==
ID:8, R, R_Krieger
ID:10, R, R_Priester
ID:10, R, R_Priester
ID:6, SR, SR_Magier
ID:5, SR, SR_Krieger
ID:8, R, R_Krieger
ID:5, SR, SR_Krieger
ID:8, R, R_Krieger
ID:10, R, R_Priester
ID:5, SR, SR_Krieger
ID:7, SR, SR_Priester
==B_fighter_2==
ID:13, R, R_Krieger
ID:13, R, R_Krieger
==A_omake_2_11==
ID:7, SR, SR_Priester
ID:10, R, R_Priester
ID:10, R, R_Priester
ID:6, SR, SR_Magier
ID:8, R, R_Krieger
ID:7, SR, SR_Priester
ID:9, R, R_Magier
ID:9, R, R_Magier
ID:6, SR, SR_Magier
ID:4, SSR, SSR_Priester
ID:1, UR, UR_Mutig
==A_omake_fighter_6==
ID:8, R, R_Krieger
ID:5, SR, SR_Krieger
ID:5, SR, SR_Krieger
ID:8, R, R_Krieger
ID:5, SR, SR_Krieger
ID:2, SSR, SSR_Krieger

Erwägung

Die funktionalen Anforderungen wurden erfüllt. Es gibt einige unzureichende Teile als Mechanismus, die dem tatsächlichen Betrieb standhalten können. Zuallererst ist diese Konfiguration die Grundform. Um die für den Betrieb erforderlichen ** funktionalen Anforderungen ** zu erfüllen, werden wir in Zukunft die Datenstruktur ändern, z. B. neue Informationen hinzufügen und Informationen neu anordnen, und die Implementierung entsprechend ändern.

In dieser Implementierung haben wir keine technischen Schwierigkeiten eingeführt. Einfach ausgedrückt, es geht nur darum, die Datenstruktur zu überarbeiten und die Implementierung zu ändern. Am eigentlichen Entwicklungsstandort wird der Service-Designer gebeten, die Zusammensetzung des Textes zu überprüfen und die Story ** neu zu schreiben *, um den ** Entwurf ** des Planers (funktionale Anforderungen) ** Drehbuchautor ** auszudrücken Eine solche Fähigkeit ist erforderlich. ( Es ist wichtig, aber es gibt eine Realität, die nicht verstanden wird *)

Nachtrag

Da die Informationsmenge (Master) zunimmt und die Gacha unter Berücksichtigung des Benutzerstatus ausgeführt wird, werden wir sie ab dem nächsten Mal mit DB implementieren.

Recommended Posts

Gacha geschrieben in Python-Implementierung in grundlegende Datenstruktur-
Gacha geschrieben in Python-Übung 1-
Gacha geschrieben in Python-Data Design-
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-Ü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-
Grundlegende Datenrahmenoperationen, die von Anfängern in einer Woche Python-Lernen geschrieben wurden
Grundlegende Sortierung in Python
Abtastung in unausgeglichenen Daten
C sprachähnliche Struktur in Python
[Python-Tutorial] Datenstruktur