2014-09-26 3 views
-1

Так что это модель для игры, которую я пытаюсь сделать. проблема, с которой я сталкиваюсь, происходит между строками 68 - 75, я думаю. По какой-то причине NMHP или mobHP не обновляются. большое спасибо за любую помощьПеременная не обновляется

То, что я хотел случиться:

Функция должна быть «Толпы Chi» (mchi) меньше, чем «игроки й» (PHI) взять здоровье мобов (mobHP) и вычитают Игрок урон от него вызывает NMHP. то я хочу, чтобы список сбоку функции обновлялся.

##ranbat.py 
##make random battle for Player 

##import random 
##import time 
## 


def mobspawn(): 
    #imports 
    import random 
    import time 
    #list,tup, and dicts 
    plHP = ["30", "40", "50"] 
    gchi = [".5", ".6", ".7", ".8", ".9"] 
    pchi = [".5", ".6", ".7", ".8", ".9"] 
    mchi = [".5", ".6", ".7", ".8", ".9"] 
    dam = ["10", "20", "30", "40", "50", "60",] 
    enList = ["Slime", "Goblin", "Hound", "NyaaTrape", "Navi"] 
    enHP = ["10", "20", "30", "40", "50", "60",] 
    enGen = ["he", "She", "it"] 
    chiC = ["1", "2"] 
    HELP = [("#", "Name", "Description"),("1", "Attack", "Attacks your enemy with equipped weapon"),("2", "Defend", "Use your equipped weapon to defend"),("3", "Heal", "If player has Med_Kit uses it on player"),("3", "Stats", "Prints players stats"),("5", "Finisher", "A secret technique (Has a 50% chance of a insta-kill)"),("6", "HELP", "This comand displays Help")] 
    ######## 
    player = "Oni" 
    ############## 
    #Mob stats # 
    ############## 
    Gen = random.choice(enGen) 
    mobHP = random.randint(10, 60) 
    mob = random.choice(enList) 
    mdam = random.randint(10, 60) 
    mchi = random.randint(1, 9) 
    NMHP = 0 
    mstat = [("HP","NMHP","Damage", "Chi"),(mobHP, NMHP, mdam, mchi)] 
    ##############  
    time.sleep(1) 
    print("Vofa: Oh no whats that!,", player, "protect me") 
    print("") 
    time.sleep(3) 
    #print("here 2 ") 
    print("You have incountered a wild", mob) 
    print("") 
    time.sleep(3) 
    print("Vofa: Looks like", Gen, "has",mobHP , "HP. Best be careful.") 
    print("") 
    ############## 
    #Player stats# 
    ############## 
    plHP = random.randint(10, 60) 
    pldam = random.randint(10, 60) 
    pchi = random.randint(1, 9) 
    plstat = [("HP","Damage", "Chi"),(plHP, pldam, pchi)] 
    ############## 
    batMenDis()  
    player=int(input()) 
    while player !=None: 
     player = int(input()) 

     if player == 1: 
      print("You have chosen option #1 Attack") 
      print("You Attack") 
      time.sleep(3) 
      if (mchi) < (pchi): 
       (NMHP) = (mobHP) - (pldam) 
       (mobHP) = (NMHP) 
       if mobHP < 0: 
        print(mob, "is dead") 
        break 
       else: 
        print(mob,"Has",mobHP,"HP left") 
      if (mchi) > (pchi): 
       (NpHP) = (plHP) - (mdam) 
       (pHP) = (NpHP) 
       if plHP < 0: 
        print("you're almost dead. but you muster the strength to fight for a bit longer to keep vofa safe") 
        (pHP) = (pHP) + random.randint(1, 10) 
       else: 
        print(player,"Has",plHP,"HP left") 
      if (mchi) == (pchi): 
       print("Both you and mob have the same amount of chi") 
       time.sleep(1) 
       print("") 
       print("Coin has been tossed") 
       chiC = random.choice(chiC) 
       if chiC == 1: 
        mobHP = (mobHP) - (pldam) 
        print(mob,"Has",mobHP,"HP left") 
       if chiC == 2: 
        pHP = (plHP) - (mdam) 
        print(player,"Has",plHP,"HP left") 
     batMenDis() 
     if player == 0: 
      #print("here 2") 
      print("You have chosen option number 0") 
      print("Program Now Exiting") 
      time.sleep(2) 
      print("Good Bye. Have a nice day! hope to fight with you again") 
      break 
def batMenDis(): 
    print("") 
    print("What are you going to do") 
    print("") 
    print("1 = Attack") 
    print("2 = Defend") 
    print("3 = Heal") 
    print("4 = Print current Stats") 
    print("5 = Finisher (50% chance of working)") 
    print("6 = HELP") 
def main(): 
    mobspawn() 
main() 
+4

Это не минимальный пример; пожалуйста, уменьшите код, что необходимо для воспроизведения проблемы. – chepner

+1

@AdamSmith: Нет. Во-первых, '(спам)' не является кортежем; Кортежи всегда имеют запятые. Во-вторых, обертывание обеих сторон в 1-кортеже будет иметь тот же эффект, что и обертывание (это было бы глупо, но это не нарушало бы вещи), в то время как обертывание одной стороны, а не другой (если бы не право сторона оказалась каким-то другим итерабельным) raise 'TypeError: объект 'int' не является итерируемым' или подобным. – abarnert

+0

@abarnert Спасибо за исправление. Я все еще боюсь запомнить все тонкости языка, не поднимая переводчика и не пытаясь его выполнить :) –

ответ

1

Проблема не между строками 68 - 75:

if (mchi) < (pchi): 
    (NMHP) = (mobHP) - (pldam) 
    (mobHP) = (NMHP) 
    if mobHP < 0: 
     print(mob, "is dead") 
     break 
    else: 
     print(mob,"Has",mobHP,"HP left") 

обусловлен, когда вы там, ваши повреждения всегда больше, чем HP монстра (HP 1-9 и повреждение 10 -60). Таким образом, результат всегда убивает монстра.

Но если мы посмотрим на другой ветви:

if (mchi) > (pchi): 
    (NpHP) = (plHP) - (mdam) 
    (pHP) = (NpHP) # error here, should be plHP 
    if plHP < 0: 
     print("you're almost dead. but you muster the strength to fight for a bit" 
       "longer to keep vofa safe") 
     (pHP) = (pHP) + random.randint(1, 10) # same here 
    else: 
     print(player,"Has",plHP,"HP left") 

Вы не вычитая ущерб от plHP, но Php (который не определен до этого). Таким образом, plHP остается неизменным.

Смежные вопросы