'int' 对象不可订阅 pygame
'int' object is not subscriptable pygame
我写了我的代码,它昨天可以工作,但现在不行了,我不知道它从哪里来请帮忙:/我重新启动我的电脑,卸载 python 并重新安装,我不知道不明白
我认为我的列表 pos 和 snake_position 不工作
那么这是我的代码:
```import pygame
import time
import random
snake_speed = 60
#fenêtre
window_x = 700
window_y = 500
#Couleurs
black = pygame.Color(0,0,0)
white = pygame.Color(255,255,255)
red = pygame.Color(255,0,0)
green = pygame.Color(0,255,0)
blue = pygame.Color(0,0,255)
pygame.init()
pygame.display.set_caption('Snake Game')
game_window = pygame.display.set_mode((window_x, window_y))
fps = pygame.time.Clock()
snake_position = [100, 50]
#snake body
snake_body = [100, 50]
#food
food_position = [random.randrange(1, (window_x//10)) * 10,
random.randrange(1, (window_y//10)) * 10]
food_spawn = True
#direction
direction = ''
change_to = direction
#score
score = 0
#def score
def show_score(choice, color, font, size):
score_font = pygame.font.SysFont('Verdana', 14)
score_surface = score_font.render('Score : ' + str(score), True, green)
score_rect = score_surface.get_rect()
game_window.blit(score_surface, score_rect)
def game_over():
my_font = pygame.font.SysFont('Verdana',40)
game_over_surface = my_font.render('Your score is : ' + str(score), True, red)
game_over_rect = game_over_surface.get_rect()
game_over_rect.midtop = (300,300)
game_window.blit(game_over_surface, game_over_rect)
pygame.display.flip()
time.sleep(5)
pygame.quit()
quit()
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_z:
change_to = 'z'
if event.key == pygame.K_d:
change_to = 'd'
if event.key == pygame.K_q:
change_to = 'q'
if event.key == pygame.K_s:
change_to = 's'
if change_to == 'z' and direction != 's':
direction = 'z'
if change_to == 's' and direction != 'z':
direction = 's'
if change_to == 'd' and direction != 'q':
direction = 'd'
if change_to == 'q' and direction != 'd':
direction = 'q'
if direction == 'z':
snake_position[1] -= 10
if direction == 's':
snake_position[1] += 10
if direction == 'q':
snake_position[0] -= 10
if direction == 'd':
snake_position[0] += 10
snake_body.insert(0, list(snake_position))
if snake_position[0] == food_position[0] and snake_position[1] == food_position[1]:
score +=10
food_spawn = False
else:
snake_body.pop()
if not food_spawn:
food_position = [random.randrange(1, (window_x//10)) * 10,
random.randrange(1, (window_y//10)) * 10]
food_spawn = True
game_window.fill(black)
for pos in snake_body:
pygame.draw.rect(game_window, green, pygame.Rect(pos[0], pos[1], 10, 10))
pygame.draw.rect(game_window, white, pygame.Rect(food_position[0], food_position[1], 10, 10))
if snake_position[0] < 0 or snake_position[0] > window_x-10:
game_over()
if snake_position[1] < 0 or snake_position[1] > window_y-10:
game_over()
for block in snake_body[1:]:
if snake_position[0] == block[0] and snake_position[0] == block[1]:
game_over()
show_score(1, white, 'Verdana', 20)
if event.type == pygame.QUIT:
pygame.quit()
pygame.display.update()
fps.tick(snake_speed)```
这是我的错误:
pygame.draw.rect(game_window, green, pygame.Rect(pos[0], pos[1], 10, 10))
TypeError: 'int' object is not subscriptable
如果你能帮助我,那就太好了:)
出现此错误是因为 pos
只是一个整数。所以 pos[0]
没有意义:整数不可下标。
错误来自 snake_body
的初始化,它应该是您代码中的位置列表,而您将其初始化为单个位置。所以你应该像这样初始化它:
snake_body = [[100, 50]] # instead of [100, 50]
我写了我的代码,它昨天可以工作,但现在不行了,我不知道它从哪里来请帮忙:/我重新启动我的电脑,卸载 python 并重新安装,我不知道不明白
我认为我的列表 pos 和 snake_position 不工作
那么这是我的代码:
```import pygame
import time
import random
snake_speed = 60
#fenêtre
window_x = 700
window_y = 500
#Couleurs
black = pygame.Color(0,0,0)
white = pygame.Color(255,255,255)
red = pygame.Color(255,0,0)
green = pygame.Color(0,255,0)
blue = pygame.Color(0,0,255)
pygame.init()
pygame.display.set_caption('Snake Game')
game_window = pygame.display.set_mode((window_x, window_y))
fps = pygame.time.Clock()
snake_position = [100, 50]
#snake body
snake_body = [100, 50]
#food
food_position = [random.randrange(1, (window_x//10)) * 10,
random.randrange(1, (window_y//10)) * 10]
food_spawn = True
#direction
direction = ''
change_to = direction
#score
score = 0
#def score
def show_score(choice, color, font, size):
score_font = pygame.font.SysFont('Verdana', 14)
score_surface = score_font.render('Score : ' + str(score), True, green)
score_rect = score_surface.get_rect()
game_window.blit(score_surface, score_rect)
def game_over():
my_font = pygame.font.SysFont('Verdana',40)
game_over_surface = my_font.render('Your score is : ' + str(score), True, red)
game_over_rect = game_over_surface.get_rect()
game_over_rect.midtop = (300,300)
game_window.blit(game_over_surface, game_over_rect)
pygame.display.flip()
time.sleep(5)
pygame.quit()
quit()
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_z:
change_to = 'z'
if event.key == pygame.K_d:
change_to = 'd'
if event.key == pygame.K_q:
change_to = 'q'
if event.key == pygame.K_s:
change_to = 's'
if change_to == 'z' and direction != 's':
direction = 'z'
if change_to == 's' and direction != 'z':
direction = 's'
if change_to == 'd' and direction != 'q':
direction = 'd'
if change_to == 'q' and direction != 'd':
direction = 'q'
if direction == 'z':
snake_position[1] -= 10
if direction == 's':
snake_position[1] += 10
if direction == 'q':
snake_position[0] -= 10
if direction == 'd':
snake_position[0] += 10
snake_body.insert(0, list(snake_position))
if snake_position[0] == food_position[0] and snake_position[1] == food_position[1]:
score +=10
food_spawn = False
else:
snake_body.pop()
if not food_spawn:
food_position = [random.randrange(1, (window_x//10)) * 10,
random.randrange(1, (window_y//10)) * 10]
food_spawn = True
game_window.fill(black)
for pos in snake_body:
pygame.draw.rect(game_window, green, pygame.Rect(pos[0], pos[1], 10, 10))
pygame.draw.rect(game_window, white, pygame.Rect(food_position[0], food_position[1], 10, 10))
if snake_position[0] < 0 or snake_position[0] > window_x-10:
game_over()
if snake_position[1] < 0 or snake_position[1] > window_y-10:
game_over()
for block in snake_body[1:]:
if snake_position[0] == block[0] and snake_position[0] == block[1]:
game_over()
show_score(1, white, 'Verdana', 20)
if event.type == pygame.QUIT:
pygame.quit()
pygame.display.update()
fps.tick(snake_speed)```
这是我的错误:
pygame.draw.rect(game_window, green, pygame.Rect(pos[0], pos[1], 10, 10))
TypeError: 'int' object is not subscriptable
如果你能帮助我,那就太好了:)
出现此错误是因为 pos
只是一个整数。所以 pos[0]
没有意义:整数不可下标。
错误来自 snake_body
的初始化,它应该是您代码中的位置列表,而您将其初始化为单个位置。所以你应该像这样初始化它:
snake_body = [[100, 50]] # instead of [100, 50]