十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Python小游戏开发入门:从猜数字到pygame打包exe

Python小游戏开发入门:从猜数字到pygame打包exe 很多初学者学 Python 学不下去问题通常不在语法而在“反馈太慢”。循环、函数、列表一本本地看合上书之后还是不知道能拿来做什么。小游戏开发是打破这种状态的有效方式你能看到窗口弹出来、角色动起来、分数涨起来这种正反馈会直接把学习兴趣拉满。这篇文章会用三个步骤带你走完一条完整的 Python 练手路径先写一个不依赖第三方库的“猜数字”游戏再写一个基于 pygame 的“接苹果”小游戏最后用 PyInstaller 把游戏打包成 exe 发给朋友玩。这条路径覆盖了环境配置、基础语法、第三方库使用、事件循环、碰撞检测和打包发布。整个项目的硬件门槛很低普通办公电脑和轻薄本都能运行不需要 GPU不需要服务器也不需要额外购买任何软件。你只需要装好 Python能打开命令行就可以按文章顺序跑通全部内容。如果你正处在“语法都会、项目不会”的阶段这篇文章可以直接收藏。1. 核心能力速览这次不是某一个大型开源仓库而是一套适合 Python 初学者的游戏开发练手项目组合。核心价值在于把“学了语法”变成“做出了东西”。整个方案的能力规格如下能力项说明项目类型Python 入门实战 / 小游戏开发教程适用语言版本Python 3.x推荐 3.8 以上第三方依赖pygame、pyinstaller均为可选按需安装硬件要求普通 PC无 GPU 要求运行平台Windows / macOS / Linux启动方式命令行运行 Python 脚本API / 批量任务不涉及核心学习点输入输出、随机数、循环、事件、碰撞检测、打包发布适合人群Python 零基础、入门学习者、希望获得即时反馈的开发者为什么选择游戏作为入门项目而不是一上来就写爬虫或数据分析脚本因为游戏的反馈链路最短。你写一个 20 行的猜数字程序马上就能和电脑“对话”你写一个带有图形界面的 pygame 小游戏马上就能看到窗口、方块、圆点和计分。对初学者来说这种即时结果比任何抽象概念都更能巩固信心。更重要的是游戏开发过程中用到的变量、条件、循环、函数、模块恰好是 Python 最核心的语法。用一个项目带动语法学习比孤立地背知识点有效得多。2. 适用场景与使用边界这套练手方案适合几类人Python 零基础学习者想找一个能快速看到成果的练习项目已经学完基础语法但一直没动手写项目的人以及需要在课堂或培训中带学生入门的人。它也很适合做工作之余的兴趣项目成本低、见效快完全可以在周末完成。但也要说清楚边界。它不适合做生产级游戏开发也不适合做需要复杂物理引擎、成熟动画系统或联网多人同步的商业项目。pygame 更适合验证玩法、教学演示和快速原型。如果要做正式游戏需要转到 Unity、Godot、Unreal 等专业引擎如果要做数据分析这类游戏项目也替代不了 pandas 和 NumPy 的系统学习。它应该被理解成“带你把 Python 基础语法用起来”的项目而不是“从这里走向游戏大厂”的唯一路径。使用过程中需要注意合规和版权问题。如果你导入图片、音效、音乐素材要确认素材来源是否允许免费使用和再分发。发布打包后的 exe 时不要捆绑任何来源不明的文件。游戏中的输入输出目前都是本地演示不涉及用户数据但如果后续你把它扩展成联网版本就要考虑隐私和内容安全边界。3. 环境准备与前置条件先准备 Python 环境。Windows 用户去 Python 官网下载安装包安装时一定要勾选 Add Python to PATH否则后面命令行执行python会提示找不到命令。macOS 用户如果安装了 Homebrew可以用brew install python3安装Linux 用户则用包管理器安装例如 Ubuntu 下执行sudo apt install python3 python3-pip。安装完成后打开终端或命令行执行下面两个命令确认环境可用python --version pip --version如果能正常输出版本号Python 环境就准备好了。需要说明的是猜数字游戏只用标准库不需要安装任何第三方包pygame 接苹果小游戏需要安装 pygame打包 exe 需要安装 pyinstaller。安装命令如下pip install pygame pyinstaller如果下载速度很慢可以临时使用国内 PyPI 镜像但这不是必须操作。更稳妥的做法是先建一个项目目录把后续的 Python 脚本都放在里面。这样打包和清理文件会方便很多。建议再创建一个虚拟环境避免把依赖装到系统全局环境里。虚拟环境的创建方式在后面的“打包发布”章节会专门说明这里先了解即可。整体前置检查清单如下Python 3.x 已安装命令行可以执行python --versionpip已可用项目目录已创建例如D:\python_games如果运行 pygame 项目需要提前安装 pygame4. 第一个游戏猜数字纯标准库无第三方依赖猜数字游戏是最经典的 Python 入门实践它不依赖任何第三方库只要 Python 能运行这段代码就能跑。游戏的规则是程序随机生成一个 1 到 100 之间的整数玩家在有限次数内猜出这个数字程序会提示“大了”或“小了”。把下面代码保存为guess_number.py放到你的项目目录中。import random target random.randint(1, 100) print(我已经想好了一个 1-100 之间的数字猜猜看吧) chances 7 for i in range(chances): guess input(f第 {i 1} 次尝试请输入数字) if not guess.isdigit(): print(请输入有效的数字) continue guess int(guess) if guess target: print(恭喜你猜对了) break elif guess target: print(小了再试一次) else: print(大了再试一次) else: print(f机会用完了正确答案是 {target})在命令行进入项目目录运行python guess_number.py程序会在交互式界面中提示你输入数字。猜中后输出“恭喜你猜对了”结束运行。如果 7 次机会用完程序会输出正确答案。这是整个项目里最简单但最完整的“输入-处理-输出”闭环。这段代码值得拆开看import random是导入标准库random.randint(1, 100)生成随机整数input接收控制台输入isdigit()判断输入是否全部是数字避免字符串转整数时报错for...else结构处理“机会用尽”的情况。你可以试着改三个点把机会次数改成 5观察难度变化把随机范围从 100 改成 1000把猜中后的提示改得更花哨。每一次改动都会加深对语法的理解。5. 第二个游戏pygame 接苹果小游戏猜数字能让你写出第一个可交互程序但它没有图形界面。接下来用 pygame 做一个真正的桌面小游戏“接苹果”。游戏画面中包含一个玩家控制的蓝色矩形和一个个红色圆点苹果。苹果从窗口顶部掉落玩家按键盘左右方向键移动接住苹果加分没接住则减少生命值生命值归零游戏结束。每接住 5 个苹果苹果下落速度会提升一档。把下面代码保存为catch_apple.py。运行前先确保 pygame 已经安装。import pygame import random pygame.init() WIDTH, HEIGHT 600, 700 FPS 60 screen pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption(Catch Apple - Python Game) WHITE (255, 255, 255) BLACK (0, 0, 0) RED (220, 50, 50) BLUE (50, 120, 220) clock pygame.time.Clock() player_width 80 player_height 20 player_x (WIDTH - player_width) // 2 player_y HEIGHT - 60 player_speed 8 apple_radius 12 apple_x random.randint(apple_radius, WIDTH - apple_radius) apple_y 0 apple_speed 6 score 0 lives 3 font pygame.font.SysFont(Arial, 28) running True while running: clock.tick(FPS) for event in pygame.event.get(): if event.type pygame.QUIT: running False keys pygame.key.get_pressed() if keys[pygame.K_LEFT] and player_x 0: player_x - player_speed if keys[pygame.K_RIGHT] and player_x WIDTH - player_width: player_x player_speed apple_y apple_speed if apple_y HEIGHT: lives - 1 apple_x random.randint(apple_radius, WIDTH - apple_radius) apple_y 0 if lives 0: running False if (player_x apple_x player_x player_width) and (player_y apple_y player_y player_height apple_radius): score 1 apple_x random.randint(apple_radius, WIDTH - apple_radius) apple_y 0 if score % 5 0: apple_speed 1 screen.fill(WHITE) pygame.draw.rect(screen, BLUE, (player_x, player_y, player_width, player_height)) pygame.draw.circle(screen, RED, (apple_x, apple_y), apple_radius) score_text font.render(fScore: {score}, True, BLACK) lives_text font.render(fLives: {lives}, True, BLACK) screen.blit(score_text, (10, 10)) screen.blit(lives_text, (480, 10)) pygame.display.flip() pygame.quit() print(Game Over, final score:, score)运行方式python catch_apple.py启动后会出现一个 600 x 700 的窗口蓝色矩形在底部红色苹果不断从顶部掉落。按键盘左右方向键控制移动接住苹果后左上角积分加 1右上角生命值显示剩余次数。窗口关闭按钮可以随时退出游戏。这段代码里值得关注的概念有三个。第一是游戏主循环while running配合pygame.event.get()处理窗口关闭事件这是 pygame 程序的基本骨架。第二是刷新率控制clock.tick(FPS)把画面帧率限制在 60 帧避免程序占用过多 CPU 资源。第三是碰撞检测player_x apple_x player_x player_width这个表达式判断苹果是否落在玩家矩形范围内是游戏逻辑中最重要的一个条件。你可以尝试调整apple_speed、player_speed、lives的初始值观察游戏难度和手感的变化。6. 从接苹果到“人狗大作战”类玩法扩展不少人在搜索“人狗大作战 python 代码”这类内容想找现成的“对战/追逐”小游戏。其实这类玩法和上面的接苹果项目在技术结构上非常接近核心都是“按键控制 角色移动 碰撞判断 边界限制”。如果你能找到完整的规则定义完全可以在这个基础上扩展。但在我没有拿到确切规则和素材的情况下不建议直接套用网上来源不明的整套代码容易踩到依赖缺失和素材版权问题。更稳妥的做法是先跑通接苹果游戏然后把单角色改成双角色一个角色由玩家控制另一个角色由简单的 AI 控制。AI 的基本逻辑是“每帧向玩家方向移动一点”一旦两个角色位置重叠判定游戏结束。核心伪代码如下# AI 追逐逻辑示例 if ai_x player_x: ai_x ai_speed elif ai_x player_x: ai_x - ai_speed if abs(ai_x - player_x) threshold and abs(ai_y - player_y) threshold: game_over True这类追逐玩法是理解游戏 AI 的起点。你把玩家控制、AI 移动、碰撞检测三个模块拆开写后续再做任何双人游戏都会轻松很多。结构上建议保持“初始化、游戏循环、事件处理、更新逻辑、绘制画面”的清晰分层不要把所有代码堆在同一个地方。7. 把游戏打包成 exe给朋友也能玩Python 脚本在自己的电脑上运行很容易但发到别人电脑上就要求对方也装 Python这不现实。打包成 exe 是一个合适的发布方式。这里使用 PyInstaller最简单的一键打包命令是pip install pyinstaller pyinstaller -F -w catch_apple.py执行完成后项目目录下会出现build、dist和catch_apple.spec。真正可运行的 exe 存放在dist文件夹里名字是catch_apple.exe。-F表示打包成单个文件-w表示运行时不显示黑色控制台窗口。猜数字游戏本身依赖控制台输入输出所以如果你要打包猜数字就不要加-w否则玩家看不到任何提示。如果你想发送给朋友直接复制dist文件夹里的 exe 给对方即可。需要提醒的是如果你的游戏代码中引用了外部图片或音效文件打包时这些资源文件并不会自动嵌入你需要把素材文件和 exe 放在同一个目录结构下并使用相对路径访问。例如把图片放在assets/images/下运行 exe 时也要保证这个目录存在。打包常用命令补充如下# 不显示控制台窗口适合图形界面游戏 pyinstaller -F -w catch_apple.py # 保留控制台输出适合调试和带 print 的程序 pyinstaller -F catch_apple.py打包后如果提示ModuleNotFoundError: No module named pygame通常说明打包环境和运行环境不一致或者 pygame 没有安装到当前 Python 环境。重新确认安装位置并在同一个虚拟环境里打包即可。如果要让构建过程更干净建议使用虚拟环境。Windows 下创建并激活虚拟环境的命令如下python -m venv game_env game_env\Scripts\activate pip install pygame pyinstaller pyinstaller -F -w catch_apple.pymacOS 和 Linux 下激活命令是source game_env/bin/activate。虚拟环境的好处是打包出来的 exe 只包含本项目用到的依赖体积更小、问题更少也避免污染系统 Python 环境。8. 常见问题与排查方法初学者在跑这类项目时最容易卡在环境而不是代码逻辑。下面这张排查清单覆盖了几个高频问题问题现象可能原因排查方式解决方案python不是内部或外部命令Python 未安装或未勾选 Add to PATH命令行执行python --version重新安装 Python 并勾选 PATHpip不是内部或外部命令Python 安装不完整或 PATH 配置错误执行pip --version重新运行 Python 安装程序修复组件ModuleNotFoundError: No module named pygamepygame 未安装或装到了别的 Python 环境执行pip show pygame在当前环境执行pip install pygamepygame 窗口闪退脚本位置错误、代码中有语法错误直接运行python catch_apple.py观察报错根据报错修正代码游戏画面中文乱码pygame 默认字体不支持中文观察控制台和窗口文字暂用英文字符或加载中文字体文件打包后的 exe 提示缺少模块打包环境与运行环境不一致在虚拟环境内执行打包统一在虚拟环境安装依赖并重新打包游戏运行卡顿帧率控制缺失或绘制逻辑过于复杂确认代码中有clock.tick(FPS)降低绘制频率或优化循环内计算窗口启动后黑屏死循环或主循环没有正确刷新检查pygame.display.flip()在主循环中调用刷新方法除了表格里的问题还有两个实践性建议。第一任何新脚本第一次运行时都先在命令行直接执行不要双击运行。命令行会显示完整报错信息双击运行很可能窗口一闪而过看不到原因。第二修改代码后先只改一个变量不要一次改很多处。游戏是强状态程序一次改动过多出了问题很难定位。9. 最佳实践与学习建议这段内容值得认真看因为它决定了你做完这个项目后能成长多少。第一先跑通再优化。很多初学者拿到代码先想着“怎么写才能更优雅”结果一直没跑起来。正确顺序是先把完整代码保存、运行、看到效果再去拆解每一行的作用最后按自己的想法改参数。我把这种顺序叫作“跑通优先”。只有程序真实运行起来你才能建立对代码的直觉。第二把代码分函数。猜数字游戏的逻辑较短可以全部写在顶层但接苹果游戏建议把初始化、更新逻辑、绘制逻辑分别封装成函数。例如可以定义draw_player()、draw_apple()、update_score()。这样做的好处是后续加道具、加敌人、加关卡时不需要把整个 while 循环推倒重写。第三建立项目目录规范。建议用这样的目录结构组织项目python_games/ ├── guess_number.py ├── catch_apple.py ├── assets/ │ ├── images/ │ └── sounds/ ├── dist/ └── build/把所有脚本放在根目录素材放在 assets 子目录打包输出放在 dist 和 build。不要把所有文件堆在桌面上时间一长自己都找不到。这对以后做自动化脚本、接口服务、数据项目同样适用。第四注意版权和合规。如果用小游戏做练习优先使用自己画的素材或公版素材。网上随便下载的图片、音效不一定允许二次分发尤其是你准备把 exe 发到公开平台的时候。更稳妥的方式是先用最简单的几何图形替代美术素材等游戏玩法稳定后再替换成合规素材。第五不要停留在“抄代码”。把代码跑通只是第一步真正的学习发生在你改代码的时候。改一个数字、调整一个判断条件、增加一个变量你会立刻看到程序行为的变化。这种“改坏-理解-修复”的过程才是编程能力增长最快的阶段。10. 总结与下一步最值得尝试的是先运行guess_number.py用一分钟感受 Python 的交互体验然后换成 pygame 项目体验窗口程序带来的正反馈。最先验证的环境指标是python --version和pip install pygame这两条命令是否成功这是所有后续操作的前提。最容易踩的坑有三个Python 安装时没有勾选 PATH、pip 装到了错误的 Python 环境、打包时加了-w导致猜数字游戏的控制台交互不可见。下一步的扩展方向很灵活。你可以把接苹果游戏改成“躲避障碍”模式也可以给游戏加上简单的菜单界面或者把游戏中的最高分保存到本地文件。再往后你可以学习 pygame 的精灵组和碰撞组这些抽象能显著提升游戏开发效率。更进阶的方向是做一个网页版小游戏或者把 pygame 的点击输入理解为“事件驱动”的一种形式为以后学习 GUI 桌面程序或 Web 前端交互打下基础。如果你现在正处在“知道语法但写不出东西”的阶段我的建议很简单先把上面的guess_number.py复制到本地跑起来然后把机会次数从 7 改成 5看看会变成什么样。当你开始主动修改第一个数字时你对 Python 的兴趣就已经超过了语法书。
返回列表