【发布时间】:2020-09-25 12:56:30
【问题描述】:
我最近开始使用 pygame 并尝试制作一个蛇游戏,我在其中遇到了这个错误。
这是我的代码!
import pygame
import random
import time
pygame.init()
print("SELECT LEVEL:\n"
"EASY\n"
"MEDIUM\n"
"HARD\n"
"DIFFICULT\n")
level=input()
if level =="easy" or "EASY":
fps=35
elif level =="medium" or "MEDIUM":
fps=50
elif level =="hard" or "HARD":
fps=80
elif level =="difficult" or "DIFFICULT":
fps=110
win=pygame.display.set_mode((600,600))
pygame.display.set_caption("SNAKE GAME")
clock=pygame.time.Clock()
x=10
y=10
dim=10
vel=5
snake_pos=[]
def snake(dim,snake_pos):
for x in snake_pos:
pygame.draw.rect(win, (255, 0, 0), [x[0], x[1], dim, dim])
def snakegame():
gameover=False
gameend=False
x1=600/2
y1=600/2
x1_change=0
y1_change=0
snakelist=[]
length_of_snake=1
foodx=round(random.randrange(0,600-dim)/10.0)*10.0
foody=round(random.randrange(0,600-dim)/10.0)*10.0
while not gameover:
while gameend==True:
score=length_of_snake-1
score_font=pygame.font.SysFont("comimsansms",45)
value=score_font.render("Your score is:"+str(score),True,(0,0,255))
win.blit(value,[600/3,600/5])
pygame.display.update()
for event in pygame.event.get():
if event.type==pygame.QUIT:
gameend=False
gameover=True
#win.fill((0,0,0))
for event in pygame.event.get():
if event.type==pygame.QUIT:
gameover=True
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_LEFT:
x1_change=-snake_pos
y1_change=0
if event.key == pygame.K_RIGHT:
x1_change = snake_pos
y1_change = 0
if event.key==pygame.K_UP:
y1_change=-snake_pos
x1_change=0
if event.key==pygame.K_DOWN:
y1_change=snake_pos
x1_change=0
if x1>=600 or x1<0 or y1>=600 or y1<0:
gameend=True
x1=x1+x1_change
y1=y1+y1_change
win.fill((0,0,0))
pygame.draw.rect(win,(255,255,0),[foodx,foody,dim,dim])
snake_head=[]
snake_head.append(x1)
snake_head.append(y1)
snake_pos.append(snake_head)
if len(snake_pos)>length_of_snake:
del snake_pos[0]
for x in snake_pos[:-1]:
if x==snake_head:
gameend=True
snake(dim,snake_pos)
pygame.display.update()
if x1==foodx and y1==foody:
foodx = round(random.randrange(0, 600 - dim) / 10.0) * 10.0
foody = round(random.randrange(0, 600 - dim) / 10.0) * 10.0
length_of_snake=length_of_snake+1
clock.tick(fps)
pygame.quit()
snakegame()
运行它显示屏幕后......但是当我尝试移动它时......它给出了这个错误消息。 尝试了一切,但没有任何效果
Traceback (most recent call last):
File "C:/pypy/projects/snakeGame.py", line 112, in <module>
snakegame()
File "C:/pypy/projects/snakeGame.py", line 87, in snakegame
x1=x1+x1_change
TypeError: unsupported operand type(s) for +: 'float' and 'list'
我正在使用 pycharm anaconda 3.7,如果有人可以提供帮助会很高兴
【问题讨论】:
-
snake_pos是一个列表,您将其分配给x1_change。然后稍后将x1_change添加到 x 这是一个浮点数。