2013-03-05 42 views
2

我已經制定了如何做大部分的這個東西在過去的幾天我越來越不正確,但是這所有的經驗,我有,所以這可能很簡單。 無論如何,一切都很順利,直到我試圖使一些公式複雜化,或者至少改變他們使用的值。這是我正在與之合作。我做Python中的龍與地下城風格的遊戲,但如果回報

class EnemyStats(): 
    def Ename(self): 
     return #Not sure What i should put in these spots... 
    def EBaseDodge(self): 
     return 
    def EnemyEvasion(self): 
     return 
    def ENickRange(self): 
     return 
    def EBaseAttack(self): 
     return 
    def EWeaponAttack(self): 
     return 
    def EAttackRating(self): 
     return 
    def EnemyDefense(self): 
     return 
    def EAttackDamage(self): 
     return 
    def Damage(self): 
     return ((PAttackDamage-EnemyDefense)if (PAttackDamage-EnemyDefense>0) else 0); 
    def EDamage(self): 
     return ((EAttackDamage-PDefense) if ((EAttackDamage-PDefense)>0) else 0); 
    def LightAttackDamage(self): 
     return int(LightAttackDamage == (Damage * 0.72)); 
    def HeavyAttackDamage(self): 
     return (Damage * 1.28); 
    def LightNicked(self): 
     return (LightAttackDamage/2); 
    def HeavyNicked(self): 
     return (HeavyAttackDamage/2); 
    def Nicked(self): 
     return (Damage/2) 

    def Estats(self): 
     Ename = raw_input('Target Enemy Name: '); 
     EBaseDodge = int(raw_input('Enter Enemy Dodge: ')); 
     EnemyEvasion = int(raw_input('Enter Enemy Evasion: ')); 
     ENickRange = (EBaseDodge + EnemyEvasion); 
     EBaseAttack = int(raw_input('Enter Enemy Base Attack: ')); 
     EWeaponAttack = int(raw_input('Enter Enemy Weapon Attack(If N/A, 0): ')); 
     EAttackRating = (EBaseAttack + EWeaponAttack); 
     EnemyDefense = int(raw_input('Enter Enemy Defense: ')); 
     EAttackDamage = int(raw_input('Enter Enemy Attack Damage: ')); 
     Damage = ((PAttackDamage-EnemyDefense)if (PAttackDamage-EnemyDefense>0) else 0); 
     EDamage = ((EAttackDamage-PDefense) if ((EAttackDamage-PDefense)>0) else 0); 
     LightAttackDamage = (Damage * 0.72); 
     HeavyAttackDamage = (Damage * 1.28); 
     LightNicked = (LightAttackDamage/2); 
     HeavyNicked = (HeavyAttackDamage/2); 
     Nicked = (Damage/2) 

然後它被引用這個。

def PLightAttackForm():#light attack 
    print 'Light attack!'; 
    d = dice() 
    lightbase = d.LightAttack() 
    EE = EnemyStats() 
    if lightbase <= EE.EBaseDodge: 
     print 'You rolled', lightbase, ', Miss!', 0, 'Damage!' 
    elif lightbase > EE.ENickRange: 
     print 'You rolled', lightbase, ', Hit!', EE.LightAttackDamage, 'Damage!' 
    elif lightbase < EE.ENickRange: 
     print 'You rolled', lightbase, ', Nicked!', EE.LightNicked, 'Damage!' 
    else: 
     print lightbase 

而一切都變得驚人,沒有錯誤,但我得到這個。

輕型攻擊! 你捲了700,小姐! 0傷害! #Should是一個打擊和傷害

普通攻擊! 你滾了278,小姐! 0傷害! #should被擊中並破壞

重磅出擊! 你滾了135,小姐! 0傷害!#should是尼克和損壞

我敢肯定,這只是我真的不知道,但如果你能幫助我走出這將是驚人的! 謝謝!

而且,這裏是我寫的代碼。可能有一些冗餘...:D

import random 
Name = raw_input("Enter Name: ") 
#EName=== 
#EBaseDodge = int(raw_input("Enter Enemy Dodge: ")) 
PBaseDodge = int(input('Enter Base Dodge: ')) 
#EnemyEvasion = int(raw_input("Enter Enemy Evasion: ")) 
PEvasion = int(input('Enter Evasion: ')) 
#ENickRange = (EBaseDodge + EnemyEvasion) 
PNickRange = (PBaseDodge + PEvasion) 
PBaseAttack = int(raw_input("Enter Base Attack: ")) 
#EBaseAttack=== 
PWeaponAttack = int(raw_input("Enter Weapon Attack: ")) 
#EWeaponAttack=== 
PAttackRating = (PBaseAttack + PWeaponAttack) 
#EAttackRating = (EBaseAttack + EWeaponAttack) 
#EnemyDefense = int(raw_input("Enter Enemy Defense: ")) 
PDefense = int(input('Enter Defense: ')) 
PAttackDamage = int(raw_input("Enter Attack Damage: ")) 
#EAttackDamage=== 
#Damage = (PAttackDamage-EnemyDefense) 
#EDamage = (EAttackDamage-PDefense) 
#LightAttackDamage = (Damage * 0.72) 
#HeavyAttackDamage = (Damage * 1.28) 
#LightNicked = (LightAttackDamage/2) 
#HeavyNicked = (HeavyAttackDamage/2) 
#Nicked = Damage/2 


class dice(): 
     def NormalAttack(self): 
      return random.randint(1, PAttackRating); 
     def LightAttack(self): 
      return random.randint(1, (int(PAttackRating*1.25))); 
     def HeavyAttack(self): 
      return random.randint(1, (int(PAttackRating*0.75))); 


#def att(): 
# d = dice() 
# base = d.roll() 
# if base <= a: 
#  print 'You rolled', base, ', Miss!', 0, 'Damage!' 
# elif base > b: 
#  print 'You rolled', base, ', Hit!', Damage, 'Damage!' 
# elif base < b: 
#  print 'You rolled', base, ', Nicked!', Nicked, 'Damage!' 
# else: 
#  print base 

####################NEW CODE####################################### 
def Menu(): 
    print '(1)Attack'; 
    print '(2)Choose Enemy'; 
    print '(3)Charge'; 
    print '(4)Item'; 


def select(): 
    choice = input('Enter Choice: '); 
    EE = EnemyStats() 
    if (choice == 1): 
     Attacktype(); 
    elif (choice == 2): 
     EE.Estats(); 
    elif (choice == 3): 
     Charge(); 
    elif (choice == 4): 
     ItemSelection(); 
    else: 
     print 'There are Numbers for a reason Nuub!',; 

##############Enemy Stats############ 

class EnemyStats(): 
    def Ename(self): 
     return 
    def EBaseDodge(self): 
     return 
    def EnemyEvasion(self): 
     return 
    def ENickRange(self): 
     return 
    def EBaseAttack(self): 
     return 
    def EWeaponAttack(self): 
     return 
    def EAttackRating(self): 
     return 
    def EnemyDefense(self): 
     return 
    def EAttackDamage(self): 
     return 
    def Damage(self): 
     return ((PAttackDamage-EnemyDefense)if (PAttackDamage-EnemyDefense>0) else 0); 
    def EDamage(self): 
     return ((EAttackDamage-PDefense) if ((EAttackDamage-PDefense)>0) else 0); 
    def LightAttackDamage(self): 
     return int(LightAttackDamage == (Damage * 0.72)); 
    def HeavyAttackDamage(self): 
     return (Damage * 1.28); 
    def LightNicked(self): 
     return (LightAttackDamage/2); 
    def HeavyNicked(self): 
     return (HeavyAttackDamage/2); 
    def Nicked(self): 
     return (Damage/2) 

    def Estats(self): 
     Ename = raw_input('Target Enemy Name: '); 
     EBaseDodge = int(raw_input('Enter Enemy Dodge: ')); 
     EnemyEvasion = int(raw_input('Enter Enemy Evasion: ')); 
     ENickRange = (EBaseDodge + EnemyEvasion); 
     EBaseAttack = int(raw_input('Enter Enemy Base Attack: ')); 
     EWeaponAttack = int(raw_input('Enter Enemy Weapon Attack(If N/A, 0): ')); 
     EAttackRating = (EBaseAttack + EWeaponAttack); 
     EnemyDefense = int(raw_input('Enter Enemy Defense: ')); 
     EAttackDamage = int(raw_input('Enter Enemy Attack Damage: ')); 
     Damage = ((PAttackDamage-EnemyDefense)if (PAttackDamage-EnemyDefense>0) else 0); 
     EDamage = ((EAttackDamage-PDefense) if ((EAttackDamage-PDefense)>0) else 0); 
     LightAttackDamage = (Damage * 0.72); 
     HeavyAttackDamage = (Damage * 1.28); 
     LightNicked = (LightAttackDamage/2); 
     HeavyNicked = (HeavyAttackDamage/2); 
     Nicked = (Damage/2) 



#Attacking 
def Attacktype(): 
    print '(1)LightAttack'; 
    print '(2)NormalAttack'; 
    print '(3)HeavyAttack'; 
    print '(4)Use Dem Magicks'; 
    print '(5)Menu(<<This is for nuublets)'; 
    Attchoice = input('Enter Choice: ') 
    if (Attchoice == 1): 
     PLightAttackForm(); 
    elif (Attchoice == 2): 
     PNormalAttackForm(); 
    elif (Attchoice == 3): 
     PHeavyAttackForm(); 
    elif (Attchoice == 4): 
     MagicMenu(); 
    elif (Attchoice == 5): 
     Menu(); 
    else: 
     print 'You wot M8?'; 
     Menu(); 


def PLightAttackForm():#light attack 
    print 'Light attack!'; 
    d = dice() 
    lightbase = d.LightAttack() 
    EE = EnemyStats() 
    if lightbase <= EE.EBaseDodge: 
     print 'You rolled', lightbase, ', Miss!', 0, 'Damage!' 
    elif lightbase > EE.ENickRange: 
     print 'You rolled', lightbase, ', Hit!', EE.LightAttackDamage, 'Damage!' 
    elif lightbase < EE.ENickRange: 
     print 'You rolled', lightbase, ', Nicked!', EE.LightNicked, 'Damage!' 
    else: 
     print lightbase 

def PNormalAttackForm():#Normal attack 
    print 'Normal Attack!'; 
    d = dice() 
    base = d.NormalAttack() 
    EE = EnemyStats() 
    if base <= EE.EBaseDodge: 
     print 'You rolled', base, ', Miss!', 0, 'Damage!' 
    elif base > EE.ENickRange: 
     print 'You rolled', base, ', Hit!', EE.Damage, 'Damage!' 
    elif base < EE.ENickRange: 
     print 'You rolled', base, ', Nicked!', EE.Nicked, 'Damage!' 
    else: 
     print base 

def PHeavyAttackForm():#Heavy Attack 
    print 'Heavy Attack!'; 
    d = dice() 
    heavybase = d.HeavyAttack() 
    EE = EnemyStats() 
    if heavybase <= EE.EBaseDodge: 
     print 'You rolled', heavybase, ', Miss!', 0, 'Damage!' 
    elif heavybase > EE.ENickRange: 
     print 'You rolled', heavybase, ', Hit!', EE.HeavyAttackDamage, 'Damage!' 
    elif heavybase < EE.ENickRange: 
     print 'You rolled', heavybase, ', Nicked!', EE.HeavyNicked, 'Damage!' 
    else: 
     print heavybase 

def MagicMenu():#magic menu() 
    print 'Magic menu!'; 


##############Enemy Stats############ 



####################NEW CODE####################################### 
+2

您沒有將任何參數傳遞給您的方法。我不確定你沒有得到錯誤。 – That1Guy 2013-03-05 21:39:51

+0

我希望我是,這就是我學到這麼多TT_TT – 2013-03-05 21:43:05

+0

只是一種風格的暗示。不要在行末加分號。不要將東西放在不需要它的父親身上。調用你的函數或使它們成爲屬性。 – cmd 2013-03-05 21:52:38

回答

4

由於1Guy說,你沒有傳遞參數給你的函數。在Python中,函數也是對象,您可以將它們與其他對象進行比較。所以當你這樣做時:

if lightbase <= EE.EBaseDodge: 
    print 'You rolled', lightbase, ', Miss!', 0, 'Damage!' 
elif lightbase > EE.ENickRange: 
    print 'You rolled', lightbase, ', Hit!', EE.LightAttackDamage, 'Damage!' 
elif lightbase < EE.ENickRange: 
    print 'You rolled', lightbase, ', Nicked!', EE.LightNicked, 'Damage!' 
else: 
    print lightbase 

lightbase <= EE.EBaseDodge總是評估爲真。

您需要將括號添加到對EBase...方法的調用中。還需要將返回值添加到方法的聲明中。這樣會讓你的功能,看起來像(假設你有一個變量,名爲base_dodge):

def EBaseDodge(self): 
    return base_dodge 

,改變你的IFS到:

if lightbase <= EE.EBaseDodge(): 
    ... 

我不知道爲什麼你要使用的方法所有這些價值都擺在首位。如果這些方法是屬性,則會更有意義。

嘗試刪除所有的方法Enemystats,使您的變量,實例變量:

class EnemyStats: 
    def Estats(self): 
     #Keep this method to set all of the stats and add self. before them like this 
     self.Ename = raw_input('Target Enemy Name: '); 
     self.EBaseDodge = int(raw_input('Enter Enemy Dodge: ')); 
     self.EnemyEvasion = int(raw_input('Enter Enemy Evasion: ')); 
     self.ENickRange = (self.EBaseDodge + self.EnemyEvasion); 
     .... 

所有變量之前把self.它們關聯到你的類(EnemyStats)的一個實例。

然後創建一個新的EnemyStats對象輸入數值:

EE = EnemyStats() 
EE.Estats() # will prompt you for the values 

後,像你本來想,你可以參考你的價值觀面前:

if lightbase <= EE.EBaseDodge: 
    ... 

只要你知道,這並不是最有組織/推薦的做事方式。

+0

不知道先回復誰!謝謝,這發出了錯誤!現在我可以修復它XD。 同時感謝def-> return的幫助! – 2013-03-05 21:52:56

+0

@HunterTracy如果這個答案是正確的,你應該標記它,以幫助未來的用戶識別他們的問題。 – That1Guy 2013-03-05 21:54:00

+0

這不是全部故事。請注意'Estats'方法?如果他這樣稱呼,它會用一個數字代替EBaseDodge方法。我認爲這個數字是他真正想要在這裏比較的。 – abarnert 2013-03-05 21:58:45

1

你從來沒有真正調用過任何你的類方法。您只需將您的值與函數對象本身進行比較,這不是您通常所做的事情。舉例來說,你應該做的:

if lightbase <= EE.EBaseDodge(): 

(注意括號) - 當然,只要你做到這一點,你會得到很多很多的錯誤,因爲有這個代碼的幾個其他問題。