Я пытаюсь создать приложение Magic the Gathering, как мне хранить атрибуты карты? - PullRequest
0 голосов
/ 28 декабря 2018

Я работаю над своим первым проектом, не связанным со школой, и я немного озадачен тем, как мне поступить с чем-то.Проект написан на Python, но я думаю, что сам вопрос более концептуален / основан на ООП.Цель проекта - создать приложение, которое принимает данные для колоды MtG из 40 карт и отображает некоторые вероятностные показатели, основанные на содержимом колоды.Используя API Scryfall, я создал текстовый документ, который содержит информацию о карте для набора магических карт.Текстовый документ - это просто набор строк, каждая из которых содержит словарь формата 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, который читает каждую строку отдельно и преобразует ее в настоящий словарь Python, используя ast.literal_eval, чтобы идентифицировать строкуон содержит словарь с «именем» нужной мне карты.

Вот что я сейчас пытаюсь сделать.Я подумал, что мог бы создать «карту» класса, которая имеет атрибуты, которые есть у каждой магической карты, такие как имя и цвет.Затем я хочу создать подклассы класса «карта», которые содержат другие атрибуты, специфичные для определенных типов карт, например, тип карты в MtG - «существо».Только существа имеют атрибут «сила» и «выносливость».Таким образом, класс «существо» будет наследовать основные атрибуты от «карты», а также иметь свои собственные специальные атрибуты.

Я считаю, что колода карт должна представлять собой список объектов карты.Моя проблема в том, что мне трудно автоматизировать процесс создания карточных объектов.Это класс '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 объектов карты, чтобы имя 'card' было именем экземпляра карты?Я имею в виду, что хочу создать цикл, который делает это:

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.Вместо того, чтобы колода карт была списком карточных объектов, колода карт была бы списком карточных словарей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...