簡體   English   中英

錯誤:在游戲代碼中列出超出范圍的索引

[英]Error: List index out of range in game code

我遇到了列表索引錯誤的問題,代碼可能不是最清晰的。 但是我對用 python 編碼只知道這么多,但我知道的足以編寫一個游戲。

該函數用於的代碼:

#Checks if the move counter is more than 3, if it is, the player gets to decide what he/she wants to do
    if Moves != 0:
        Do = input('What do you do? Help to see all commands ')

        #Tests for if the player wants a magic spell
        if Do == 'Magic':
            if Moves == 3:
                ListToDo = MagicDmg(ListToDo, Moves)
                if ListToDo[0] == 'Ice' or 'Fire' or 'Bolt':
                    Mana = CheckMagicCost1(ListToDo, Mana, Moves)
                else:
                    Moves = Moves - 1
            elif Moves == 2:
                ListToDo = MagicDmg(ListToDo, Moves)
                Mana = CheckMagicCost2(ListToDo, Mana, Moves)
                Moves = Moves - 1
            else:
                ListToDo = MagicDmg(ListToDo, Moves)
                Mana = CheckMagicCost3(ListToDo, Mana, Moves)
                Moves = Moves - 1

#This function does not handle damage
def MagicDmg(ListToDo, Moves):
    print('Which magic? Ice, Fire or Bolt')
    MagicDo = input()
    if MagicDo != 'Ice' or 'Fire' or 'Bolt':
        if MagicDo == 'Ice':
            ListToDo.append('Ice')
        elif MagicDo == 'Fire':
            ListToDo.append('Fire')
        elif MagicDo == 'Bolt':
            ListToDo.append('Bolt')
    else:
        LIstToDo.remove(MagicDo)
        print('That is not a valid spell')
        Moves = Moves + 1
    return(ListToDo)

#Subtracts the mana cost of spells from mana
def CheckMagicCost1(ListToDo, Mana, Moves):
    if ListToDo[0] and Mana >= 10 == 'Ice':
        Mana = Mana - 10
    elif ListToDo[0] and Mana >= 15 == 'Fire':
        Mana = Mana - 15
    elif ListToDo[0] and Mana >= 25 == 'Bolt':
        Mana = Mana - 25
    else:
        print('You do not have enough Mana')
        Moves = Moves + 1
    return(Mana)

def CheckMagicCost2(ListToDo, Mana, Moves):
    if ListToDo[1] and Mana >= 10 == 'Ice':
        Mana = Mana - 10
    elif ListToDo[1] and Mana >= 15 == 'Fire':
        Mana = Mana - 15
    elif ListToDo[1] and Mana >= 25 == 'Bolt':
        Mana = Mana - 25
    else:
        print('You do not have enough Mana')
        Moves = Moves + 1
    return(Mana)

def CheckMagicCost3(ListToDo, Mana, Moves):
    if ListToDo[2] and Mana > 9 == 'Ice':
        Mana = Mana - 10
    elif ListToDo[2] and Mana > 14 == 'Fire':
        Mana = Mana - 15
    elif ListToDo[2] and Mana > 24 == 'Bolt':
        Mana = Mana - 25
    else:
        print('You do not have enough Mana')
        Moves = Moves + 1
    return(Mana)

結果:

A Azure Drake appeared! With 500 HP!

HP = 250 Mana = 250
Moves left: 3 

Boss's HP: 500 

What do you do? Help to see all commands Magic
Which magic? Ice, Fire or Bolt
i (False spell)
Traceback (most recent call last):
  File "D:\Python\Battle Test V2.py", line 186, in <module>
    if ListToDo[0] != 'Ice' or 'Fire' or 'Bolt':
IndexError: list index out of range

我不能立即判斷,如果這是你唯一的問題,但此行肯定不行的。

if MagicDo != 'Ice' or 'Fire' or 'Bolt':

真正要檢查的是以下內容:

if (MagicDo != 'Ice') or ('Fire' != None) or ('Bolt' != None):

對此的可能解決方法是更改​​為:

if MagicDo in(['Ice','Fire','Bolt']):

這將檢查MagicDo是否是您想要的三個法術之一。 同樣,我不確定這是否是您唯一的問題,但這絕對是一個問題。

編輯:我還注意到您的CheckMagicCost函數中存在問題。 您的任何條件都不會做您希望它們做的事情。 例如,線

if ListToDo[0] and Mana >= 10 == 'Ice':

確實在檢查以下內容

if (ListToDo[0] != None) and ((Mana >= 10) == 'Ice'):

我猜你想要的是更像以下內容:

if ListToDo[0] == 'Ice' and Mana >= 10:

此更改應傳播到CheckMagicCost1CheckMagicCost2CheckMagicCost3函數中的其余條件。

如果沒有錯誤代碼,就沒有什么可做的了,但我的直覺是你會在函數中遇到這些類型的語句的麻煩:

if ListToDo[1]

包裝在 try 塊中並捕獲 IndexError 可能更好嗎? 只是一個想法

try:
    #code
except IndexError:
    #contingency plan

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM