本文发表于入职啦(公众号: ruzhila) 大家可以访问入职啦学习更多的编程实战。
🎉 完全用Python的tkinter实现打砖块游戏,无需第三方依赖👏 🎉
项目地址
代码已经开源, breakout-py 👏 欢迎Star
代码运行效果:
所有的项目都在github上开源:100-line-code 欢迎Star 👏
用100行代码的不同语言(Java、Python、Go、Javascript、Rust)实现项目,通过讲解项目的实现,帮助大家学习编程
我们会定期在群里分享最新的项目实战代码,包括不同语言的实现
老师还会详细讲解代码优化的思路,扫码加入实战群:
直接上代码
代码解析
打砖块是经典的游戏,我们用100行代码实现了这个游戏,这次仍然使用tkinter库,这个库是Python自带的,无需安装
打砖块的游戏规则
游戏分为3个部分:挡板、小球、砖块
- 挡板:用来接住小球,防止小球掉落,通过键盘的左右键控制挡板的移动
- 小球:用来击打砖块,当小球击打到砖块时,砖块消失,小球碰到砖块、挡板、墙壁时会反弹
- 砖块:用来被小球击打,固定位置
数据结构抽象
根据游戏规则,我们把游戏中的元素抽象成类,挡板、小球、砖块都是游戏中的元素,我们可以把它们抽象成类
class Ball:
# 对应小球的位置、速度、半径
class Paddle:
# 对应挡板的位置、速度、宽度
# 砖块的代码就是普通的rectangle
小球的移动
小球的移动通过self.canvas.move这个方法来移动,不同于其他的游戏引擎,这个方法是直接移动画布上的元素 这样可以减少很多的计算,提高性能
计算小球和砖块的碰撞
- 27-34行 代码通过计算小球的外型,来判断小球是否碰到了墙壁,如果碰到了,就反弹
- 第5行 两个物体是否碰撞其实就是两个包围盒是否出现了重叠,这里我们通过计算两个包围盒的位置来判断是否碰撞
挡板的移动
挡板的移动通过键盘事件来控制,通过self.canvas.bind_all方法来绑定键盘事件
当停止按键时,挡板就会停止移动
总结
打砖块游戏是一个经典的游戏,通过这个项目,我们学习了如何使用Python的tkinter库实现一个游戏
tkinter是虽然很丑,但是好用哈哈哈哈
之所以不选择pygame, 是因为小游戏对性能要求很低,要选择学习门槛比较低的代码,对游戏的主要流程了解才是我们学习的重点
写小型的跨平台的UI程序,tkinter是一个不错的选择
交流
我们构建了一个100行代码项目的实战群,大家可以扫码加入,一起学习编程
也可以访问入职啦学习更多的编程实战
所有的代码都在github上开源:100-line-code 欢迎Star 👏
最后祝大家5.1劳动节快乐,多学习多锻炼,提高自己的编程能力,加油!🎉