我刚刚开始使用Python,通过LPtHW逐步学习。我正在做练习36,让你设计你自己的游戏。我正在尝试制作一个非常基础的游戏,但在避免全局变量时遇到了麻烦。例如,在与怪物战斗时,它会检查你是否有剑。目前我是这样做的:首先创建全局变量== = 0,然后当你获得剑时,它的值被更改为1,然后当你与怪物战斗时,如果全局剑为1,那么你就赢了。我如何更改我的代码以避免使用全局变量?
发布于 2014-07-13 02:45:05
使用类是避免使用全局变量的主要方法。
例如,您可以创建一个Player类,其属性表示玩家是否拥有一把剑,而不是在程序开始时为剑声明一个全局变量。
在这个类中,您可以创建一个返回玩家是否有剑的方法,从而避免在类Player之外使用变量。
class Player():
def __init__(self, sword):
self.sword = sword
def playerHasSword():
return self.sword发布于 2014-07-13 02:59:09
这是一个非常简单的类。(包括打架!)
import random
class PlayerKilled(Exception): #player died
pass #just a mechanism to detect killing a player
DAMAGE_TABLE = { #how much damage for weapons
"MACE":6,
"SWORD":8,
"DAGGER":5,
"FISTS":3
}
class MOB:
def __init__(self,name,hp,weapon="FISTS"):
self.name = name
self.hp = hp
self.ac = 3 # defense
self.level = 1
self.weapon = weapon
self.dead = False
def battle(self,MOB2):
attacker,defender = self, MOB2
if random.random() > 0.5:
print "%s Attacks First!"%MOB2.name
attacker,defender = defender,attacker
while not self.dead and not MOB2.dead:
attacker.attack(defender)
attacker,defender = defender,attacker
return defender
def attack(self,MOB2):
dmg = sum(random.randint(1,DAMAGE_TABLE[self.weapon]) for _ in range(self.level))
print "%s Attacks with %s for %s DMG!"%(self.name,self.weapon,dmg)
try:
MOB2.defend(dmg)
except PlayerKilled:
print "%s has killed %s"%(self.name,MOB2.name)
def defend(self,dmg):
if sum(random.randint(0,self.ac) for _ in range(self.level)) > dmg:
print "%s blocks the attack"%self.name
return
self.hp = self.hp - dmg
if self.hp < 0:
print "%s has died!"%self.name
self.hp = 0
self.dead = True
raise PlayerKilled
p1 = MOB("player",20,"DAGGER")
p2 = MOB("vampire",20,"FISTS")
winner = p1.battle(p2)
print "%s WINS with %s HP left!"%(winner.name,winner.hp)https://stackoverflow.com/questions/24715989
复制相似问题