将pygame打包成exe

1. 首先,安装pyinstaller。(注意:我自己打包是win10 pycharm中完成的,linux中打包应该直接生成不了exe文件)

pip install pyinstaller

制作一个Python游戏。假设主游戏文件名为 main.py,位于 D:\game_project

2. 将下面函数添加到 main.py 中。(注意:这个是最新版pyinstaller适用的代码,其他版本的resource_path函数,试过之后好像不太行)

import sys
import os

def resource_path(relative_path):
    try:
    # PyInstaller creates a temp folder and stores path in _MEIPASS
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)

3. 在main.py所有要使用路径将图像加载到游戏中的地方,调用该函数,下面是一个例子:

# 注意不是 pygame.image.load('assets/chars/hero.png')
hero_asset = pygame.image.load(resource_path('assets/chars/hero.png'))

4. 当游戏准备好打包到 EXE 中时。terminal转到主游戏目录并输入:

pyinstaller -w --onefile .\main.py --collect-data .\assets\audio --collect-data .\assets\fonts --collect-data .\assets\fruits --collect-data .\assets\pictures --collect-data .\assets\
powerups --hidden-import glcontext

其中,

  • -w / –windowed/–noconsole 表示程序启动的时候不会打开命令行,这样当exe文件运行有问题时会弹出报错窗口显示出错误信息,方便调试。否则,弹出的命令行会自动关闭,不容易查错
  • -F / --onefile 表示打包成单个文件
  • main.py是游戏的主程序
  • --collect-data .\assets\audio --collect-data .\assets\fonts --collect-data .\assets\fruits --collect-data .\assets\pictures --collect-data .\assets\powerups 是存放其他资源(图片,音频)的文件夹
  • --hidden-import glcontext 是为了防止运行exe时出现下面的错误:

traceback (most recent call last): file "main.py", line 465, in <module> file "moderngl\__init__.py", line 2174, in create_context modulenotfounderror: no module named 'glcontext'

5. 修改 .spec 文件(与main.py在同一文件夹中),将空的 datas[] 列表替换为assets目录路径,如下所示(使用元组!):

datas = [('.\\assets\\audio\\*','.\\assets\\audio'),('.\\assets\\fruits\\*png','.\\assets\\fruits'),('.\\assets\\fonts\\*','.\\assets\\fonts'),('.\\assets\\pictures\\*','.\\assets\pictures'),('.\\assets\\powerups\\*.png','.\\assets\\powerups'),('.\\assets\\frag_shader.glsl','.\\assets'),('.\\assets\\vert_shader.glsl','.\\assets')]

每个元组的第一个值是导入的实际文件名,第二个值是资源文件夹相对路径 (注意,不要使用'\',’/‘,我都试过会报错)

6. 保存并关闭“main.spec”文件:(注意,一定要保存,且关闭,再执行下面的命令,否则可能不会应用更改)

7. 打开terminal,输入:

pyinstaller main.spec

这就已经将assets目录路径中所有资源嵌入到构建的 exe 中了。

完成所有这些操作,就可以双击 EXE 来玩 Python 游戏了。

将exe发送给任何人,或者重命名都可以直接双击打开游戏。

参考链接:

https://stackoverflow.com/questions/54210392/how-can-i-convert-pygame-to-exe

https://stackoverflow.com/questions/72822188/freezing-python-moderngl-application-with-pyinstaller
Python升级之路( Lv13 ) pyinstaller 使用详解-腾讯云开发者社区-腾讯云



 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
玩法 1)不设过关卡的设置,砖块是一层层压下来的,随着时间或者分数的推移,压的速度变快,每一层生的砖的均衡的生命值在不断的提高,记录玩家所获得的最高分。 2)两边的墙会随着玩家分数的提高,逐步的变软,最终消失。消失的时候两边的墙会变两块挡板,也需要玩家的控制,当球在左右两边没有接住的时候,损失生命值。 3)挡板也是有生命的,随着球的不断的打击,挡板的生命值也在不断的减少,需要补充道具掉下来的生命值,不然也会死亡。(现在不处理) 4)球有三种能量类型,火球,冰球,电球,相对应,挡板也有三种类型。每种类型对砖和挡板造的伤害会不同,例如火球是一种范围伤害,冰球可以降低挡板移动的速度。(还是设想) 挡板三种能量类型有不同的性质,挡板可以吃道具变形(或者特定分数强制变形)。 火球能量类型的挡板的速度,加速度,摩擦力都比较适中,容易控制,但是生命最大值比较小。 冰球能量类型的挡板的加速度,摩擦力,最大的速度都很大,虽然不容易控制,但是生命值最大。 电球能量类型的挡板的加速度,和最大速度都是最大的,摩擦力比较小,很容易达到非常快的速度,适合与喜欢高速的玩家。 挡板吃到掉落的物品能够改变能量类型,球落到挡板上的时候改变同样的能量类型。 6)物品能够改变生命值,加速度和能量类型。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值