首页 > 其他分享 >pyinstaller打包后反复运行

pyinstaller打包后反复运行

时间:2023-01-23 18:44:14浏览次数:38  
标签:pyinstaller 反复 max image per pygame screen 打包 size

提问:

 pyinstaller打包后重复运行程序(单线程)
源码:

from os import system
import random
import pygame,sys
size=50
system("maze "+str(size))
size=int(size)
image_max_size=50
rdnum=size/2
pygame.init()
#acon=pygame.image.load("mainper.png")
#pygame.display.set_icon(acon)
#pygame.display.set_caption("maze")
wall=pygame.image.load("wall.png")
road=pygame.image.load("road.png")
mainper=pygame.image.load("mainper.png")
end=pygame.image.load("end.png")
qwertyuiop=open("mrd.txt","r")
rem=pygame.image.load("re.png")
a=qwertyuiop.readlines()
a=a[1:]
class re:
    def __init__(self,xx,yy):
        self.x=xx
        self.y=yy
    def run(self):
        while 1==1:
            rn=random.randint(0,3)
            if rn==0:
                self.x=self.x+1
                if not (self.x>=0 and self.x<size and self.y>=0 and self.y<size and a[self.x][self.y]=='1' ):
                    self.x=self.x-1
                else:
                    break
            elif rn==1:
                self.x=self.x-1
                if not (self.x>=0 and self.x<size and self.y>=0 and self.y<size  and a[self.x][self.y]=='1'):
                    self.x=self.x+1
                else:
                    break
            elif rn==2:
                self.y=self.y+1
                if not (self.x>=0 and self.x<size and self.y>=0 and self.y<size  and a[self.x][self.y]=='1'):
                    self.y=self.y-1
                else:
                    break
            elif rn==3:
                self.y=self.y-1
                if not (self.x>=0 and self.x<size and self.y>=0 and self.y<size and a[self.x][self.y]=='1'):
                    self.y=self.y+1
                else:
                    break
remi=re(size-1,size-1)
if size>14:
    image_max_size=8
    wall=pygame.image.load("wall_l.png")
    road=pygame.image.load("road_l.png")
    mainper=pygame.image.load("mainper_l.png")
    end=pygame.image.load("end_l.png")
screen=pygame.display.set_mode([size*image_max_size,size*image_max_size])
screen.blit(rem,[remi.x*8,remi.y*8])
pygame.time.set_timer(pygame.USEREVENT,500)
per=[0,0]
screen.fill([0,0,0])
for i in range(0,size):
    for j in range(0,size):
        #print i,j,i==0 and j==0,'\n'
        
        if a[i][j]=="1":
            screen.blit(road,[i*image_max_size,j*image_max_size])
screen.blit(mainper,per)
screen.blit(end,[(size-1)*image_max_size,(size-1)*image_max_size])
        #print i,j,a[i][j],[i*image_max_size,j*image_max_size],'\n'
#screen.blit(road,[0*image_max_size,3*image_max_size])
def inwall():
    if per[0]<size*image_max_size and per[1]<size*image_max_size and per[0]>=0 and per[1]>=0:
        if a[per[0]//image_max_size][per[1]//image_max_size]=="1":
            return 1
    return 0
 
pygame.key.set_repeat(100,50)
running=True
while running:
    if per[0]==(size-1)*image_max_size and per[1]==(size-1)*image_max_size:
        running=False
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            running=False
        elif event.type==pygame.KEYDOWN:
            if event.key==pygame.K_DOWN:
                screen.blit(road,per)
                per[1]+=image_max_size
                if not inwall():
                    per[1]-=image_max_size
                    screen.blit(mainper,per)
                else:
                    screen.blit(mainper,per)
            elif event.key==pygame.K_UP:
                screen.blit(road,per)
                per[1]-=image_max_size
                if not inwall():
                    per[1]+=image_max_size
                    screen.blit(mainper,per)
                else:    
                    screen.blit(mainper,per)
            elif event.key==pygame.K_RIGHT:
                screen.blit(road,per)
                per[0]+=image_max_size
                if not inwall():
                    per[0]-=image_max_size
                    screen.blit(mainper,per)
                else:    
                    screen.blit(mainper,per)
            elif event.key==pygame.K_LEFT:
                screen.blit(road,per)
                per[0]-=image_max_size
                if not inwall():
                    per[0]+=image_max_size
                    screen.blit(mainper,per)
                else:    
                    screen.blit(mainper,per)
        elif event.type==pygame.USEREVENT:
                screen.blit(road,[remi.x*8,remi.y*8])
                remi.run()
                screen.blit(rem,[remi.x*8,remi.y*8])
    
    pygame.display.flip()
pygame.quit()
 
 

 

解答:

 在main中加这一行:
multiprocessing.freeze_support()

这个问题可能是由于使用的模块中有多线程或者并发处理的问题

标签:pyinstaller,反复,max,image,per,pygame,screen,打包,size
From: https://www.cnblogs.com/dituirenwu/p/17065373.html

相关文章