首页 > 解决方案 > 我正在尝试制作一个万智牌应用程序,我应该如何存储卡片属性?

问题描述

我正在做我的第一个与学校无关的项目,我对如何处理某些事情有点困惑。该项目是用 Python 编写的,但我想这个问题本身更多是基于概念/OOP 的。该项目的目标是创建一个应用程序,该应用程序接受 40 张 MtG 牌组的输入,并根据牌组的内容显示一些概率数字。使用 Scryfall 的 API,我制作了一个文本文档,其中包含一组魔法卡的卡信息。文本文档实际上只是一堆行,每行包含一个 JSON 格式的字典,我在文本文件中拥有我需要的所有信息。它看起来像这样:

{ 'name' : 'card_1_name', 'attribute1' : ' card_1_attribute1', 'attribute2' : 'card_1_attribute2', 'etc' : 'etc'}
{ 'name' : 'card_2_name', 'attribute1' : ' card_2_attribute1', 'attribute2' : 'card_2_attribute2', 'etc' : 'etc'}
{ 'name' : 'card_3_name', 'attribute1' : ' card_3_attribute1', 'attribute2' : 'card_3_attribute2', 'etc' : 'etc'}

对于那些熟悉 MtG 的人,认为:

{'name' : 'lightning bolt', 'color' : 'red', 'type' : 'instant', ...., 'etc' : 'etc'}

它适用于大约 250 种不同的卡片。我可以阅读文档以获取有关我想要的任何卡的任何信息,但由于格式很奇怪,我必须使用 for 循环单独读取每一行并使用 ast.literal_eval 将其转换为实际的 python 字典来识别行包含我想要的卡的“名称”的字典。

这是我目前正在尝试做的事情。我想我可以创建一个类“卡片”,它具有每张魔法卡片所具有的属性,比如名称和颜色。然后我想创建“卡片”类的子类,其中包含特定于某些卡片类型的其他属性,例如 MtG 中的卡片类型是“生物”。只有生物具有“力量”属性和“坚韧”属性。所以类'creature'会继承'card'的基本属性并且也有它自己的特殊属性。

我的思路是,一副纸牌应该是卡片对象的列表。我的问题是我很难自动化制作卡片对象的过程。这是我目前拥有的“卡片”课程:

class magic_card:

    def __init__(self, card_dict): # card_dict is the dictionary that contains the card data

        self.name = card_dict['name']
        self.cmc = card_dict['cmc']
        self.colors = card_dict['colors']
        self.rarity = card_dict['rarity']

如何自动化创建这约 250 个卡片对象的过程,以便“卡片”的名称是卡片实例的名称?我的意思是我希望能够创建一个循环来执行此操作:

f = open("document_that_holds_card_information.txt", "r")

for i in range(1, 251):
    card_dictionary = ast.literal_eval(f.readline())
    card_name = (card_dictionary['name'])
    card_name = magic_card(card_dictionary) # I want this magic_card instance's name to be the value stored in card_dictionary['name'] 

f.close()

这是可行的吗?还是我想多了?我的另一个想法是我可以重新格式化我的文本文档,以便通过将其格式化为看起来更容易搜索

['card_name1' : {#dictionary contents}, 'card_name2' : {#dictionary contents}, 'card_name3' : {#dictionary contents}....] 

我真的在为此苦苦挣扎,我觉得我可能会在一个糟糕的方法上进行隧道视野。请帮忙!

编辑:好吧,共识似乎是我想多了。我决定将包含我的卡数据的文件重新格式化为正确的 JSON 格式,而不是多行 JSON。一副卡片不是卡片对象的列表,而是卡片字典的列表

标签: pythonoop

解决方案


推荐阅读