【发布时间】:2018-07-29 06:50:03
【问题描述】:
我正在尝试进行文本冒险,以帮助保持我的兴趣,同时尝试学习 Python 的概念和细微差别。我最初跟随 YouTube 教程(6 部分系列,第 1 部分提供链接:https://www.youtube.com/watch?v=MFW8DJ6qsak)。
我创建了如图所示的播放器类:
class Player:
def __init__(self):
self.name = ''
self.jobclass = ''
self.currenthp = 0
self.totalhp = 0
self.currentmp = 0
self.totalmp = 0
self.physical_damage = 0
self.physical_defense = 0
self.magic_attack = 0
self.magic_defense = 0
self.speed = 0
self.luck = 0
self.status_effect = []
self.location ='b2'
self.game_over = False
myPlayer = Player()
我当前的问题是尝试根据玩家选择的角色工作分配某些统计数据,即:
def setup_game():
...
player_jobclass = input("> ")
myPlayer.jobclass = player_jobclass
valid_jobs = ['warrior', 'mage', 'thief', 'cleric']
while player_jobclass.lower() not in valid_jobs:
print("Please choose a valid class")
player_jobclass = input("> ")
if player_jobclass.lower() in valid_jobs:
myPlayer.jobclass = player_jobclass
print("Ah, the " +player_jobclass.lower()+ ". Fine choice!\n")
#Class Starting Stats
if myPlayer.jobclass is 'warrior':
self.currenthp = 20
self.totalhp = 20
self.currentmp = 10
self.totalmp = 10
self.physical_damage = 10
self.physical_defense = 10
self.magic_attack = 2
self.magic_defense = 3
self.speed = 4
self.luck = 4
self.location = 'd1'
elif myPlayer.jobclass is 'mage':
self.currenthp = 10
self.totalhp = 10
self.currentmp = 20
self.totalmp = 20
self.physical_damage = 2
self.physical_defense = 3
self.magic_attack = 10
self.magic_defense = 7
self.speed = 7
self.luck = 3
self.location = 'a1'
...
main_game_loop()
因为在这一切运行之后,我可以很好地进入游戏,并且我的所有动作和小动作都可以正常工作,但是如果我尝试通过以下方式打印玩家“统计数据”:
def show_stats():
hpmpadarmPrint = ("" + str(myPlayer.currenthp) + "/" + str(myPlayer.totalhp) + " hp " + str(myPlayer.currentmp) + "/" + str(myPlayer.totalmp) + " mp " + str(myPlayer.physical_damage) + " ATK " + str(myPlayer.physical_defense) + " ARM \n")
mgclckspdPrint = ("" + str(myPlayer.magic_attack) + " AP " + str(myPlayer.magic_defense) + " MR " + str(myPlayer.speed) + " SPD " + str(myPlayer.luck) + " LCK \n")
所有打印的是:0/0 hp 0/0 mp 0 ATK 0 ARM
0 AP 0 MR 0 SPD 0 LCK
我可以说有一些更大的概念让我无法分配值,因为即使 self.location = 'b2' 必须在那里,否则游戏将无法运行,因为 myPlayer 实际上没有被分配我认为应该的值.这也阻止了我的 change_text_speed() 函数工作,而且......你明白了。
猜想主要问题是:一旦分配新值,如何保持新值?
【问题讨论】:
-
阅读继承。另外,我认为应该在
__init__方法中设置统计信息。 -
不要将字符串与
is进行比较。使用==。 -
很难理解
setup_game函数发生了什么。self来自哪里?无论如何,您的直接问题可能源于将字符串与is而不是==进行比较。不要那样做。is代表身份,==代表平等。您不能保证相等的字符串是相同的字符串,即 same 字符串对象。 -
另外,继承是这里的一个选项。但不要认为这是唯一的选择。
-
感谢您对
is和==的澄清。self是基于最初的__init__(self)的教程(现在我猜不如我曾经想的那么好)
标签: python python-3.x class variables adventure