使用Pygame编写的一个游戏项目

代码地址:https://github.com/DeqianBai/Project-Alien-Invasion

Project-Alien-Invasion

游戏开始界面

使用Pygame编写的一个游戏项目
在游戏《外星人入侵》中,玩家控制着一艘最初出现在屏幕底部中央的飞船。玩家
可以使用箭头键左右移动飞船,还可使用空格键进行射击。游戏开始时,一群外星人出
现在天空中,他们在屏幕中向下移动。玩家的任务是射杀这些外星人。玩家将所有外星
人都消灭干净后,将出现一群新的外星人,他们移动的速度更快。只要有外星人撞到了
玩家的飞船或到达了屏幕底部,玩家就损失一艘飞船。玩家损失三艘飞船后,游戏结束。

按照开发的顺序整个项目可以分为三个阶段

  • 武装飞船
  • 外星人
  • 记分
    这个三个阶段设计的内容都在对应的.xmind文件里

1. 武装飞船

在第一个开发阶段,我们将创建一艘可左右移动的飞船,这艘飞船在用户按空格键时能够开
火。设置好这种行为后,我们就能够将注意力转向外星人,并提高这款游戏的可玩性。

包括:

  • alien_invasion.py

主文件alien_invasion.py创建一系列整个游戏都要用到的对象:存储在 ai_settings 中的设置、
存储在 screen 中的主显示surface以及一个飞船实例。文件 alien_invasion.py 还包含游戏的主循环,
这是一个调用 check_events() 、 ship.update() 和 update_screen() 的 while 循环。
要玩游戏《外星人入侵》,只需运行文件alien_invasion.py。其他文件(settings.py、
game_functions.py、ship.py)包含的代码被直接或间接地导入到这个文件中。

  • settings.py

文件settings.py包含 Settings 类,这个类只包含方法 init() ,它初始化控制游戏外观和飞
船速度的属性。

  • game_functions.py

文件game_functions.py包含一系列函数,游戏的大部分工作都是由它们完成的。函数
check_events() 检测相关的事件,如按键和松开,并使用辅助函数 check_keydown_events() 和
check_keyup_events() 来处理这些事件。就目前而言,这些函数管理飞船的移动。模块
game_functions 还包含函数 update_screen() ,它用于在每次执行主循环时都重绘屏幕。

  • ship.py

文件ship.py包含 Ship 类,这个类包含方法 init() 、管理飞船位置的方法 update() 以及在
屏幕上绘制飞船的方法 blitme() 。表示飞船的图像存储在文件夹images下的文件ship.bmp中。

  • bullet.py

用来添加射击功能。将编写玩家按空格键时发射子弹(小矩形)的代码。子弹将在屏
幕中向上穿行,抵达屏幕上边缘后消失。

在此阶段你将学到:

  • 游戏开发计划的制定;
  • 使用Pygame编写的游戏的基本结构;
  • 如何设置背景色,以及如何将设置存储在可供游戏的各个部分访问的独立类中;
  • 如何在屏幕上绘制图像,以及如何让玩家控制游戏元素的移动;
  • 如何创建自动移动的元素,如在屏幕中向上飞驰的子弹,以及如何删除不再需要的对象;
  • 如何定期重构项目的代码,为后续开发提供便利

2. 外星人

在此阶段,我们将在游戏《外星人入侵》中添加外星人。

  • 首先,我们在屏幕上边缘附近添加一个外星人;
  • 然后生成一群外星人。我们让这群外星人向两边和下面移动,并删除被子弹击中的外星人。
  • 最后,我们将显示玩家拥有的飞船数量,并在玩家的飞船用完后结束游戏。

包括:

  • alien.py

alien.py用来控制每个外星人的行为,我们将像创建Ship 类那样创建这个类,同样的,需要在alien_invasion.py中创建一个 Alien 实例

  • game_stats.py

game_stats.py用于跟踪游戏统计信息,记录飞船被撞了多少次,同时跟踪统计信息还有助于记分。帮助我们确定外星人与飞船发生碰撞时,该做些什么

在此阶段你将学到:

  • 如何在游戏中添加大量相同的元素,如创建一群外星人;
  • 如何使用嵌套循环来创建元素网格,还通过调用每个元素的方法 update() 移动了大量的元素;
  • 如何控制对象在屏幕上移动的方向,以及如何响应事件,如有外星人到达屏幕边缘;
  • 如何检测和响应子弹和外星人碰撞以及外星人和飞船碰撞;
  • 如何在游戏中跟踪统计信息,以及如何使用标志 game_active 来判断游戏是否结束了。

3.记分

在本阶段我们将添加一个Play按钮,用于根据需要启动游戏以及在游戏结束后重启游戏。
我们还将修改这个游戏,使其在玩家的等级提高时加快节奏,并实现一个记分系统。包括:

  • button.py

由于Pygame没有内置创建按钮的方法,我们创建一个 Button 类,用于创建带标签的实心矩形。
你可以在游戏中使用这些代码来创建任何按钮

  • scoreboard.py

为在屏幕上显示得分,我们需要创建一个新类 Scoreboard 。这个类用于显示当前得分、最高得分、等级和余下的飞船数。同样的在alien_invasion.py中创建一个 Scoreboard 实例

在此阶段你将学到:

  • 如何创建用于开始新游戏的Play按钮,如何检测鼠标事件,以及在游戏处于活动状态时如何隐藏光标。
  • 如何随游戏的进行调整其节奏;
  • 如何实现记分系统;
  • 以及如何以文本和非文本方式显示信息。

项目来源:Python 编程:从入门到实践

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 今日任务: 添加飞船类 2.1:添加飞船形象 请在主项目文件夹(alien_invasion)中新建一个文件夹,将...
    微风细雨007阅读 5,687评论 3 5
  • 最近照着《Python编程从入门到实践》这本书上的内容,开发了第一个完整的Python项目。之前都是用Python...
    旧时光的镜子阅读 8,397评论 0 1
  • 连山脉脉两相依,只手画别离。 白墙灰瓦,南湖西屏,筏影阅游奇。 清风扶翠织人外,提笔问归期。 临此缘何,乐章珠玉,...
    落墨之墨阅读 180评论 0 0
  • 当做闹钟般存在的“秋酿”大致要响3次,懒懒地起床,虽然是很自由的日子但我尽力让自己维持良好的作息习惯。因为惰性把洗...
    尧阿尧阅读 132评论 0 0
  • 夜,静的可爱。蒙蒙的月亮,好像盖上了一块纱巾。闹腾了一天的孩子睡着了,上夜班的人在一个小时后即将换班。 这是一个可...
    初秋微雨阅读 102评论 0 0