2017-06-09 15 views
0

私はエラーを取得してきた:リストのインデックスが範囲外であり、理由を理解できません。

私は投げ、それが範囲外にある場合、削除する短剣をコーディングしようとしています私のコードで

line 102, in <module> shot[2] += shoty IndexError: list index out of range

。私はリストエラーが何を意味するのか理解しています。どのように私のコードに影響を与えているのか分かりませんし、どんな助けも大歓迎です!

これが問題に関連している私のコードの一部です:

daggers = [] 
daggerPlayer = pygame.image.load(daggerImage.png) 

    for shot in daggers: 
    index = 0 
    shotx = math.cos(shot[0])*10 
    shoty = math.sin(shot[0])*10 
    shot[1] += shotx 
    shot[2] += shoty 
    if (shot[1] < -64) or (shot[1] > 900) or (shot[2] < -64) or (shot[2]> 600): 
     daggers.pop(index) 
    index +=1 

    for shoot in daggers: 
     daggerOne = pygame.transform.rotate(daggerPlayer, 360 - shoot[0]*57.29) 
     screen.blit(daggerOne, (shoot[1], shoot[2])) 

編集:ここに私のコードの全体が

#Load Images 
peterPlayer = pygame.image.load('pixelPirateOne.png)' 
nightBackground = pygame.image.load ('NightSky.png') 
daggerPlayer = pygame.image.load('daggerImage.png') 

#Settting Variables for Moving Character 
xPlayer = 200 
yPlayer = 275 
dxPlayer = 0 
dyPlayer = 0 
playerPosition = (200,275) 
accuracyShot = [0,0] 
daggers = [] 

def quitGame(): 
    pygame.quit() 
    sys.exit() 

go = True 
while go: 

#Blit The Background  
    screen.blit(nightBackground, (0,0)) 

#Learned about atan2 from --> https://docs.python.org/2/library/math.html 
#Allows To Rotate Player With Mouse  
    mousePosition = pygame.mouse.get_pos() 
    angle = math.atan2(mousePosition[1]-(yPlayer+32),mousePosition[0]-(xPlayer+26)) 
    playerRotate = pygame.transform.rotate(peterPlayer, 360-angle*57.29) 
    playerPositionNew = (xPlayer-playerRotate.get_rect().width/2, yPlayer-playerRotate.get_rect().height/2) 
    screen.blit(playerRotate, playerPositionNew) 
    pygame.display.update() 

#Quit Game 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
       quitGame() 

#Move Player- Note: Make this portion fluid; it's choppy as of now     
     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       dxPlayer -= 15 
      elif event.key == pygame.K_RIGHT: 
       dxPlayer += 15 
      elif event.key == pygame.K_UP: 
       dyPlayer -= 15 
      elif event.key == pygame.K_DOWN: 
       dyPlayer += 15 

     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: 
       dxPlayer = 0 
      elif event.key == pygame.K_UP or event.key == pygame.K_DOWN: 
       dyPlayer = 0 

     xPlayer = xPlayer + dxPlayer 
     yPlayer = yPlayer + dyPlayer 
     pygame.display.update() 

     if event.type == pygame.MOUSEBUTTONDOWN: 
      mousePosition = pygame.mouse.get_pos() 
      accuracyShot[1] += 1 
      daggers.append([math.atan2(mousePosition[1]-(playerPositionNew[1]+32), mousePosition[0]-(playerPositionNew[0]+26)), playerPositionNew[1]+32]) 

#Learned about cos and sin in python from --> https://docs.python.org/2/library/math.html 
#Learned about .pop from --> https://docs.python.org/2/tutorial/datastructures.html 
    for shot in daggers: 
     index = 0 
     shotx = math.cos(shot[0])*10 
     shoty = math.sin(shot[0])*10 
     shot[1] += shotx 
     shot[2] += shoty 
     if (shot[1] < -64) or (shot[1] > 900) or (shot[2] < -64) or (shot[2]> 600): 
      daggers.pop(index) 
     index +=1 

     for shoot in daggers: 
      daggerOne = pygame.transform.rotate(daggerPlayer, 360 - shoot[0]*57.29) 
      screen.blit(daggerOne, (shoot[1], shoot[2])) 
+1

また、 'daggers'の例の値を追加できますか? – pramod

+0

すみません。私はかなり理解していないのですか?あなたは、コード内の段落がどこに追加されているのかを意味しますか? – Student

+0

画面の初期化とインポートを別にして、コード全体を追加しました。今はっきりしていることを願っています! – Student

答えて

0

であるあなたが短剣に追加するリストには2つだけを持っていますshot[2]を呼び出すことで、3番目にアクセスしようとしているので、そのエラーが発生します。 2つの要素は、ショット[0]とショット[1]でなければなりません。私はscreen.blit(daggerOne, (shoot[1], shoot[2]))でも同じミスをしていると思います。

関連する問題