0
私はPythonの単なる初心者です。私は別のリストの中からリストの1つを削除するときにいくつか問題があるようです。リスト内にリストが1つしかない場合は、コードは完璧に機能しますが、リスト内に2つのリストがある場合、そのうちの1つを削除するとプログラムがクラッシュします。Python:リスト内のリストを削除すると、IndexError:リストのインデックスが範囲外になります
import pygame
import math
pygame.init()
BLACK = ( 0, 0, 0)
WHITE = (255, 255, 255)
GREEN = ( 0, 255, 0)
RED = (255, 0, 0)
BLUE = ( 0, 0, 255)
PI = math.pi
size = (700, 500)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Arcade game!")
background_image = pygame.image.load("bg_one.jpg").convert()
player_image = pygame.image.load("player.png").convert()
player_image.set_colorkey(BLACK)
click_sound = pygame.mixer.Sound("laser5.ogg")
done = False
clock = pygame.time.Clock()
bullets = []
def create_bullet(mpos):
bullets.insert(len(bullets), [mpos[0]+50, mpos[1]])
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == pygame.MOUSEBUTTONDOWN:
click_sound.play()
create_bullet(pygame.mouse.get_pos())
screen.fill(BLACK)
# Hide mouse, etc.
pygame.mouse.set_visible(False)
# Game Logic
player_position = pygame.mouse.get_pos()
x = player_position[0]
y = player_position[1]
if not len(bullets) <= 0:
for i in range(len(bullets)):
if bullets[i][1] < 0:
print (bullets)
bullets.remove(bullets[i])
print (bullets)
else:
bullets[i][1] -= 5
# Drawing code goes here
screen.blit (background_image, [0, 0])
for i in range(len(bullets)):
pygame.draw.ellipse(screen, GREEN, [bullets[i][0], bullets[i][1], 4, 4])
screen.blit (player_image, [x, y])
pygame.display.flip()
clock.tick(60)
print(bullets)
pygame.quit()
EDIT:エラーを含めるのを忘れました。ここには
Traceback (most recent call last):
File "main.py", line 52, in <module>
bullets.remove(bullets.index(i))
ValueError: 0 is not in list
をあなたは申し訳ありませんが、エラーメッセージ – PyNEwbie
@PyNEwbieを共有する必要があります。私はちょうどそれを追加した。 –
あなたのエラーメッセージ 'bullets.remove(bullets.index(i))'はソースコード行 'bullets.remove(bullets [i])'と一致しません。 –