Jump to content
Diogo Guimaraes

Pygame - Pyinstaller

Recommended Posts

Diogo Guimaraes

Boas gente,

Tenho um pequeno problema e não tou a encontrar nenhuma solução no google...e na esperança de encontrar aqui uma salvação.

Tenho começado com o Pygame a fazer brincadeiras, no entanto...com python direto corro o jogo tranquilo. Quando faço pyinstaller para criar o exe...mal abro entra logo em crash...app not responding....

Share this post


Link to post
Share on other sites
Diogo Guimaraes

Boas bruno,

Nop nem por isso. Não sei se tem algo a ver, mas isto acontece a partir do momento que carrego conteudo externo tipo som de fundo. Já fiz um pyinstaller no inicio do projecto e funcionou tranquilo. Pensei que fosse prob no windows, testei em linux ta igual. troquei de máquina :P e igual...ate posso colocar aqui o codigo todo. Acredito que isto esteja da pior forma possivel porque nao tenho boas praticas em uso de classes..é o que ainda não consigo entender bem a estrututra de classes mas aqui vai..

main.py

import pygame, sys
from pygame.locals import *
from classes import JinhoModel
from classes import Princess
from classes import Projectil

winHeight  = 768
winWidth   = 1024
pygame.init()
def SuperJinho():

    
    pygame.mouse.set_visible(False)
    window = pygame.display.set_mode((winWidth, winHeight))
    pygame.display.set_caption("ReiJinho - The Game")
    background = pygame.image.load("resources/background.jpg")

    pygame.mixer.music.load("sounds/music_background.mp3")
    pygame.mixer.music.play(3)

    player = JinhoModel()
    enemy = Princess(100, 35)

    status = True
    reloj = pygame.time.Clock()
    myFonte = pygame.font.Font(None, 30)
    scorePilada = myFonte.render("Piladas: ",1 ,(255, 0, 0))
    scoreCagada = myFonte.render("Cagadas: ",1 ,(255, 0, 0))
    superJinho = myFonte.render("SuperJinho",1, (255,0 , 0))
    serGay = myFonte.render("SerGay",1,(255,0 , 0))
    hitPila = 0
    hitCaga = 0

    while True:
		
        reloj.tick(64)
        tempo = pygame.time.get_ticks()/1000

        for evento in pygame.event.get():
            if evento.type == QUIT:
                pygame.quit()
                sys.exit()

            if status == True:

                if evento.type == pygame.KEYDOWN:
                    if evento.key == K_LEFT:
                        player.movementLeft()

                    elif evento.key == K_RIGHT:
                        player.movementRight()

                    elif evento.key == K_SPACE:
                        x, y = player.rect.center
                        player.shooting(x, y)


        #Desenho o fundo aqui....
        window.blit(background,(0,0))
        #Desenho balas

        enemy.comportamento(int(tempo))
        player.create(window)
        enemy.criar(window)
        window.blit(superJinho,(900, 20))
        window.blit(serGay,(10, 20))
        window.blit(scorePilada,(900,50))
        window.blit(scoreCagada,(10, 50))

        if len(player.listShot) > 0:
            for x in player.listShot:
                x.criar(window)
                x.trajectoria()
                if x.rect.top < 100:
                    player.listShot.remove(x)

                else:
                    if x.rect.colliderect(enemy.rect):
                        scorePilada = myFonte.render("Piladas: {}".format(hitPila + 1),1 ,(255, 0, 0))
                        if x.rect.colliderect(enemy.rect):
                            hitPila+= 1
                        player.listShot.remove(x)


        if len(enemy.listaDisparos) > 0:
            for x in enemy.listaDisparos:
                x.criar(window)
                x.trajectoria()

                if x.rect.top > 700:
                    enemy.listaDisparos.remove(x)

                else:
                    if x.rect.colliderect(player.rect):
                        scoreCagada = myFonte.render("Cagadas: {}".format(hitCaga + 1),1 ,(255, 0, 0))
                        if x.rect.colliderect(player.rect):
                            hitCaga+= 1
                        enemy.listaDisparos.remove(x)


        pygame.display.update()

SuperJinho()

 __init__.py

from classes.Princess import Princess
from classes.JinhoModel import JinhoModel
from classes.Projectil import Projectil

JinhoModel.py

import pygame
from classes.Projectil import Projectil

winHeight  = 768
winWidth   = 1024

class JinhoModel(pygame.sprite.Sprite):

    def __init__(self):

        pygame.sprite.Sprite.__init__(self)
        self.jinhoPlayer = pygame.image.load("resources/jinhoPlayer.png")
        self.rect = self.jinhoPlayer.get_rect()
        self.rect.centerx = winWidth / 2
        self.rect.centery = winHeight - 100
        self.listShot = []
        self.life = True

        self.velocidade = 35
        self.somTiro = pygame.mixer.Sound("sounds/jinho_shot.wav")

    def shooting(self, x, y):

        myBullet = Projectil(x, y, "resources/dildo.png", True)
        self.listShot.append(myBullet)
        self.somTiro.play()

    def movementRight(self):

        self.rect.right += self.velocidade
        self.__move()

    def movementLeft(self):
        self.rect.left -= self.velocidade
        self.__move()

    def __move(self):

        if self.life == True:

            if self.rect.left <= 0:
                self.rect.left = 0

            elif self.rect.right > 1024:
                self.rect.right = 1000

    def create(self, padrao):
        padrao.blit(self.jinhoPlayer, self.rect)

Princess.py

import pygame
from random import randint
from classes.Projectil import Projectil

class Princess(pygame.sprite.Sprite):

    def __init__(self, posX, posY):

        pygame.sprite.Sprite.__init__(self)

        self.imagemPrincesa = pygame.image.load("resources/princess.png")
        self.imagemPrincesaA = pygame.image.load("resources/princess_moving.png")

        self.listaImagens = [self.imagemPrincesa, self.imagemPrincesaA]
        self.posImagem = 0

        self.imagemInvasor =  self.listaImagens[self.posImagem]
        self.rect = self.imagemInvasor.get_rect()

        self.listaDisparos = []
        self.velocidade = 2
        self.rect.top = posY
        self.rect.left = posX

        self.rangDisparo = 1
        self.tempoTroca = 1

        self.direita = True
        self.contador = 0
        self.maxDown = self.rect.top + 40
        self.somTiro = pygame.mixer.Sound("sounds/princess_shot.wav")
        self.acertou = 0

    def criar(self, padrao):

        self.imagemInvasor = self.listaImagens[self.posImagem]
        padrao.blit(self.imagemInvasor,self.rect)

    def atingido(self):

        if self.acertou == 1:
            self.imagemPrincesaAtingida.load("resources/princess_hited.png")

    def comportamento(self, tempo):
        self.__ataque()
        self.__moves()
        if self.tempoTroca == tempo:
            self.posImagem += 1
            self.tempoTroca += 1

            if self.posImagem > len(self.listaImagens)-1:
                self.posImagem = 0

    def __moves(self):

        if self.contador < 3:
            self.__sideMove()
        else:
            self.__descida()

    def __descida(self):

        if self.maxDown == self.rect.top:
            self.contador = 0
            self.maxDown = self.rect.top + 40

        else:
            self.rect.top += 1

    def __sideMove(self):

        if self.direita == True:
            self.rect.left = self.rect.left + self.velocidade
            if self.rect.left > 768:
                self.direita = False
                self.contador += 1
        else:
            self.rect.left = self.rect.left - self.velocidade
            if self.rect.left < 100:
                self.direita = True

    def __ataque(self):

        if (randint(0, 100)<self.rangDisparo):
            self.__disparo()
            self.somTiro.play()

    def __disparo(self):

        x,y = self.rect.center
        myShot = Projectil(x, y, "resources/shit.png", False)
        self.listaDisparos.append(myShot)

Projectil.py

import pygame

class Projectil(pygame.sprite.Sprite):

    def __init__(self, posX, posY, rota, personagem):
        pygame.sprite.Sprite.__init__(self)

        self.imagemProjectil = pygame.image.load(rota)
        self.rect = self.imagemProjectil.get_rect()

        self.velocidadeTiro = 5

        self.rect.top = posY
        self.rect.left = posX
        self.disparaPersonagem = personagem

    def trajectoria(self):

        if self.disparaPersonagem == True:
            self.rect.top = self.rect.top - self.velocidadeTiro
        else:
            self.rect.top = self.rect.top + self.velocidadeTiro

    def criar(self, padrao):

       padrao.blit(self.imagemProjectil, self.rect)

 

Aqui tá...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.