【问题标题】:Unsupported operand type(s) for +: 'float' and 'list'+ 不支持的操作数类型:“float”和“list”
【发布时间】: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 这是一个浮点数。

标签: python pygame


【解决方案1】:

您的代码正在尝试将列表添加到整数。 x1_changey1_change 是纯整数,但 snake_pos 是...蛇身体部位的列表我猜

我怀疑你应该在你的钥匙处理代码中使用vel(速度?)来移动蛇头:

    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=-vel
                y1_change=0
            if event.key == pygame.K_RIGHT:
                x1_change = vel
                y1_change = 0
            if event.key==pygame.K_UP:
                y1_change=-vel
                x1_change=0
            if event.key==pygame.K_DOWN:
                y1_change=vel
                x1_change=0

进行此更改可缓解该特定错误,并允许用户移动方块。

【讨论】:

    猜你喜欢
    • 2015-09-10
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多