python - 我正在尝试制作一个万智牌应用程序,我应该如何存储卡片属性?
问题描述
我正在做我的第一个与学校无关的项目,我对如何处理某些事情有点困惑。该项目是用 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。一副卡片不是卡片对象的列表,而是卡片字典的列表
解决方案
推荐阅读
- java - 带有滚动视图的 Viewpager,保持滚动位置跨页面同步的最佳方法?
- javascript - 使用带有 React/redux 调度功能的 SetTimeOut 时出错
- javascript - 可点击元素上的 CSS (*[onclick]:hover)
- python - discord.py 检查代码中的权限
- python - Python - T-SQL 语句在 SQL Server 中工作,但是当我在 Python 中使用它时,它一直出错
- arduino - arduino 操纵杆库,不要停止操纵杆
- actions-on-google - action.devices.traits.MediaState 问题
- html - 为什么应用于我的列的边框样式被部分遮挡?
- python - 在python中获取剪贴板二进制数据
- machine-learning - 为什么我们不需要在多元线性回归中进行特征缩放