2016-12-02 31 views
0

原諒我,如果這只是一個超級簡單的解決方案,因爲我對Python很新穎。現在我試圖製作一個基本的視頻遊戲,並且爲了節省空間,我決定爲一次戰鬥遇到一個模塊 - 這樣當我爲每次遭遇編寫代碼時所要做的就是運行該模塊中的函數,只需要寫出敵人的獨特變量。但是,代碼需要知道玩家的HP,或者玩家擁有什麼樣的武器。我試圖在函數模塊中的變量之前放置global,但它當然不起作用,因爲它引用了模塊中的全局變量,而不是主要的遊戲文件。還是有另一種方式去解決這個問題?如果你需要我附上我的代碼,我會很樂意這樣做。讓模塊文件使用全局變量?

編輯:繼承模塊中的代碼(稱爲combat)。我希望它做的是主文件的代碼只是說:

combat.combat(3, "mysterious creature", 12, 2, 4, 3, "claws", 5, 0) 

其中,關閉基於我粗淺的認識,是我編輯的變量對每個oppoent,從該行的模塊文件了。

def combat(enemylevel, enemyname, enemyhp, enemydefense, enemystrength, 
      enemyattack, enemyweaponattack, enemygp, run): 

基於你們的困惑我猜我正在做一些非常基本的錯誤。請原諒我的(最有可能)cringey和ineffecient代碼編寫:

import random 
import math 
def combat(enemylevel, enemyname, enemyhp, enemydefense, enemystrength, 
      enemyattack, enemyweaponattack, enemygp, run): 
    global xp 
    global hp 
    global maxhp 
    global gp 
    global weapon_attack 
    global weapon 
    levelandname = "level" , enemylevel, enemyname 
    print("You draw your weapon and prepare for battle. You are fighting a", 
      levelandname, ".") 
    while enemyhp > 0: 
     if enemyhp > 0: 
      print() 
      attackorrun = input("Do you wish to attack or run? ") 
      if attackorrun == "attack" or "a": 
       print("You" , weapon_attack , "your" , weapon, "at the", 
         enemyname) # this is where the first error happens, 
           # says weapon_attack isn't defined. 
       attackroll = random.randint(1, 20) 
       attackroll = (attackroll+(math.floor(attack/2))) 

我可能仍然留下的東西不清楚,請隨時告訴我別的做某件事,或者問我一些東西。

+0

你瞭解了哪些功能?如果沒有,請閱讀功能。你需要函數,而不是全局變量。 – user2357112

+0

是的,你可以請你出示你的代碼嗎?或者至少有一些功能模塊 – rassar

+0

等,你正在使用函數?在第一次閱讀時,我認爲你只是將所有模塊的代碼放在頂層。在這種情況下,你應該閱讀函數參數,這是告訴一個函數需要知道的事情的標準方法。 – user2357112

回答

0

使用大量的全局變量會變得混亂。它沒有提供很大的靈活性,而且正如你發現的那樣,它很難從其他模塊訪問這些變量。

許多程序員會避免在函數中使用全局語句,函數需要的任何數據都應該以其他方式提供。

使用容器對象可能是一個很好的開始,將相關的變量保存在一起,可能在dictionary。你可以通過一個敵人的字典(HP,防禦,力量等)和一個玩家字典(XP,HP,武器等)進入你的功能。這將使您可以訪問函數中的這些值,並且該函數甚至可以修改這些值(因爲您將傳遞object reference)。

enemy = {'hp': 100, 'weapon': 'axe', 'strength': 50} 
player = {'xp': 22, 'hp': 150, 'weapon': 'sword'} 
def combat(player, enemy): 
    #calculate results of combat 
    player['hp'] = player['hp'] - damage 

另一種策略可能是使用classes。類是可以包含函數和變量的對象定義。你可以實例化你的類的多個實例。例如敵方物體(敵人類的實例)將包含敵方hp變量和在戰鬥中修改它的功能。

+0

非常感謝,我會嘗試這兩種。希望在整個這個項目中,我對Python的理解和效率將繼續提高:) – Wumpoop