我正在用Python2.7制作一个TBRPG游戏,目前正在制作一个任务系统。我想创建一个函数来检查列表中的所有任务,在本例中是(quests
),并告诉您列表中的任何任务是否具有相同的ID或名称,如果它们具有相同的ID或名称,multiple_id
和multiple_names
将增加1。你知道吗
class Quest:
def __init__(self, target, name, ID, required_level, objective_requirements, reward_gold, reward_exp, reward_item):
self.target = target
self.name = name
self.ID = ID
self.req_level = required_level
self.objective_default = 0
self.objective_req = objective_requirement
self.reward_gold = reward_gold
self.reward_exp = reward_exp
self.reward_item = reward_item
def accept(self):
if self.target.level >= self.req_level:
self.target.quest.append(self.ID)
else:
pass
def turn_in(self):
if self.reward_exp >= 0:
self.target.exp += self.reward_exp
print '...'
if self.reward_gold >= 0:
self.target.gold += self.reward_gold
print '...'
if self.reward_item == None:
pass
else:
self.target.inventory.append(self.reward)
print '...'
def test_quests(list):
multiple_id = 0
multiple_names = 0
for x in list[:]:
print 'ID ' + str(x.ID)
print 'Name ' + x.name
print 'Target ' + str(x.target)
print 'Required Level ' + str(x.req_level)
print 'Objective Default ' + str(x.objective_default)
print 'Objective Requirement ' + str(x.objevtive_req)
print 'Reward Gold ' + str(x.reward_gold)
print 'Reward Exp ' + str(x.reward_exp)
print 'Reward Item' + str(x.reward_item)
print "Multiple ID's found = %d" % multiple_id
print "Multiple Name's found = %d" % multiple_names
me = 'Just a filler ATM...'
Quest1 = Quest(me, 'A Simple Task', 001, 0, 1, 100, 20, None)
Quest2 = Quest(me, 'A Difficult Task', 702, 0 , 1, 0 ,0, None)
quests = [Quest1, Quest2]
test_quests(quests)
我不知道怎么做。你知道吗
你的任务类看起来像god object。你知道吗
看看需要多少投入。你知道吗
您应该尝试隔离它的关注点,并将其划分为更多的类。你知道吗
一个类应该只有一个关注点。你知道吗
也许你应该分给另一个班。你知道吗
另外,把客观要求分门别类也很有意义。甚至,一个类对应一个需求,然后简单地将客观需求列为一个需求列表。你知道吗
因此,您可以声明需要满足列表中的所有需求。但是每个需求都可以包含替代的需求,例如,将项目A交给人A或人B。让需求类处理or,而任务类处理and。你知道吗
一旦你关闭了任务类,你应该创建一个QuestFactory,它创建任务,创建一个任务应该检查没有其他具有相同id或相同名称的任务,或者计算有多个任务等等
如果您绝对想计算相同id/名称的出现次数,请不要重新设计轮子,使用类似pandas或类似的python数学库。你知道吗
获取重复ID/名称的数量:
如果要获取每个ID/名称的现有时间,可以使用collection.Counter而不是上述代码中的set
你可以创建一个
set
来保存不同的id,然后将该集合的大小与任务总数进行比较。区别告诉你有多少个ID被复制。名字也一样。你知道吗类似这样的(未经测试):
另外,实现
Quest.__repr__
和/或Quest.__str__
可能是个好主意,因此您只需执行print some_quest
即可打印该任务的所有细节。你知道吗相关问题 更多 >
编程相关推荐