water_mouth_hang 2023-01-23 17:03 采纳率: 100%
浏览 17
已结题

pyinstaller打包后反复运行

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()


版本:3.11.1

  • 写回答

3条回答 默认 最新

  • Python-ZZY 2023-01-23 19:43
    关注

    把第五行删掉试试
    如果你的程序打包后命名为maze,那么第五行相当于一直在启动maze,启动maze后又会启动新的maze,从而反复运行

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月1日
  • 已采纳回答 1月24日
  • 创建了问题 1月23日

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c