练手项目:利用pygame库编写射击游戏
本项目使用pygame模块编写了射击游戏,目的在于训练自己的Python基本功、了解中小型程序框架以及学习代码重构等。游戏具有一定的可玩性,感兴趣的可以试一下。
项目说明:出自《Python编程 从入门到实践》中12-14章节的例子。
- 游戏包含飞船、外星人两个角色。
- 外星人编队向左右和下方移动,直至接触到屏幕底端或碰撞到外星人;飞船顶端可发射子弹击落外星人。
- 随着游戏的进行,子弹速度、飞船移动速度、外星人移动速度以可设置的速度提升,增加游戏难度和可玩性。
- 游戏界面显示剩余飞船数目(左上角)、最高分(中上)、当前分和游戏等级(右上角)等信息。
github地址:https://github.com/ikheu/alien_invasion
效果图如下:

程序框架:
| alien_invasion.py | 包含运行游戏的run_game函数 |
| alien.py | 外星人类 |
| bullet.py | 子弹类 |
| button.py | 按钮类 |
| game_functions.py | 包含实现游戏功能的函数 |
| game_stats.py | 跟踪游戏信息的类 |
| scoreboard.py | 显示得分的类 |
| settings.py | 存储设置的类 |
| ship.py | 飞船类 |
项目心得:
- 项目中使用pygame模块中的功能比较少,主要包括两部分:和图形相关的reac对象,以及判断对象间的碰撞的函数。而且这两部分很容易理解,因此项目封闭性不强,很适合作为锻炼python基本功的练手项目。
- 代码重构方面:程序的各部分应功能相对独立,层次清晰明了。如在setting.py中设置游戏参数,而避免直接把具体参数写到功能相关的程序里,导致后续修改的困难。同时还要避免把函数写得太长,如最复杂的game_function文件里包含许多个功能单一的函数。在添加新功能前,要审核现有代码,对混乱、低效的代码进行清理。有句话叫动态类型一时爽,代码重构火葬场,可能是程序结构还比较简单吧,这个还没能深刻体会到。
- 在写代码时,要尽量保持好的风格。可以参考Effective Python一书。
- 熟练使用git、github进行版本控制(很重要)。
另外写的博客貌似也没人看啊,有点沮丧。不过还是要沉住气,就权当自己的私人技术笔记了,傻笑:)
练手项目:利用pygame库编写射击游戏的更多相关文章
- Python之路【第二十四篇】:Python学习路径及练手项目合集
Python学习路径及练手项目合集 Wayne Shi· 2 个月前 参照:https://zhuanlan.zhihu.com/p/23561159 更多文章欢迎关注专栏:学习编程. 本系列Py ...
- web前端学习部落22群分享给需要前端练手项目
前端学习还是很有趣的,可以较快的上手然后自己开发一些好玩的项目来练手,网上也可以一抓一大把关于前端开发的小项目,可是还是有新手在学习的时候不知道可以做什么,以及怎么做,因此,就整理了一些前端项目教程, ...
- 推荐:一个适合于Python新手的入门练手项目
随着人工智能的兴起,国内掀起了一股Python学习热潮,入门级编程语言,大多选择Python,有经验的程序员,也开始学习Python,正所谓是人生苦短,我用Python 有个Python入门练手项目, ...
- 10个有趣的Python教程,附视频讲解+练手项目。
从前的日色变得慢,车.马.邮件都慢 一生只够爱一门编程语言 从前的教程也好看,画面精美有样子 你看了,立马就懂了 Python最性感的地方,就在于它的趣味性和前沿性,学习Python,你总能像科技节的 ...
- 20个Java练手项目,献给嗜学如狂的人
给大家推荐一条由浅入深的JAVA学习路径,首先完成 Java基础.JDK.JDBC.正则表达式等基础实验,然后进阶到 J2SE 和 SSH 框架学习.最后再通过有趣的练手项目进行巩固. JAVA基础 ...
- 练手项目之image caption问题记录
小白一个,刚刚费了老大的劲完成一个练手项目--image caption,虽然跑通了,但是评估结果却惨不忍睹.于是贴上大神的作品,留待日后慢慢消化.顺便记录下自己踩坑的一些问题. 先膜拜下大神的作品. ...
- 适合Python的5大练手项目, 你练了么?
在练手项目的选择上,还存在疑问?不知道要从哪种项目先下手? 首先有两点建议: 最好不要写太应用的程序练手,要思考什么更像是知识,老只会写写爬虫是无用的,但是完全不写也不行. 对于练手的程序,要注意简化 ...
- 适合Python 新手的5大练手项目,你练了么?
接下来就给大家介绍几种适合新手的练手项目. 0.算法系列-排序与查找 Python写swap很方便,就一句话(a, b = b, a),于是写基于比较的排序能短小精悍.刚上手一门新语言练算法最合适不过 ...
- 10个相见恨晚的 Java 在线练手项目
10个有意思的Java练手项目: 1.Java 开发简单的计算器 难度为一般,适合具有 Java 基础和 Swing 组件编程知识的用户学习 2.制作一个自己的 Java 编辑器 难度中等,适合 Ja ...
随机推荐
- FileZilla出现Failed to convert command to 8 bit charset
FileZilla这款FTP客户端软件,自从华哥使用以来,采用其默认的设置,一直用得很顺畅,没有出现过什么问题.但是今天碰到了一个问题.如图. 错误信息为:Failed to convert comm ...
- 关于IDE与环境变量的一点说明
环境变量就是当计算机要执行操作时,在环境变量所制定的范围内查找该操作. 比如linux的ls命令,计算机就需要在$PATH规定的目录中寻找该ls的可执行文件. java的classpath,在该规定的 ...
- Hyperledger Fabric Transaction Flow——事务处理流程
Transaction Flow 本文概述了在标准资产交换过程中发生的事务机制.这个场景包括两个客户,A和B,他们在购买和销售萝卜(产品).他们每个人在网络上都有一个peer,通过这个网络,他们发送自 ...
- C# winform引用com组件,创建AXHOST组件失败解决方案
解决方法非常简单,请首先关闭你的开发工具然后删除所有*.vshost.exe 的文件. 重新打开visual studio开发工具,重新编译你的程序.
- linux_初始参数选择
目前linux发行版? linux内核 : Linux Kernel2.2 2.4 2.6 3.x 发行版本: Red Hat 主流 6.x, 正在发展 7.x Fedora: 为Red Hat ...
- 国内不谈java
今天晚上在整理电脑,不知道怎么回事,电脑里面放着一篇文章.打开一看写的挺好的,现在就贴出来,望共勉. 国内不谈java--会有千万人跳出来和你争嘴的.越是如此,我越是不忍心不说出来,越是不不忍心看 ...
- cursor的moveToNext()与moveToFirst()
String sql = "select count(*) as c from sqlite_master where type ='table' and name ='" + t ...
- 【转】nagios使用带url的check_http检测主机
前一段时间在Cu论坛发现一个提问,问题是nagios关于检测主机http服务的.原帖地址http://bbs.chinaunix.net /forum.php?mod=viewthread&t ...
- centos配置单网卡为Trunk模式
单网卡配置多IP(trunk模式)操作标准 1.linux的单网卡配置多IP的操作 下面为linux系统单网卡配置多IP(trunk模式)的操作步骤,系统平台为centos5.5.全部操作完成后,将实 ...
- squid安装及运行指南
squid安装及运行指南 0. What is squid Squid是一个高性能的代理缓存服务器,Squid支持FTP.gopher.HTTPS和HTTP协议.和一般的代理缓存软件不同,Squid用 ...