Gacha-Datenentwurf (Grundstruktur 1, [Grundstruktur 2](https://qiita.com/saib-ryo/items/ Implementieren Sie gemäß c1b7837fe04022b6864d)).
Der Quellcode wurde hier verbessert
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 |
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
** 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.
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()
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
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 *)
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