+ 1
TypeError: list indices must be integers or slices, not tuple
i followed a tutorial on youtube to create a snake game in python via Visual Studio code! this is the error message i keep getting when i press a key to play the game, wondering how to fix. Line of code causing error: self.turns[self.head.pos[:]] = [self.dirnx, self.dirny]
23 odpowiedzi
+ 1
You may use the append method
+ 1
would you mind showing the change i should make?
+ 1
Can u send me the code snippet
+ 1
Of u r question
+ 1
def move(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
keys = pygame.key.get_pressed()
for key in keys:
if keys[pygame.KEY_LEFT]:
self.dirnx = -1
self.dirny = 0
self.turns[self.head.pos[:]] = [self.dirnx, self.dirny]
elif keys[pygame.KEY_RIGHT]:
self.dirnx = 1
self.dirny = 0
self.turns[self.head.pos[:]] = [self.dirnx, self.dirny]
elif keys[pygame.KEY_UP]:
self.dirnx = 0
self.dirny = -1
self.turns[self.head.pos[:]] = [self.dirnx, self.dirny]
elif keys[pygame.K_DOWN]:
self.dirnx = 0
self.dirny = 1
self.turns[self.head.pos[:]] = [self.dirnx, self.dirny]
+ 1
self.turns.append(self.dirnx)
self.turns.append(self.dirny)
+ 1
so the code should look like:
for key in keys:
if keys[pygame.KEY_LEFT]:
self.dirnx = -1
self.dirny = 0
self.turns.append[self.head.pos[:]] = [self.dirnx, self.dirny]
+ 1
append is a method so it will consist of the '()'
And u current program also going wrong
+ 1
Plz be checked with the append function
+ 1
I made the adjustments you suggested, my game window is not closing any more when I press the key to play.
Now i assume i need to do something else within the Def Main() Call to accommodate for the changes i just made
+ 1
def move(self, dirnx, dirny):
self.dirnx = dirnx
self.dirny = dirny
self.pos = (self.pos[0] + self.dirnx, self.pos[1] + self.dirny)
this is the move code
+ 1
def main():
global width, rows, s, snack
width = 500
rows = 20
win = pygame.display.set_mode((width, width))
s = snake((255,0,0), (10,10))
snack = cube(randomSnack(rows, s), color=(0,255,0))
flag = True
clock = pygame.time.Clock()
while flag:
pygame.time.delay(50)
clock.tick(10)
s.move()
redrawWindow(win)
if s.body[0].pos == snack.pos:
s.addCube()
snack = cube(randomSnack(rows, s), color= (0,255,0))
for x in range(len(s.body)):
if s.body[x].pos in list(map(lambda z:z.pos, s.body[x+1:])):
print('Score: ', len(s.body))
message_box("You Lost", "Play Again")
s.reset((10,10))
break
this is the main() call
+ 1
I think ur quite function is not working
+ 1
explain please. do you want me to share the code with you? i can send it via email if you would like.
either way i appreciate your help
+ 1
import sys
def move(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.display.quite()
pygame.quit()
#sys.exit()
If pygame.display.quite() not work u can use sys.exit()
+ 1
No please don't send me the whole code now because I'm so busy for my upcoming board exams😂😂
+ 1
If u have other question for this question u can directly message to my sololearn account
+ 1
thank you❤️ best of luck on your board exams‼️
+ 1
Is it works?