2014-10-03 66 views
0

我正在嘗試創建一個簡單的基於文本的冒險遊戲的戰鬥功能。我們在課堂上還沒有講授課程,但在做了一些探索之後,這似乎是最好的方式。但是,我一直得到一個NameError:name'user'沒有定義。NameError:名稱'user'未定義;與我相關的課程

這是迄今爲止的代碼,我一直在搜索和搜索,我只是不太明白它錯在哪裏。

import sys 
import random 
import time 

number = random.randint(0,20) 


class user: 


    def __init__ (self, player_name, player_health, health_potion): 

     self.__player_health = player_health 
     self.__player_name = player_name 
     self.__health_potion = health_potion 

     def getName(self): 
      return self.__player_name 

     def getHealth(self): 
      return self.__player_health 

     def getPotion(self): 
      return self.__health_potion 

     def setHealth(self): 
      self.__player_health = 100 

     def minusHealth(self, number): 
      self.__player_health -= number 
      return self.__player_health 

     def minusPotion(self): 
      self.__health_potion -= 1 
      return self.__health_potion 

     def plusPotion(self, number1): 
      self.__health_potion += number1 

     def plusHealth(self): 
      self.__player_health += 20 



    def fight(soldier, player1, name1): 

     player1 = user(name1, player1.getHealth(), player1.getPotion()) 
     soldier = user('Soldier', soldier.getHealth(), soldier.getPotion()) 

     p = 0 
     while p == 0: 
      time.sleep(2) 
      attack = input("1 = Attack with weapon, 2 = use potion") 

      if attack == "1": 

       time.sleep(1) 
       print("You strike at your enemy. Soldier's health now is", soldier.minusHealth(number)) 
       print("Soldier hits you back and your health is now at", player1.minusHealth(number)) 

      elif attack == "2": 

       time.sleep(1) 
       print("You use a first aid-kit!") 
       player1.plusHealth(), player1.minusPotion() 

       if player1.getHealth() > 100: 

        player1.setHealth() 
        print("Soldier hits you back and your health is now at", player.minusHealth(number)) 

      elif enemy.getHealth() <= 0: 

        print("You have won the fight!") 
        s = 2 


    def main(): 
     name1 = input("What would you like your player to be named?") 
     time.sleep(1) 

     player1 = user(name1, 100, 0) 
     soldier = user('Soldier', 80, 0) 

     print("Your characters stats are: Health:", player1.getHealth()) 
     time.sleep(2) 

     soldier.setHealth(80) 

     fight(soldier, player1, name1) 

     booty1 = input("Type ' 1 ' to loot the enemy") 
     if booty1 == "1": 
      print("You find two first-aid kits") 
      player1.__plusPotion(2) 

    main() 
+0

你確定這不是你的縮進一個問題嗎?你的班級裏有主要的代碼。嘗試把它拿出來。 – 2014-10-03 04:40:14

+0

按照慣例,大部分大寫一個類的名字。所以這將是'類用戶(...)' – dawg 2014-10-03 04:56:24

回答

0

主要是縮進就像一個類的方法

取消縮進主通話和定義

+0

這工作,但現在我得到以下錯誤: '代碼'Traceback(最近調用最後): 文件「C:/用戶/ kensai /桌面/(3/project/fight.py),第99行,在 main() 文件「C:/Users/kensai/Desktop/lab3/project/fight.py」,行87,在主 print(「Your字符統計是:健康:「,player1.getHealth()) AttributeError:'用戶'對象沒有屬性'getHealth' – kensai01 2014-10-03 04:44:32

+1

相同的縮進錯誤 - 將戰鬥和初始化之間的所有方法拉到左邊 – 2014-10-03 04:47:16

+0

爲了確保清楚,從getName()到getHealth()並將它放入它以便它在類中。然後縮小下面的所有內容,所以它在主代碼中 – Andy 2014-10-03 05:25:01