我有一些我正在構建的不和諧機器人的代碼,我想讓它變得更干凈。我想檢查用戶輸入是否已經是敵人(類物件),然后對該同名類物件執行操作,而不是在創建新敵人時撰寫新的 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)函式的物件是一個字串,而我需要它是一個類物件。關于如何添加此功能的任何想法?
uj5u.com熱心網友回復:
你應該有辦法獲得現有的敵人。我將使用記憶體解決方案提出一些建議,但對于更健壯/可擴展的解決方案,您應該使用資料庫(sqlite、Postgresql、Mysql),并且為了便于開發,使用 ORM(SQLalchemy 或 Django)。
EnemyList 將是:
class EnemyList:
def __init__(self):
self._enemies = []
def new_enemy(name, enemy_type, health, ap):
enemy = EnemyCreator(name, enemy_type, health, ap)
self.enemies.append(enemy)
return enemy
def find_enemy(name):
return next(filter(lambda enemy, enemy.name == name, self.enemies))
然后你需要改變你的on_message函式來使用它
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(EnemyList.find_enemy(message.content[8::)))
這是簡短的回答,我不會在這里添加其他建議,因為它們與問題無關,但您也可以檢查:
- 字串格式
- OO -> 攻擊函式可能應該是 playerChar 物件的方法?
- 我已經說過的 DB 的事情。
uj5u.com熱心網友回復:
我找到了解決辦法。我在他們的名字旁邊列出了所有敵人的名單。然后我將對應值的索引回傳給敵人名稱。下面是我想出的。
敵人創造:
boss = EnemyCreator('Charles Hammerdick', 'boss', 10000, 200)
npc_list.append(boss)
npc_list.append(boss.name)
攻擊功能:
def attack(enemy):
for thing in npc_list:
if str(enemy) in str(thing):
enemy = (npc_list[npc_list.index(thing) - 1])
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.'
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/360477.html
上一篇:如何出于測驗目的雙重匯入模塊?
下一篇:如何列印一疊卡片?
