调整飞船的速度 当前,每次执行while循环时,飞船最多移动一个像素,我们可以在Settings中添加ship_speed_factor,用于控制飞船的速度。...: check_keyup_events(event,ship) 射击 接下来添加射击功能,使玩家按空格键时发射子弹,子弹将在屏幕中向上穿行,抵达屏幕后消失。...这里我们在Settings类中设置外星人移动的速度,然后通过Alien类中的update的方法来实现移动 射杀外星人 要想射杀外星人,就必须先检测两个编组成员之间是否发生碰撞,在游戏中,碰撞就是游戏元素重叠在一起...子弹击中外星人时,需要立马知道,并同时使被碰撞的外星人立即消失,因此我们需要在更新子弹的位置后立即检测碰撞。...结束游戏 这里我们还需要知道何时该结束游戏,有以下几种情况: 飞船全部被摧毁 外星人到达屏幕底部 实际效果: 计分 最后我们将给游戏添加一个Play按钮,用于根据需要启动游戏以及在游戏结束后重启游戏
参考链接: Python中的逻辑门 引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏、后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个...调整飞船的速度 当前,每次执行while循环时,飞船最多移动一个像素,我们可以在Settings中添加ship_speed_factor,用于控制飞船的速度。...(event,ship) 射击 接下来添加射击功能,使玩家按空格键时发射子弹,子弹将在屏幕中向上穿行,抵达屏幕后消失。 ...这里我们在Settings类中设置外星人移动的速度,然后通过Alien类中的update的方法来实现移动 射杀外星人 要想射杀外星人,就必须先检测两个编组成员之间是否发生碰撞,在游戏中,碰撞就是游戏元素重叠在一起...结束游戏 这里我们还需要知道何时该结束游戏,有以下几种情况: 飞船全部被摧毁外星人到达屏幕底部 实际效果: 计分 最后我们将给游戏添加一个Play按钮,用于根据需要启动游戏以及在游戏结束后重启游戏
13.4.4 向下移动外星人群并改变移动方向 有外星人到达屏幕边缘时,需要将整群外星人下移,并改变它们的移动方向。...(ai_settings, screen, ship, aliens, bullets) 如果你现在运行这个游戏,外星人群将在屏幕上来回移动,并在抵达屏幕边缘后向下移动。...现在可以开始射杀外星人,检查是否有外星人撞到飞船,或抵达了屏幕底端。 13.5 射杀外星人 我们创建了飞船和外星人群,但子弹击中外星人时,将穿过外星人,因为我们还没有检查碰 撞。...每当 有子弹和外星人的rect重叠时,groupcollide()就在它返回的字典中添加一个键值对。两个实参True告诉Pygame删除发生碰撞的子弹和外星人。...如果是,就使用方法empty()删除编组中余下的所 有精灵,从而删除现有的所有子弹。我们还调用了create_fleet(),再次在屏幕上显示一群外 星人。
为了在屏幕上绘制玩家的飞船,我们将加载一幅图像,再使用Pygame()方法blit()绘制它。...调整飞船的速度 当前,每次执行while循环时,飞船最多移动一个像素,我们可以在Settings中添加ship_speed_factor,用于控制飞船的速度。...这里我们在Settings类中设置外星人移动的速度,然后通过Alien类中的update的方法来实现移动 射杀外星人 要想射杀外星人,就必须先检测两个编组成员之间是否发生碰撞,在游戏中,碰撞就是游戏元素重叠在一起...子弹击中外星人时,需要立马知道,并同时使被碰撞的外星人立即消失,因此我们需要在更新子弹的位置后立即检测碰撞。...我们还将实现一个计分系统,能够在玩家等级提高时加快节奏。 添加Play按钮 这里可以先将游戏初始化为非活动状态,当我们点击了按钮,就开始游戏。 由于Pygame中没有内置的创建按钮的方法。
先送上一波效果图(被压缩的时间略短) 效果图 游戏简介 :在游戏《外星人入侵》中 ,玩家控制着一艘最初出现在屏幕底部中央的飞船 。玩家可以使用箭头键左右移动飞船 ,还可使用空格键进行射击 。...游戏开始时 ,一群外星人出现在天空中 ,他们在屏幕中向下移动 。玩家的任务是射杀这些外星人 。玩家将所有外星人都消灭干净后 ,将出现一群新的外星人 ,他们移动的速度更快 。...;在主函数中将对象实例化 ,对对象中的成员变量和函数进行调用实现移动 、击杀等操作 ;本节实现飞船和子弹类和基本功能 。...run_game()定义了主函数 ,首先绘制屏幕 , 对象 screen 是一个 surface ,在 pygame 中,surface 是屏幕的一部分 ,显示游戏元素 。...): """ 如果没有超过当前屏幕显示的最多子弹数,实例化子弹,添加到子弹编组中 """ if(len(bullets) < game_settings.bullet_allowed
2:在开始编码前请安装pygame库(在pycharm终端pip install pygame即可) 如果在安装时遇到以下情况,请更新pip版本(将以下内容复制粘贴到下面回车即可) 《外星人入侵...》游戏简介 在游戏《外星人入侵》中,玩家控制着一艘最初出现在屏幕底部中央的飞船。...玩家可以使用方向键左右移动飞外星人出现在天空中,他们在屏幕中向下移动。玩家的任务就是射杀这些外星人。...玩家将所有的外星人全部射杀,将会出现一群新的外星人群。他们的移动速度更快。只要有外星人撞到玩家的飞船或者屏幕底部,玩家就损失一艘飞船,。玩家损失三艘飞船后游戏结束。...""" pygame.draw.rect(self.screen, self.color, self.rect) button.py 按键类,实例化按键,添加play按钮 import
在Pygame中,surface是屏幕的一部分,用于显示游戏元素。在这 个游戏中,每个元素(如外星人或飞船)都是一个surface。...在我们移动游戏元 素时,pygame.display.flip()将不断更新屏幕,以显示元素的新位置,并在原来的位置隐藏元素, 从而营造平滑移动的效果。...下面来编写一个名为settings的模块, 其中包含一个名为Settings的类,用于将所有设置存储在一个地方,以免在代码中到处添加设置。 这样,我们就能传递一个设置对象,而不是众多不同的设置。...12.4 添加飞船图像 下面将飞船加入到游戏中。为了在屏幕上绘制玩家的飞船,我们将加载一幅图像,再使用 Pygame方法blit()绘制它。 为游戏选择素材时,务必要注意许可。...注意 在Pygame中,原点(0, 0)位于屏幕左上角,向右下方移动时,坐标值将增大。在1200×800 的屏幕上,原点位于左上角,而右下角的坐标为(1200, 800)。
这是一个打飞机的游戏,结构如下: 其中images中包含的素材为 命名为alien.png 命名为ship.png 游戏效果运行是这样的: 敌军,也就是体型稍微大点的,在上方左右移动,并且有规律向下移动...= self.y def draw_bullet(self): """在屏幕上绘制子弹""" pygame.draw.rect(self.screen, self.color...== pygame.K_SPACE: # 创建一颗子弹,并将其加入到编组bullets中 fire_bullet(ai_settings, screen, ship,..."""更新子弹的位置,并且删除已消失的子弹 在for循环中,不应从列表或编组中删除条目,因此必须遍历编组的副本。...""" self.screen.blit(self.image, self.rect) def center_ship(self): """让飞船在屏幕上居中"
pygame.display.flip() 我们在update_screen()的形参列表中添加了sb,并在绘制Play按钮前调用show_score。...有子弹撞到外星人时,Pygame返回一个字典(collisions)。我们检查这个 字典是否存在,如果存在,就将得分加上一个外星人值的点数(见)。...为显示外星人的点数,我们在Settings的方法increase_speed()中添加了一条print语句: settings.py def increase_speed(self): -...我们还将设置得分的格式,在大数字中添加用逗号表示的千位分隔符。...注意 在Python 2.7中,round()总是返回一个小数值,因此我们使用int()来确保报告的得分为 整数。如果你使用的是Python 3,可省略对int()的调用。
在屏幕左上角添加一个外星人,并指定合适的边距。 根据第一个外星人的边距和屏幕尺寸计算屏幕上可容纳多少个外星人。我们将编写一个 循环来创建一系列外星人,这些外星人填满了屏幕的上半部分。... 让外星人群向两边和下方移动,直到外星人被全部击落,有外星人撞到飞船,或有外星 人抵达屏幕底端。如果整群外星人都被击落,我们将再创建一群外星人。...): --snip-- elif event.key == pygame.K_q: sys.exit() 在check_keydown_events()中,我们添加了一个代码块,以便在玩家按Q...屏幕宽度存储在 ai_settings.screen_width中,但需要在屏幕两边都留下一定的边距,把它设置为外星人的宽度。...我们将让外形人群不断这样移动,直到所有外星人都被击落或有 外星人撞上飞船或抵达屏幕底端。 注意 根据你选择的屏幕宽度,在你的系统中,第一行外星人的位置可能稍有不同
在本节中,我们将创建一个名为game_functions的新模块,它将存储大量让游戏《外星人入侵》运行的函数。...代码见下面: 3 调整飞船的速度 当前,每次执行while循环时,飞船最多移动1像素,但我们可以在Settings类中添加属性ship_speed_factor,用于控制飞船的速度。...下面演示了如何在settings.py中添加这个新属性: 4 限制飞船的活动范围 当前,如果玩家按住箭头键的时间足够长,飞船将移到屏幕外面,消失得无影无踪。...表示飞船的图像存储在文件夹images下的文件ship.bmp中。 四 射击子弹 下面来添加射击功能。我们将编写玩家按空格键时发射子弹(小矩形)的代码。子弹将在屏幕中向上穿行,抵达屏幕上边缘后消失。..."""更新屏幕上的图像,并切换到新屏幕""" # 每次循环时都重绘屏幕 screen.fill(ai_settings.bg_color) #在飞船和外星人后面重新绘制所有子弹
12.6.4 调整飞船的速度 当前,每次执行while循环时,飞船最多移动1像素,但我们可以在Settings类中添加属性 ship_speed_factor,用于控制飞船的速度。...下面演示了如何在settings.py中添加这个新属性: settings.py class Settings(): """一个存储游戏《外星人入侵》的所有设置的类""" def __init...表示飞船的图像存储在文件夹images下的文件ship.bmp中。 12.8 射击 下面来添加射击功能。我们将编写玩家按空格键时发射子弹(小矩形)的代码。...__init__()使用了Python 2.7语法。这种语法也适用于Python 3, 但你也可以将这行代码简写为super().__init__()。 在1处,我们创建了子弹的属性rect。...发射出去后,子弹在屏幕中向上移动,这意味着y坐标将不 断减小,因此为更新子弹的位置,我们从self.y中减去self.speed_factor的值(见1)。
在 4 处,我们给在屏幕上绘制子弹的 update_screen() 添加了形参 bullets 。方法 bullets.sprites()返回一个列表,其中包含编组bullets中的所有精灵。...可在settings.py中修改子弹的尺寸、颜色和 速度。 12.8.5 删除已消失的子弹 当前,子弹抵达屏幕顶端后消失,这仅仅是因为Pygame无法在屏幕外面绘制它们。...12.8.6 限制子弹数量 很多射击游戏都对可同时出现在屏幕上的子弹数量进行限制,以鼓励玩家有目标地射击。下 面在游戏《外星人入侵》中作这样的限制。...;如何在屏幕上绘制图像, 以及如何让玩家控制游戏元素的移动;如何创建自动移动的元素,如在屏幕中向上飞驰的子弹, 以及如何删除不再需要的对象;如何定期重构项目的代码,为后续开发提供便利。...在第13章中,我们将在游戏《外星人入侵》中添加外星人。在第13章结束时,你将能够击落 外星人——但愿是在他们撞到飞船前!
接下来,我们创建一群新的外星人,并将飞船居中(见4),稍后将在Ship类中添加方法 center_ship()。...如果有外星人到达屏幕底 端,我们就调用ship_hit();只要检测到一个外星人到达屏幕底端,就无需检查其他外星人,因 此我们在调用ship_hit()后退出循环。...13.8 小结 在本章中,你学习了:如何在游戏中添加大量相同的元素,如创建一群外星人;如何使用嵌 套循环来创建元素网格,还通过调用每个元素的方法update()移动了大量的元素;如何控制对象 在屏幕上移动的方向...在与这个项目相关的最后一章中,我们将添加一个Play按钮,让玩家能够开始游戏,以及游 戏结束后再玩。...第14 章 记 分 14.1 添加 Play 按钮 在本节中,我们将添加一个Play按钮,它在游戏开始前出现,并在游戏结束后再次出现,让 玩家能够开始新游戏。
今天想用pygame库写一个击打外星人飞船的python程序 这个游戏的效果是操纵一个位于屏幕底端的飞船,通过上下左右控制飞船移动方向,按空格发射子弹。游戏中击杀一批飞船后进入下一关卡。...1.飞船部分 由于pygame中已有sprite类,故飞船可直接继承sprite类 注意在继承类时class中标注继承了什么类,_ _init_ _函数中要使用super(Ship,self)....同时需要注意:飞船的左侧不能超过屏幕的左端,否则会很影响游戏体验。其余同理。 然后是blitme函数,这个函数完成了将飞船状态及时更新在屏幕上的工作。...最后写了一个centership函数,是用来在需要的时刻将飞船重新放置到屏幕中央。 ? ?...我们把游戏中所有涉及数据的部分都放在这个文件中,包括了屏幕,速度,子弹,飞船,外星人,游戏节奏以及游戏关卡更新。 ? ?
这次写了一个外星人飞船游戏,上下左右键控制移动,空格键发射炮弹,后续还会继续改进。 ?...= self.screen_rect.bottom # 在飞船属性center中存储小数值 self.center = float(self.rect.centerx...) # 在飞船属性bottomx中存储小数值 self.bottomx = float(self.rect.bottom) # 移动标志...(event, ship) def update_screen(ai_settings, screen, ship, bullets): """更新屏幕上的图像,并切换到新屏幕"""...() ship.blitme() # 让最近绘制的屏幕可见 pygame.display.flip() def update_bullets(bullets): ""
(True) 在ship_hit()中,我们在游戏进入非活动状态后,立即让光标可见。...在这个方法中,我们还设置了fleet_direction,使 得游戏刚开始时,外星人总是向右移动。...在check_bullet_alien_collisions()中,我们在整群外星人都被消灭后调用increase_speed() 来加快游戏的节奏,再创建一群新的外星人: game_functions.py...得分是游戏的一项统计信息,因此我们在GameStats中添加一个score属性: game_stats.py class GameStats(): --snip-- def reset_stats...(None, 48) # 准备初始得分图像 4 self.prep_score() 由于Scoreboard在屏幕上显示文本,因此我们首先导入模块pygame.font。
下面来编写一个名为settings的模块,其中包含一个名为Settings的类,用于将所有设置存储在一个地方,以免在代码中到处添加设置。这样,我们就能传递一个设置对象,而不是众多不同的设置。...另外,这让函数调用更简单,且在项目增大时修改游戏的外观更容易:要修改游戏,只需修改settings.py中的一些值,而无需查找散布在文件中的不同设置 下面是最初的Settings类: class Settings...pygame.display.flip() run_game() 二 添加飞船的图像 使用ship.bm图片加载飞船:如下图 ? ...(4)在Pygame中,原点(0, 0)位于屏幕左上角,向右下方移动时,坐标值将增大。在1200×800的屏幕上,原点位于左上角,而右下角的坐标为(1200, 800)。...三 在屏幕上绘制飞船 下面更新alien_invasion.py: import sys from settings import Settings from ship import Ship import
接着上节的继续学习,在本章中,我们将结束游戏《外星人入侵》的开发。我们将添加一个Play按钮,用于根据需要启动游戏以及在游戏结束后重启游戏。...调用font.render()将存储在msg中的文本转换为图像,然后将该图像存储在msg_image中。...二 在屏幕绘制按钮 在alien_invasion.py中添加标亮的代码: import pygame from pygame.sprite import Group from settings import...三 开始游戏 为在玩家单击Play按钮时开始新游戏,需在game_functions.py中添加如下代码,以监视与这个按钮相关的鼠标事件: def check_events(ai_settings, screen...为在玩家每次单击Play按钮时都重置游戏,需要重置统计信息、删除现有的外星人和子弹、创建一群新的外星人,并让飞船居中。
为让按钮在屏幕上居中,我们创建一个表示按钮的rect对象(见4),并将 其center属性设置为屏幕的center属性。 Pygame通过将你要显示的字符串渲染为图像来处理文本。...调用font.render()将存储在 msg中的文本转换为图像,然后将该图像存储在msg_image中(见1)。...14.1.3 开始游戏 为在玩家单击Play按钮时开始新游戏,需在game_functions.py中添加如下代码,以监视与这 个按钮相关的鼠标事件: game_functions.py def...无论玩家单击屏幕的什么地方,Pygame都将检测到一个MOUSEBUTTONDOWN事件(见1),但我 们只想让这个游戏在玩家用鼠标单击Play按钮时作出响应。...为在玩家每次单击Play按钮时都重置游戏,需要重置统计信息、删除现有的外星人和子弹、 创建一群新的外星人,并让飞船居中,如下所示: game_functions.py def check_play_button