Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame错误';TypeError:参数1必须是pygame.Surface,而不是list';_Python_Python 3.x_Pygame - Fatal编程技术网

Python Pygame错误';TypeError:参数1必须是pygame.Surface,而不是list';

Python Pygame错误';TypeError:参数1必须是pygame.Surface,而不是list';,python,python-3.x,pygame,Python,Python 3.x,Pygame,我正在使用pygame创建一个游戏,但遇到了一个错误,我是pygame的新手。我正在使用python 3.8和pycharm社区版2020.1 以下是我制作游戏的视频: 以下是错误: Traceback (most recent call last): File "C:/Users/user/PycharmProjects/Agam/Python/Pygame.py", line 131, in <module> enemy(enemyX, enemy

我正在使用pygame创建一个游戏,但遇到了一个错误,我是pygame的新手。我正在使用python 3.8和pycharm社区版2020.1

以下是我制作游戏的视频: 以下是错误:

Traceback (most recent call last):
  File "C:/Users/user/PycharmProjects/Agam/Python/Pygame.py", line 131, in <module>
    enemy(enemyX, enemyY)
  File "C:/Users/user/PycharmProjects/Agam/Python/Pygame.py", line 28, in enemy
    screen.blit(enemyImg, (x, y))
TypeError: argument 1 must be pygame.Surface, not list
回溯(最近一次呼叫最后一次):
文件“C:/Users/user/PycharmProjects/Agam/Python/Pygame.py”,第131行,在
敌人(灌肠,灌肠)
文件“C:/Users/user/PycharmProjects/Agam/Python/Pygame.py”,第28行
屏幕。blit(enemyImg,(x,y))
TypeError:参数1必须是pygame.Surface,而不是list
这是我的密码:

import math
import random

import pygame

pygame.init()
# Screen (Pixels by Pixels (X and Y (X = right and left Y = up and down)))
screen = pygame.display.set_mode((800, 600))
running = True
# Title and Icon
pygame.display.set_caption("Space Invaders")
icon = pygame.image.load('Icon.png')
pygame.display.set_icon(icon)
# Player Icon/Image
playerimg = pygame.image.load('Player.png')
playerX = 370
playerY = 480
playerX_change = 0


def player(x, y):
    # Blit means Draw
    screen.blit(playerimg, (x, y))


def enemy(x, y):
    # Blit means Draw
    screen.blit(enemyImg, (x, y))


def fire_bullet(x, y):
    global bullet_state
    bullet_state = "fire"
    screen.blit(bulletimg, (x + 16, y + 10))


def isCollision(enemyX, enemyY, bulletX, bulletY):
    distance = math.sqrt((math.pow(enemyX[i] - bulletX, 2) + (math.pow(enemyY[i] - bulletY, 2))))
    if distance < 27:
        return True
    else:
        return False


background = pygame.image.load('247.jpg')

# Enemy
num_of_enemy = 6
enemyImg = []
enemyX = []
enemyY = []
enemyX_change = []
enemyY_change = []
for i in range(num_of_enemy):
    enemyImg.append(pygame.image.load('space-invaders.png'))
    enemyX.append(random.randint(0, 735))
    enemyY.append(random.randint(50, 150))
    enemyX_change.append(4)
    enemyY_change.append(40)

bulletimg = pygame.image.load('bullet.png')
bulletX = 0
bulletY = 450
bulletX_change = 480
bulletY_change = 10
bullet_state = "ready"

score = 0
# Game loop (Put most of code for game in this loop)
while running:
    screen.fill((255, 0, 0))
    # BAckground
    screen.blit(background, (0, 0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        # if keystroke is pressed check whether is right or left
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                playerX_change = -5
            if event.key == pygame.K_RIGHT:
                playerX_change = 5
            if event.key == pygame.K_SPACE:
                if bullet_state == "ready":
                    bulletX = playerX
                    fire_bullet(playerX, bulletY)



        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0

    # RGB (screen.fill) = red green blue
    # 5 = 5 + - 0.1 -> 5 = 5 - 0.1
    # making so nothing can go out of bounds
    for i in range(num_of_enemy):
        enemyX[i] += enemyX_change[i]
        if enemyX[i] <= 0:
            enemyX_change[i] = 4
            enemyY[i] += enemyY_change[i]
        elif enemyX[i] >= 736:
            enemyX_change[i] = -4
            enemyY[i] += enemyY_change[i]
    playerX += playerX_change
    if playerX <= 0:
        playerX = 0
    elif playerX >= 736:
        playerX = 736

    # Bullet movement
    if bulletY <= 0:
        bulletY = 480
        bullet_state = "ready"

    if bullet_state == "fire":
        fire_bullet(bulletX, bulletY)
        bulletY -= bulletY_change

    # Collison
    collision = isCollision(enemyX, enemyY, bulletX, bulletY)
    if collision:
        bulletY = 480
        bullet_state = "ready"
        score += 1
        print(score)
        enemyX = random.randint(0, 735)
        enemyY = random.randint(50, 150)

    player(playerX, playerY)
    enemy(enemyX, enemyY)
    pygame.display.update()

导入数学
随机输入
导入pygame
pygame.init()
#屏幕(像素乘以像素(X和Y(X=右和左Y=上下)))
screen=pygame.display.set_模式((800600))
运行=真
#标题和图标
pygame.display.set_标题(“太空入侵者”)
icon=pygame.image.load('icon.png'))
pygame.display.set_图标(图标)
#播放器图标/图像
playerimg=pygame.image.load('Player.png')
playerX=370
playerY=480
playerX_change=0
def播放器(x,y):
#Blit意味着抽签
屏幕光点(playerimg,(x,y))
def敌人(x,y):
#Blit意味着抽签
屏幕。blit(enemyImg,(x,y))
def火焰弹(x,y):
全球子弹头状态
bullet_state=“火灾”
屏幕光点(项目符号,(x+16,y+10))
def isCollision(灌肠剂、灌肠剂、子弹剂、子弹剂):
距离=math.sqrt((math.pow(enemyX[i]-bulletX,2)+(math.pow(enemyY[i]-bulletY,2)))
如果距离小于27:
返回真值
其他:
返回错误
background=pygame.image.load('247.jpg')
#敌人
敌人的数量=6
enemyImg=[]
灌肠剂=[]
Enemy=[]
enemyX_change=[]
Enemy_change=[]
对于范围内的i(敌人的数量):
enemyImg.append(pygame.image.load('space-invaders.png'))
enemyX.append(random.randint(0735))
Enemy.append(random.randint(50150))
enemyX_变更追加(4)
Enemy_变更追加(40)
bulletimg=pygame.image.load('bullet.png')
bulletX=0
bulletY=450
bulletX_变化=480
bulletY_变化=10
bullet_state=“就绪”
分数=0
#游戏循环(将游戏的大部分代码放在这个循环中)
运行时:
屏幕填充((255,0,0))
#背景
屏幕光点(背景,(0,0))
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
#如果按下击键,检查是右键还是左键
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
playerX_变化=-5
如果event.key==pygame.K_RIGHT:
playerX_change=5
如果event.key==pygame.K_空间:
如果bullet_state==“ready”:
bulletX=playerX
火光弹(playerX,bulletY)
elif event.type==pygame.KEYUP:
如果event.key==pygame.K_左或event.key==pygame.K_右:
playerX_change=0
#RGB(屏幕填充)=红-绿-蓝
# 5 = 5 + - 0.1 -> 5 = 5 - 0.1
#使任何东西都不能越界
对于范围内的i(敌人的数量):
enemyX[i]+=enemyX_变化[i]
如果enemyX[i]=736:
enemyX_变化[i]=-4
Enemy[i]+=Enemy_变化[i]
playerX+=playerX\u更改
如果playerX=736:
playerX=736
#子弹运动

如果bulletY
enemyImg
是图像列表:

enemyImg=[]
enemyImg.append(pygame.image.load('space-investors.png'))
因此,您必须按订阅从列表中选择图像

无论如何,你有一个敌人图像列表
enemyImg
和一个x坐标列表(
enemyX
enemyY
)。
将敌方图像的参数添加到函数
敌方

def敌方(img,x,y):
#Blit意味着抽签
屏幕光点(img,(x,y))
把敌人画成一个圈:

运行时:
# [...]
#平局球员
玩家(playerX,playerY)
#把敌人画成一个圈
对于范围内的i(len(enemyImg)):
敌人(enemyImg[i]、enemyX[i]、enemyY[i])
#更新dieplay
pygame.display.update()

enemyImg
是一个图像列表:

enemyImg=[]
enemyImg.append(pygame.image.load('space-investors.png'))
因此,您必须按订阅从列表中选择图像

无论如何,你有一个敌人图像列表
enemyImg
和一个x坐标列表(
enemyX
enemyY
)。
将敌方图像的参数添加到函数
敌方

def敌方(img,x,y):
#Blit意味着抽签
屏幕光点(img,(x,y))
把敌人画成一个圈:

运行时:
# [...]
#平局球员
玩家(playerX,playerY)
#把敌人画成一个圈
对于范围内的i(len(enemyImg)):
敌人(enemyImg[i]、enemyX[i]、enemyY[i])
#更新dieplay
pygame.display.update()

typeError:目标位置无效blit@piddi24我已扩展了答案。typeError:的目标位置无效blit@piddi24是的,很抱歉没有接受答案是的,很抱歉没有接受答案