如何在pyinstaller上包括图像和音乐等资产

2024-10-04 05:22:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用pyinstaller使我的文件成为exe,但每次打开exe时,它都会给我一个错误,即Failed to execute main script。我尝试了很多事情,询问了其他人,得出的结论是没有识别资产。那么,我该如何获得它呢?请确定资产,这样我就可以运行exe了

这是我的游戏代码

import random
import math
import time

from pygame import mixer


pygame.init()
                                 #width, height
screen = pygame.display.set_mode((1000, 800))
background = pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\back.png")

mixer.music.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Song.mp3")
mixer.music.play(-1)

title = pygame.display.set_caption("Shoot Deannes")

icon = pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Deanne GYypsu python.png")
pygame.display.set_icon(icon)

lov = pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Lov.png")
show_image = False

playerImg = pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Python Player.png")
playerX = 450
playerY = 580
playerX_change = 0
playerY_change = 0

enemyImg = []
enemyX = []
enemyY = []
enemyX_change = []
enemyY_change = []
num_of_enemies = 5

for i in range(num_of_enemies):
    enemyImg.append(pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Pygame Enemy D.png"))
    enemyX.append(random.randint(0, 935))
    enemyY.append(random.randint(40, 140))
    enemyX_change.append(1.5)
    enemyY_change.append(random.uniform(0.3, 0.8))

bulletImg = pygame.image.load(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\Shoot.png")
bulletX = 0
bulletY = 0
bulletX_change = 0
bulletY_change = 7
bullet_state = "ready"

score_value = 0

font = pygame.font.Font("freesansbold.ttf", 32)
textX = 20
textY = 20

def show_score(x, y):
    score = font.render("Landed shots :" + str(score_value), True, (255, 192, 203))
    screen.blit(score, (x, y))

def player(x, y):
    screen.blit(playerImg, (x, y))

def enemy(x, y, i ):
    screen.blit(enemyImg[i], (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 - bulletX,2)) + (math.pow(enemyY - bulletY,2))
    if distance < 50:
        return True
    else: 
        return False

def isCollision2(enemyX, enemyY, playerX, playerY):
    distance = math.sqrt(math.pow(enemyX - playerX,2)) + (math.pow(enemyY - playerY,2))
    if distance < 70:
        return True
    else: 
        return False             

running = True
while running:
    screen.fill((0,0,0))
    screen.blit(background, (0, 0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                playerX_change = -3.5
            if event.key == pygame.K_RIGHT:
                playerX_change = 3.5      
            if event.key == pygame.K_SPACE:
                if bullet_state is "ready":
                    bullet_sound = mixer.Sound(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\ORG.wav")
                    bullet_sound.play()
                    bulletX = playerX 
                    bulletY = playerY
                    fire_bullet(bulletX, bulletY)         


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

                
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_DOWN:
                playerY_change = 2.5
            if event.key == pygame.K_UP:
                playerY_change = -2.5        
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_DOWN or event.key == pygame.K_UP:
                playerY_change = 0  
    
        
    playerX += playerX_change
    playerY += playerY_change
    if playerX <=0:
        playerX = 0
    elif playerX >=935:
        playerX = 935   

    for i in range(num_of_enemies):
        enemyX[i] += enemyX_change[i]
        enemyY[i] += enemyY_change[i]
        if enemyX[i] <=0:
            enemyX_change[i] = 1.5
            enemyY[i] += enemyY_change[i]
        elif enemyX[i] >=935:
            enemyX_change[i] = -1.5
            enemyY[i] += enemyY_change[i]
   
        collision = isCollision(enemyX[i], enemyY[i], bulletX, bulletY)
        if collision:
            bulletY = 580
            bullet_state = "ready"
            score_value += 1
            enemyX[i] = random.randint(0, 1000)
            enemyY[i] = random.randint(40, 140)   
        
        collision2 = isCollision2(enemyX[i], enemyY[i], playerX, playerY)
        if collision2:
            playerX = 4000
            playerY = 4000
            gameover_sound = mixer.Sound(r"C:\Users\35387\Documents\Python Coding\Shoot Deannes\GAME OVER.wav") 
            gameover_sound.play()
            show_image = True

        if show_image:
            pygame.display.set_mode((480, 910)).blit(lov, (0, 0))
       

        enemy(enemyX[i], enemyY[i], i)                  

    if bulletY <=0 :
        bulletY =580
        bullet_state = "ready"

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


    player(playerX, playerY)
    show_score(textX, textY)
    pygame.display.update()

这也是我第一次做这种事情,所以请不要介意我的沉默。我将所有资产和这个名为main.py的文件放在同一个文件夹中,无法成功将其转换为exe


Tags: imageeventifchangepygameusersdocumentsshoot