首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为新程序员避免在Python中使用全局变量

作为新程序员避免在Python中使用全局变量
EN

Stack Overflow用户
提问于 2014-07-13 02:23:14
回答 2查看 1.1K关注 0票数 0

我刚刚开始使用Python,通过LPtHW逐步学习。我正在做练习36,让你设计你自己的游戏。我正在尝试制作一个非常基础的游戏,但在避免全局变量时遇到了麻烦。例如,在与怪物战斗时,它会检查你是否有剑。目前我是这样做的:首先创建全局变量== = 0,然后当你获得剑时,它的值被更改为1,然后当你与怪物战斗时,如果全局剑为1,那么你就赢了。我如何更改我的代码以避免使用全局变量?

EN

回答 2

Stack Overflow用户

发布于 2014-07-13 02:45:05

使用类是避免使用全局变量的主要方法。

例如,您可以创建一个Player类,其属性表示玩家是否拥有一把剑,而不是在程序开始时为剑声明一个全局变量。

在这个类中,您可以创建一个返回玩家是否有剑的方法,从而避免在类Player之外使用变量。

代码语言:javascript
复制
class Player():
    def __init__(self, sword):
        self.sword = sword
    def playerHasSword():
        return self.sword
票数 2
EN

Stack Overflow用户

发布于 2014-07-13 02:59:09

这是一个非常简单的类。(包括打架!)

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24715989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档