【发布时间】:2021-11-18 17:44:30
【问题描述】:
我有一些我正在构建的不和谐机器人的代码,我想让它变得更干净。我不想在新敌人出现时编写新的 if 语句,而是想检查用户输入是否已经是敌人(类对象),然后对该同名的类对象执行操作。
下面是构建敌人的代码。
class EnemyCreator:
type = 'enemy'
def __init__(self, name, enemy_type, health, ap):
self.name = name
self.enemy_type = enemy_type
self.health = health
self.ap = ap
info = (name + ', ' + str(health) + ', ' + str(ap))
npc_info.append(info)
这是一个敌人的例子:
skeleton = EnemyCreator('Randy Bones', 'skeleton', 100, 2)
我有一个攻击功能:
def attack(enemy):
enemy.health = enemy.health - playerChar.ap
if enemy.health > 0:
playerChar.health = playerChar.health - enemy.ap
return ('You attacked ' + enemy.name + '. ' + str(enemy.health) + ' life remaining. \n'
+ enemy.name + ' attacks back! You take ' + str(enemy.ap) + ' damage. You have ' + str(playerChar.health)
+ ' remaining!')
if enemy.health <= 0:
return enemy.name + ' has been defeated!'
if playerChar.health <= 0:
return 'You died idiot.'
然后我用这段代码检查输入:
async def on_message(message):
print(message.content)
if message.author != client.user:
if 'test' in message.content.lower():
print(npc_info)
if '!attack' in message.content.lower():
await message.channel.send(
attack(message.content[8::))
但是,这会导致一个问题,因为传递给attack(enemy) 函数的对象是一个字符串,我需要它是一个类对象。关于如何添加此功能的任何想法?
【问题讨论】:
-
你在哪里存储消息之间的上下文?您需要从某个地方检索 Enemy ...您可以创建一个 EnemyList 或只是将您创建的所有敌人保存在 Enemy 类中(丑陋,但有效),然后询问具有您在消息中收到的名称的敌人.. .
-
所以做一个EnemyList,然后检查列表中对象的str是否=字符串,然后从列表中返回匹配字符串的对象?
-
我会提出一个答案
-
您不想将其转换为“类对象”,您想将其转换为
EnemyCreator对象。
标签: python string class discord.py