Buenas tardes, he estado intentando convertir en un exe un script, pero sigue apareciendo esto en el cmd cuando lo trato de convertir:
D:\Códigos\Repositorio Python\vydia\FisAttack>pyinstaller main.py --onefile --noconsole
SyntaxError: Non-UTF-8 code starting with '\xf3' in file D:\Códigos\Compiladores\Python\Scripts\pyinstaller-script.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
Ya tengo instalado Pyinstaller, y lo que utilice para realizar el script es Pycharm.
De ante mano muchas gracias. Les dejo el codigo:
import pygame
import math
import random
import time
pygame.mixer.pre_init(44100, -16, 2, 512)
pygame.init()
pygame.mixer.set_num_channels(64)
# Resolucion pantalla
resX = 1280
resY = 720
screen = pygame.display.set_mode((resX, resY))
# Titulo e icono
pygame.display.set_caption("The Fis Attack")
icon = pygame.image.load("assets/images/naveIcon.png")
pygame.display.set_icon(icon)
# calcular frames
prev_time = time.time()
dt = 0
fps = 60
clock = pygame.time.Clock()
# Score
scoreDebug = 0
score = scoreDebug
scoreMin = score
scoreMax = 0
# Estrellas 2
estrellaImg = []
estrellaX = []
estrellaY = []
estrellaVel = []
estrellaY_change = []
numEstrellas2 = resX - 600
for i in range(numEstrellas2):
estrellaImg.append(pygame.image.load("assets/images/estrella.png"))
estrellaX.append(random.randint(0, resX + i))
estrellaY.append(random.randint(0, resY + i))
estrellaVel.append(15)
estrellaY_change.append(estrellaVel)
def drawEstrellas(x, y, i):
screen.blit(estrellaImg, (x, y))
# Jugador
playerImg = pygame.image.load("assets/images/navePlayer.png")
playerX = (resX // 2) - 20
playerY = resY - 100
playerX_change = 0
playerY_change = 0
playerVel = 600
estadoJug = True
def player(x, y):
screen.blit(playerImg, (x, y))
# Enemigo 1
maxMuertesEnemigos1 = 20
enemigo1Img = []
enemigo1X = []
enemigo1Y = []
enemigo1Vel = []
enemigo1X_change = []
enemigo1Y_change = []
numEnemigo1 = 9
for i in range(numEnemigo1):
enemigo1Img.append(pygame.image.load("assets/images/fis/peby.png"))
enemigo1X.append(random.randint(0, resX - 64))
enemigo1Y.append(0)
enemigo1Vel.append(240)
enemigo1X_change.append(enemigo1Vel)
enemigo1Y_change.append(enemigo1Vel)
def enemigo1(x, y, i):
screen.blit(enemigo1Img, (x, y))
# Enemigo 2
iniciarEnemigo2 = 21
maxMuertesEnemigos2 = 50
enemigo2Img = []
enemigo2X = []
enemigo2Y = []
enemigo2Vel = []
enemigo2X_change = []
enemigo2Y_change = []
numEnemigo2 = 9
enemigoDireccion = []
# Laser enemigo 2
laserEnem2Img = []
laserEnem2X = []
laserEnem2Y = []
laserEnem2Vel = []
laserEnem2Y_change = []
laserEnem2_state = []
for i in range(numEnemigo2):
enemigo2Img.append(pygame.image.load("assets/images/fis/pacian.png"))
enemigo2X.append(random.randint(0, resX - 64))
enemigo2Y.append(0)
enemigo2Vel.append(280)
enemigo2X_change.append(enemigo2Vel)
enemigo2Y_change.append(enemigo2Vel)
enemigoDireccion.append(0)
# Laser enemigo 2
laserEnem2Img.append(pygame.image.load("assets/images/fis/laser_pacian.png"))
laserEnem2X.append(0)
laserEnem2Y.append(enemigo2Y)
laserEnem2Vel.append(460)
laserEnem2Y_change.append(laserEnem2Vel)
laserEnem2_state.append(0)
def enemigo2(x, y, i):
screen.blit(enemigo2Img, (x, y))
def dispararLaserEnem2(x, y, i):
laserEnem2_state = 1
screen.blit(laserEnem2Img, (x + 17, y))
# Enemigo 3
iniciarEnemigo3 = 51
maxMuertesEnemigos3 = 70
enemigo3Img = []
enemigo3X = []
enemigo3Y = []
enemigo3Vel = []
enemigo3X_change = []
enemigo3Y_change = []
numEnemigo3 = 8
for i in range(numEnemigo3):
enemigo3Img.append(pygame.image.load("assets/images/fis/metal_garbage.png"))
enemigo3X.append(random.randint(0, resX - 64 + i * 2))
enemigo3Y.append(random.randint(0, 50 + i * 2))
enemigo3Vel.append(370)
enemigo3X_change.append(enemigo3Vel)
enemigo3Y_change.append(enemigo3Vel)
def enemigo3(x, y, i):
screen.blit(enemigo3Img, (x, y))
# Boss
iniciarBoss = 71
bossImg = pygame.image.load("assets/images/fis/boss/lord_mamamela.png")
hitDamage = 5
vidaBossDebug = 120
vidaBoss = vidaBossDebug
bossX = (resX // 2) - 53
bossY = 0
bossVel = 650
bossX_change = bossVel
bossY_change = 50
# Laser 1 boss
bossLaserImg = pygame.image.load("assets/images/fis/boss/laser_lord.png")
bossLaser1X = 0
bossLaser1Y = 0
laser1BossVel = 700
laser1BossY_Change = laser1BossVel
laser1Boss_state = 0
# Laser 2 boss
bossLaser2X = 0
bossLaser2Y = 0
laser2BossVel = 700
laser2BossY_Change = laser2BossVel
laser2Boss_state = 0
def boss(x, y):
screen.blit(bossImg, (x, y))
def dispararBossLaser1(x, y):
screen.blit(bossLaserImg, (x, y))
def dispararBossLaser2(x, y):
screen.blit(bossLaserImg, (x, y))
# Laser jugador
laserJugadorImg = pygame.image.load("assets/images/laser.png")
laserJugadorX = 0
laserJugadorY = playerY
laserJugadorVel = 4 * playerVel
laserJugadorY_change = laserJugadorVel
laserJugador_state = "ready"
def dispararLaserJugador(x, y):
global laserJugador_state
laserJugador_state = "fire"
screen.blit(laserJugadorImg, (x + 16, y))
# Checando colision
def funcColision(x1, y1, x2, y2, lim):
distancia = math.sqrt((math.pow(x1 - x2, 2)) + (math.pow(y1 - y2, 2)))
if distancia < lim:
return True
return False
# RGB para pantalla de fondo
redRGB = 70
greenRGB = 68
blueRGB = 124
# Teclas
right = pygame.K_RIGHT
left = pygame.K_LEFT
up = pygame.K_UP
down = pygame.K_DOWN
shoot = pygame.K_s
revive = pygame.K_r
# Sonidos y musica
bossHit = pygame.mixer.Sound("assets/sounds/hitBoss.wav")
bossDeath = pygame.mixer.Sound("assets/sounds/explosionBoss.wav")
shootSound = pygame.mixer.Sound("assets/sounds/shoot.wav")
shootEnemSound = pygame.mixer.Sound("assets/sounds/shootEnem.wav")
shootBossSound = pygame.mixer.Sound("assets/sounds/shootBoss.wav")
hitSound = pygame.mixer.Sound("assets/sounds/hit.wav")
hitJugSound = pygame.mixer.Sound("assets/sounds/hitJug.wav")
hitWallEnem = pygame.mixer.Sound("assets/sounds/hitWallEnem.wav")
hitWallBoss = pygame.mixer.Sound("assets/sounds/hitWallBoss.wav")
pygame.mixer.music.load("assets/music/sweet_victory_by-JosephineMira.ogg")
pygame.mixer.music.play()
pygame.mixer.music.pause()
#################################################################
# Game loop
running = True
while running:
# Limite de framerate
clock.tick(fps)
# Calcular delta time
now = time.time()
dt = now - prev_time
prev_time = now
# Pantalla de fondo
screen.fill((redRGB, greenRGB, blueRGB))
# Estrellas
for i in range(numEstrellas2):
drawEstrellas(estrellaX + 1, estrellaY + 1, i)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Movimiento
if event.type == pygame.KEYDOWN:
if event.key == right:
playerX_change = playerVel * dt
if event.key == left:
playerX_change = (playerVel * -1) * dt
# if event.key == down:
# playerY_change = playerVel
# if event.key == up:
# playerY_change = playerVel * -1
if estadoJug:
if vidaBoss >= 1:
if event.key == shoot:
if laserJugador_state == "ready":
laserJugadorX = playerX
dispararLaserJugador(laserJugadorX, laserJugadorY)
shootSound.play()
if not estadoJug:
if event.key == revive:
estadoJug = True
playerY = resY - 100
playerX = (resX // 2) - 20
playerY_change = 0
# Creditos
if vidaBoss > 0:
playerX += playerX_change
if vidaBoss <= 0:
playerY -= playerY_change
playerY_change = 6 * dt
for i in range(numEstrellas2):
estrellaY += estrellaY_change * dt
if estrellaY >= resY + 2:
estrellaY = random.randint(-400, 0)
estrellaX = random.randint(0, resX)
# Poner limites de movimiento
if playerX <= 0:
playerX = 0
elif playerX >= resX - 64:
playerX = resX - 64
# Resetear pos de enemigos
if not estadoJug:
# Enemigo 1
for i in range(numEnemigo1):
enemigo1Y = 0
# Enemigo laser
for i in range(numEnemigo2):
laserEnem2_state = 0
# Enemigo 3
for i in range(numEnemigo3):
enemigo3X = random.randint(0, resX - 64 + i * 2)
enemigo3Y = random.randint(0, 50 + i * 2)
# Boss
vidaBoss = vidaBossDebug
bossX = (resX // 2) - 53
bossY = 0
laser1Boss_state = 0
laser2Boss_state = 0
# enemigo 1
if score <= maxMuertesEnemigos1:
for i in range(numEnemigo1):
enemigo1Y += enemigo1Y_change * dt
enemigo1X += enemigo1X_change * dt
if enemigo1X <= 0:
hitWallBoss.play()
enemigo1X_change = enemigo1Vel
elif enemigo1X >= resX - 64:
hitWallBoss.play()
enemigo1X_change = enemigo1Vel * -1
if enemigo1Y > resY + 10:
enemigo1Y = 0
# Colision
colisionLaser = funcColision(enemigo1X, enemigo1Y, laserJugadorX, laserJugadorY, 40)
if colisionLaser:
laserJugadorY = playerY
laserJugador_state = "ready"
hitSound.play()
score += 1
enemigo1X = random.randint(0, resX - 64)
enemigo1Y = 0
# Muerte Jug
colisionJug = funcColision(enemigo1X, enemigo1Y, playerX, playerY, 64)
if estadoJug:
if colisionJug:
hitJugSound.play()
estadoJug = False
playerX_change = 0
laserJugadorX = 100000
enemigo1(enemigo1X, enemigo1Y, i)
# enemigo 2
if estadoJug:
if iniciarEnemigo2 <= score <= maxMuertesEnemigos2:
for i in range(numEnemigo2):
enemigo2X += enemigo2X_change * dt
if enemigo2X <= 0:
enemigo2X_change = enemigo2Vel
enemigoDireccion = 0
elif enemigo2X >= resX - 64:
enemigo2X_change = enemigo2Vel * -1
enemigoDireccion = 1
# Colision laser hacia enemigo
colisionLaser = funcColision(enemigo2X, enemigo2Y, laserJugadorX, laserJugadorY, 40)
if colisionLaser:
hitSound.play()
laserJugadorY = playerY
laserJugador_state = "ready"
score += 1
enemigo2X = random.randint(0, resX - 64)
enemigo2Y = 0
# Laser
if laserEnem2_state == 0:
laserEnem2_state = 1
shootEnemSound.play()
if enemigoDireccion == 0:
laserEnem2X = enemigo2X + 7
if enemigoDireccion == 1:
laserEnem2X = enemigo2X - 7
laserEnem2Y = enemigo2Y + 20
if laserEnem2_state == 1:
dispararLaserEnem2(laserEnem2X, laserEnem2Y, i)
laserEnem2Y += laserEnem2Y_change * dt
if laserEnem2Y >= resY:
laserEnem2_state = 0
# Muerte Jug con laser
colisionEnemLaser = funcColision(playerX, playerY, laserEnem2X, laserEnem2Y, 30)
if estadoJug:
if colisionEnemLaser:
hitJugSound.play()
estadoJug = False
playerX_change = 0
laserJugadorX = 100000
enemigo2(enemigo2X, enemigo2Y, i)
# Enemigo 3
if estadoJug:
if iniciarEnemigo3 <= score <= maxMuertesEnemigos3:
for i in range(numEnemigo3):
enemigo3Y += enemigo3Y_change * dt
enemigo3X += enemigo3X_change * dt
if enemigo3X <= 0:
enemigo3X_change = enemigo3Vel
hitWallEnem.play()
elif enemigo3X >= resX - 64:
enemigo3X_change = enemigo3Vel * -1
hitWallEnem.play()
if enemigo3Y <= 0:
enemigo3Y_change = enemigo3Vel
hitWallEnem.play()
elif enemigo3Y >= resY - 64:
enemigo3Y_change = enemigo3Vel * -1
hitWallEnem.play()
# Colision
colisionLaser = funcColision(enemigo3X, enemigo3Y, laserJugadorX, laserJugadorY, 40)
if colisionLaser:
laserJugadorY = playerY
laserJugador_state = "ready"
hitSound.play()
score += 1
enemigo3X = random.randint(0, resX - 64)
enemigo3Y = 0
# Muerte Jug
colisionJug = funcColision(enemigo3X, enemigo3Y, playerX, playerY, 64)
if estadoJug:
if colisionJug:
hitJugSound.play()
estadoJug = False
playerX_change = 0
laserJugadorX = 100000
enemigo3(enemigo3X, enemigo3Y, i)
# Boss
if estadoJug:
if score >= iniciarBoss and vidaBoss > 0:
bossX += bossX_change * dt
if bossX >= resX - 128:
bossX_change = bossVel * -1
hitWallBoss.play()
bossY += bossY_change
if bossX <= 0:
bossX_change = bossVel
hitWallBoss.play()
bossY += bossY_change
# Laser jug hacia Boss
colisionLaser = funcColision(bossX + 29, bossY, laserJugadorX, laserJugadorY, 74)
if colisionLaser:
laserJugadorY = playerY
laserJugador_state = "ready"
bossHit.play()
vidaBoss -= hitDamage
if vidaBoss < 1:
bossDeath.play()
# Muerte Jug
colisionJug = funcColision(bossX + 29, bossY, playerX, playerY, 128)
if estadoJug:
if colisionJug:
hitJugSound.play()
estadoJug = False
playerX_change = 0
laserJugadorX = 100000
# Laser 1
if laser1Boss_state == 0:
laser1Boss_state = 1
# inserte sonido aqui
shootBossSound.play()
bossLaser1X = bossX - 4
bossLaser1Y = bossY + 64
if laser1Boss_state == 1:
dispararBossLaser1(bossLaser1X, bossLaser1Y)
bossLaser1Y += laser1BossVel * dt
if bossLaser1Y >= resY:
laser1Boss_state = 0
# Muerte con laser 1
colisionBossLaser1 = funcColision(playerX, playerY, bossLaser1X, bossLaser1Y, 36)
if estadoJug:
if colisionBossLaser1:
hitJugSound.play()
estadoJug = False
playerX_change = 0
laserJugadorX = 100000
# Laser 2
if laser2Boss_state == 0:
laser2Boss_state = 1
# inserte sonido aqui
shootBossSound.play()
bossLaser2X = bossX + 68
bossLaser2Y = bossY + 64
if laser2Boss_state == 1:
dispararBossLaser2(bossLaser2X, bossLaser2Y)
bossLaser2Y += laser2BossVel * dt
if bossLaser2Y >= resY:
laser2Boss_state = 0
# Muerte con laser 1
colisionBossLaser2 = funcColision(playerX, playerY, bossLaser2X + 10, bossLaser2Y, 36)
if estadoJug:
if colisionBossLaser2:
hitJugSound.play()
estadoJug = False
playerX_change = 0
laserJugadorX = 100000
boss(bossX, bossY)
# graficar vida boss
rec1Boss = (173, 86, 54)
rec2Boss = (115, 83, 112)
pygame.draw.rect(screen, (rec2Boss), [372, 5, vidaBoss * 5 + 16, 40])
pygame.draw.rect(screen, (rec1Boss), [380, 17, vidaBoss * 5, 15])
# Que dure el laser en la pantalla
if laserJugador_state == "ready":
laserJugadorX = playerX
if laserJugadorY <= 0:
laserJugadorX = playerX
laserJugadorY = playerY
laserJugador_state = "ready"
if laserJugador_state == "fire":
dispararLaserJugador(laserJugadorX, laserJugadorY)
laserJugadorY -= laserJugadorY_change * dt
if estadoJug:
player(playerX, playerY)
else:
score = scoreDebug
# Score max
scoreMin = score
if scoreMin > scoreMax:
scoreMax = score
# Rectangulo indica score
if (0 < score < iniciarBoss) and estadoJug:
primerRec = (111, 161, 211)
segRec = (52, 75, 98)
pygame.draw.rect(screen, primerRec, [10, (resY - 110) - (score * 5), 40, score * 5 + 8])
pygame.draw.rect(screen, segRec, [20, (resY - 106) - score * 5, 20, score * 5])
# Pantalla de victoria
if vidaBoss <= 0:
pygame.mixer.music.unpause()
pygame.display.update()