gpt4 book ai didi

python - 我可以从列表中调用函数吗? (python2.7)

转载 作者:行者123 更新时间:2023-12-01 05:37:00 24 4
gpt4 key购买 nike

我认为我的问题中的所有术语都是正确的......但我不确定。基本上我想做的是在文本游戏中获取我的库存和装备的小细节。

我想做的是拥有一把武器,用一把剑,我希望它能改变角色本身的某些方面。让我们随着角色的生命值增加...5,在这种情况下我会得到的是,(不要介意马虎的工作!)

global basehp
basehp = 10
global armorhp
armorhp = 0
global skillhp
skillhp = 0
global hpmod
hpmod = (skillhp + armorhp)
global righthand
righthand = 0

所以用hp作为例子,这就是我在程序中实际拥有的,现在我想做的是更改armorhp以匹配装甲将其更改为的内容,假设我有我的剑,可以为我的hp增加5 ?我现在正在使用的东西不起作用,一开始我以为只是装备它并在armorhp上添加5,然后我开始考虑取消装备它......效果是一样的......我将向你展示什么我的意思是

def hpsword:
armorhp = (armorhp + 5)

def prompt():
x = raw_input("Type command>>")
if x == 'equip':
print "equip what?"
print inventory
y = raw_input(">>>>")
if y == 'sword':
if 'hpsword' in inventory:
global righthand
righthand = 1
inventory.remove ('hpsword')
equipmentlist.append ('hpsword')

现在,从这里你会注意到我遗漏了一些东西,比如我的列表,我正在处理它,但这是我可以真正解释更多我的意思的地方,我想像这样使用每个项目,但我不知道如何...我很困惑,我知道,我有很多想法,但我想做一些类似的事情...

def this sword():
this sword does this thing!

然后,当它被装备时,添加它所具有的效果,例如+5生命值,然后将其移除并使用它的效果,而不必用一堆语句来执行100行代码,哦添加这个效果但是然后,当您不想再使用它时,请将右手重置为 0,然后如果是这个数字,则在将其更改为数字 2 并添加 10 之前,将其减去这么多。

我也在试图避开装备剑,获得 5 点生命值,没有装备,仍然是 5 点?好,装备好,YAY 10!!!

如果我有任何意义,我会感到震惊......但如果有人能明白我的意思并给我一些指示,那就太好了!

编辑:

阅读评论中留下的内容,(感谢伊布!)我想我开始有点了解类(class)了......非常少。

那么,新问题是,我会为主角创建一个类,例如,

class character(object):

然后在init中添加

def __init__(self)

那么我会定义库存吗,

def __init__(self)

def inventory

或者我会这样做,

def __init__(self, inventory)

抱歉,如果我问了太多问题,只是想弄清楚,我注意到这里的人都很好,至少会看看像我这样的想成为程序员的人提出的问题:D

再次编辑!!!

再次感谢伊布!这是有道理的,尽管通读它后我仍然有点困惑如何将它添加到我的代码中以及我需要对某些不同的项目进行更改。

为了尝试解释一些,当我说不同的项目时,你给了我

class Sword(object):
def visit_health_bonus(self, character):
return 5

如果我想要一把能做不同事情的剑,我只需创建一个具有不同名称的新类,但基本上是相同的事情?

class Sword2(object):
def visit_strength_bonus(self, character):
return 2

这会给我一把剑,让我的力量增加 2 点,对吧?

现在谈谈我的另一个问题,当我尝试使用它时,我真正需要什么才能让它正常工作,我看到很多我认为没有其他位就无法运行的东西

class Sword(object):
def visit_health_bonus(self, character):
return 5

# Then, every turn, recalculate health:
health = player.base_health
for equipment in player.equipment: //would i need another class here? (player)
# Pretend this lists everything the player has equipped; you might
# have to check each hand manually
health += equipment.visit_health_bonus(player) //also going to think a class (equipment)

最佳答案

听起来您错过了面向对象编程的一些很棒的实用程序,类似于 Marcin 所说的您可能会像这样创建一系列类:

class Weapon:
def __init__(self, name, armor_hp_bonus = 0, skill_hp_bonus = 0):
self.skill_hp_bonus = skill_hp_bonus
self.armor_hp_bonus = armor_hp_bonus
self.__name__ = name

class Hero:
def __init__(self):
self.basehp = 10
self.armorhp = 0
self.skillhp = 0
self.righthand = None
self.inventory = []

def choose_weapon(self):
while True:
for idx, item in enumerate(self.inventory):
print '{i}: {weapon}'.format(i=idx, weapon=item.__name__)
choice = raw_input("Pick your weapon: ")
try:
self.equip(self.inventory.pop(int(choice)))
return
except IndexError:
print "Invalid choice"
continue

def equip(self, weapon):
if self.righthand:
print "Weapon already equipped to right hand!"
return
else:
self.righthand = weapon
self.armorhp += weapon.armor_hp_bonus
self.skillhp += weapon.skill_hp_bonus

def unequip(self):
if not self.righthand:
print "No weapon to unequip!"
return
self.skillhp -= self.righthand.skill_hp_bonus
self.armorhp -= self.righthand.armor_hp_bonus
self.inventory.append(self.righthand)
self.righthand = None

def acquire_weapon(self, weapon):
self.inventory.append(weapon)

def calc_effective_hp(self):
return self.basehp + self.skillhp + self.armorhp

类可以让您将难以跟踪的所有变量保存在一个地方。这样,一种武器的技能加值永远不会与另一种武器的技能加值混淆,因为存储该信息的变量包含在对象内。一旦您正确设置了类,其余的代码就会变得更短、更干净,因为您只需调用一个方法即可放心,一切都正确完成:

sword_of_1000_truths = Weapon('sword_of_1000_truths', skill_hp_bonus = 1337)
gandalf = Hero()

gandalf.acquire_weapon(sword_of_1000_truths)
gandalf.choose_weapon()

>> 0 sword_of_1000_truths
>> Pick your weapon: 0


print gandalf.calc_effective_hp()
>> 1347

gandalf.unequip()

print gandalf.calc_effective_hp()
>> 10

诸如equipunequip之类的方法确保正确地增加和减少Hero的hp,同时跟踪逻辑游戏的规则,即你不能在一只手上拥有两把武器,如果你没有装备武器,你就不能取消装备武器等等。这有助于消除你提到的那些难看的 100 行代码。

祝你好运!希望这有帮助

关于python - 我可以从列表中调用函数吗? (python2.7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18707253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com