现在让hacker带领你们走进pygame的世界 外星人入侵 游戏开始前的注意事项 《外星人入侵》游戏简介 开始游戏项目实战开发 游戏中需要的所有模块 alien_invasion.py alien.py...2:在开始编码前请安装pygame库(在pycharm终端pip install pygame即可) 如果在安装时遇到以下情况,请更新pip版本(将以下内容复制粘贴到下面回车即可) 《外星人入侵...》游戏简介 在游戏《外星人入侵》中,玩家控制着一艘最初出现在屏幕底部中央的飞船。...只要有外星人撞到玩家的飞船或者屏幕底部,玩家就损失一艘飞船,。玩家损失三艘飞船后游戏结束。...,将子弹存储到编组Group中 import pygame from pygame.sprite import Sprite class Bullet(Sprite): """一个对飞船发射的子弹进行管理的类
如果此时运行alien_invasion.py,将能够左右移动飞船,并发射任意数量的子弹。子弹在屏 幕上向上穿行,抵达屏幕顶部后消失,如图12-3所示。...如果这些代码没有问题,我们发射子弹后查看终端窗口时,将发现随着子弹一颗颗地在屏幕 顶端消失,子弹数将逐渐降为零。运行这个游戏并确认子弹已被删除后,将这条print语句删除。...12.8.6 限制子弹数量 很多射击游戏都对可同时出现在屏幕上的子弹数量进行限制,以鼓励玩家有目标地射击。下 面在游戏《外星人入侵》中作这样的限制。...主 循环检查玩家的输入(见1),然后更新飞船的位置(见2)和所有未消失的子弹的位置(见3)。 接下来,我们使用更新后的位置来绘制新屏幕(见4)。...在第13章中,我们将在游戏《外星人入侵》中添加外星人。在第13章结束时,你将能够击落 外星人——但愿是在他们撞到飞船前!
网址: https://www.kancloud.cn/digest/python-notes/163847 从小白到大牛: 第一次写游戏总会有些激动,一方面是憧憬着游戏写好之后的开心,另一方面是因为不知道该从哪里开始写起...对于该游戏:(只对主要部分进行分析) 游戏的主人翁:飞船、子弹、外星人 最基本的三个类:ship、bullet、alien(考虑各个类的属性和方法,对类进行合适的封装)还有一个必不可少的类:alien_invasion...(控制游戏的运行) 玩法:玩家按下键盘上的左右按钮控制飞船的左右移动,通过按下空格发射子弹,击杀外星人,随着玩家分数和等级的提高,外星人和飞船的速度会越来越快,若飞船移动到了屏幕底端或和飞船相撞,则玩家损失一次机会...:飞船移动、重绘等的设置 游戏思路分析: 现在的需求很简单:玩家按下左右键控制飞船在屏幕限定范围水平内移动,按下空格键发射子弹击杀外星人。...要求:(游戏开始后) 点击Play按钮开始游戏,按下键盘上的Q键退出游戏 外星人按照S形从屏幕上方开始向底部运动,且随着用户得分和等级的提高运动速度越来越快 飞船一次发射的子弹控制在10个以内,且只能在屏幕范围内进行移动
先送上一波效果图(被压缩的时间略短) 效果图 游戏简介 :在游戏《外星人入侵》中 ,玩家控制着一艘最初出现在屏幕底部中央的飞船 。玩家可以使用箭头键左右移动飞船 ,还可使用空格键进行射击 。...游戏开始时 ,一群外星人出现在天空中 ,他们在屏幕中向下移动 。玩家的任务是射杀这些外星人 。玩家将所有外星人都消灭干净后 ,将出现一群新的外星人 ,他们移动的速度更快 。...只要有外星人撞到了玩家的飞船或到达了屏幕底部 ,玩家就损失一艘飞船 。玩家损失三艘飞船后 ,游戏结束 。...每个元素 ,外星人或者飞船 ,子弹都是一个surface 。...() while True: # 检测飞船事件:左移右移发射子弹 gf.check_events(ship,game_settings,screen,bullets
在本节中,我们将创建一个名为game_functions的新模块,它将存储大量让游戏《外星人入侵》运行的函数。...下面来修复这种问题,让飞船到达屏幕边缘后停止移动。...表示飞船的图像存储在文件夹images下的文件ship.bmp中。 四 射击子弹 下面来添加射击功能。我们将编写玩家按空格键时发射子弹(小矩形)的代码。子弹将在屏幕中向上穿行,抵达屏幕上边缘后消失。...1 添加子弹设置 首先,更新settings.py,在其方法__init__()末尾存储新类Bullet所需的值: class Settings(): '''存储《外星人入侵》的所有设置的类''...方法update()管理子弹的位置。发射出去后,子弹在屏幕中向上移动,这意味着y坐标将不断减小,因此为更新子弹的位置,子弹发射后,其x坐标始终不变,因此子弹将沿直线垂直地往上穿行。
子弹都是从飞船头部发出的,所以它的横坐标等于飞船中心的横坐标,左上角的纵坐标=屏幕高度-飞船高-子弹高。...在Game.Update中更新,与飞船类似,只是飞船只能水平移动,而子弹只能垂直移动。...现在我们就来实现按空格发射子弹的功能。...运行: 增加主界面和结束界面 现在一旦运行程序,外星人们就开始运动了。我们想要增加一个按下空格键才开始的功能,并且游戏结束之后,我们也希望能显示一个Game Over的界面。...游戏结束时切换为GameOver状态,在GameOver状态后按下空格或鼠标左键即重新开始游戏。
接下来我们开始处理游戏的动态方面。 驾驶飞船 这里我们要实现的就是使玩家通过左右箭头键来控制飞船的左移与右移。...game_functions: [ee6722ad276b40a8bd427239a52568c5~tplv-k3u1fbpfcp-zoom-1.image] 射击 接下来添加射击功能,使玩家按空格键时发射子弹...添加子弹设置 在Settings类中增加一些子弹的属性,这里我们创建一个宽3像素,高15像素的深灰色子弹。子弹的速度比飞船稍低。...,就可以编写代码了,在玩家每次按空格键时都会发射一发子弹。...子弹击中外星人时,需要立马知道,并同时使被碰撞的外星人立即消失,因此我们需要在更新子弹的位置后立即检测碰撞。
下面演示了如何在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)。...属性speed_factor让我们能够随着游戏的进行或根 据需要提高子弹的速度,以调整游戏的行为。子弹发射后,其x坐标始终不变,因此子弹将沿直 线垂直地往上穿行。
pygame.sprite import Group from time import sleep import pygame.font # 修改游戏的一些新设置 class Settings(): """存储《外星人入侵...create_alien(ai_settings, screen, aliens, alien_number, row_number) class Bullet(Sprite): """一个对飞船发射的子弹进行管理的类...() def fire_bullets(ai_settings, screen, ship, bullets): """如果还没有到达限制,就发射一颗子弹""" # 创建一颗子弹,并将其加入到编组bullets..., bullets, play_button): """更新屏幕上的图像,并切换到新屏幕""" # 每次循环时都重新绘制屏幕 screen.fill(ai_settings.bg_color) # 在飞船和外星人后面重新绘制所有子弹...更多有趣的经典小游戏实现专题,分享给大家: C++经典小游戏汇总 python经典小游戏汇总 python俄罗斯方块游戏集合 JavaScript经典游戏 玩不停 java经典小游戏汇总 javascript
接下来我们开始处理游戏的动态方面。 驾驶飞船 这里我们要实现的就是使玩家通过左右箭头键来控制飞船的左移与右移。 ...添加子弹设置 在Settings类中增加一些子弹的属性,这里我们创建一个宽3像素,高15像素的深灰色子弹。子弹的速度比飞船稍低。 ...pygame.draw.rect(self.screen, self.color, self.rect) 将子弹存储到group中 前面定义了Bullet类和必要的设置后,就可以编写代码了,在玩家每次按空格键时都会发射一发子弹...子弹击中外星人时,需要立马知道,并同时使被碰撞的外星人立即消失,因此我们需要在更新子弹的位置后立即检测碰撞。 ...结束游戏 这里我们还需要知道何时该结束游戏,有以下几种情况: 飞船全部被摧毁外星人到达屏幕底部 实际效果: 计分 最后我们将给游戏添加一个Play按钮,用于根据需要启动游戏以及在游戏结束后重启游戏
接下来我们开始处理游戏的动态方面。 驾驶飞船 这里我们要实现的就是使玩家通过左右箭头键来控制飞船的左移与右移。...添加子弹设置 在Settings类中增加一些子弹的属性,这里我们创建一个宽3像素,高15像素的深灰色子弹。子弹的速度比飞船稍低。...pygame.draw.rect(self.screen, self.color, self.rect) 将子弹存储到group中 前面定义了Bullet类和必要的设置后,就可以编写代码了,在玩家每次按空格键时都会发射一发子弹...子弹击中外星人时,需要立马知道,并同时使被碰撞的外星人立即消失,因此我们需要在更新子弹的位置后立即检测碰撞。...结束游戏 这里我们还需要知道何时该结束游戏,有以下几种情况: 飞船全部被摧毁 外星人到达屏幕底部 实际效果: 计分 最后我们将给游戏添加一个Play按钮,用于根据需要启动游戏以及在游戏结束后重启游戏
Python的做法跟其他大部分面向对象编程语言一样,都是将父类属性或方法覆盖,子类对象调用的时候调用到覆盖后的新属性或方法,但父类的任然存在,只是子类“看不到”。...大部分知识,要开始自食其力了!...这次写了一个外星人飞船游戏,上下左右键控制移动,空格键发射炮弹,后续还会继续改进。 ?...run_game() ②炮弹:bullet.py import pygame from pygame.sprite import Sprite class Bullet(Sprite): """一个对飞船发射的子弹进行管理的类...""" self.screen.blit(self.image, self.rect) ④设置文件:settings.py class Settings(): """存储外星人入侵的所有设置
现在可以开始射杀外星人,检查是否有外星人撞到飞船,或抵达了屏幕底端。 13.5 射杀外星人 我们创建了飞船和外星人群,但子弹击中外星人时,将穿过外星人,因为我们还没有检查碰 撞。...13.5.1 检测子弹与外星人的碰撞 子弹击中外星人时,我们要马上知道,以便碰撞发生后让外星人立即消失。为此,我们将在 更新子弹的位置后立即检测碰撞。...例如,可以缩小屏 幕以减少需要击落的外星人数量,也可以提高子弹的速度,以便能够在单位时间内发射大量子弹。...玩家用光了飞船后,游戏便 结束。 13.6.1 检测外星人和飞船碰撞 我们首先检查外星人和飞船之间的碰撞,以便外星人撞上飞船时我们能够作出合适的响应。...我们在更新每个外星人的位置后立即检测外星人和飞船之间的碰撞。
使用Python开发飞机大战游戏,本文目录如下 ? 这次用Python中的pygame模块来完成一个飞机大战的小游戏;基本思路是通过方向键来控制飞机的左右移动射击飞船。先来看下最后的效果 ?...效果图 完成射击功能 通过玩家按下空格来发射子弹(一小小小的矩形) 添加子弹的设置 在settings.py中的__init__方法中添加以下数据 ?...在主循环中,我们将使用这个编组在屏幕上绘制子弹,以及更新没颗子弹的位置。 ? ? 开火 通过修改game_func.py中的函数来完成发射子弹的操作 ? ?...确定一行可以容纳多少个飞船 确定一行可以容纳多少个外星人,需要看一下可以用的水平空间有多大。...rect是否有元素重叠,并返回一个字典 检测子弹与飞船碰撞 子弹击中飞船后飞船需要马上消失,所以需要在更新子弹的位置后面检测碰撞 方法game.sprite.groupcollide()将每个子弹的rect
aliens = Group() #创建外星人群 gf.create_fleet(ai_settings, screen,ship, aliens) #开始游戏主循环...#bullet.py import pygame from pygame.sprite import Sprite class Bullet(Sprite): """一个对飞船发射的子弹进行管理的类...子弹并非基于图像的,因此我们必须使用pygame.Rect() 类从空白开始创建一个矩形 """ self.rect = pygame.Rect(...centerx设置为飞船的rect.centerx self.rect.top = ship.rect.top #子弹的rect的top属性设置为飞船的rect的top属性...check_high_score(stats, sb) def fire_bullet(ai_settings, screen, ship, bullets): """如果还没有到达限制,就发射一颗子弹
前言 很多朋友都是从python编程:从入门到实践开始的python学习,这本书还是比较适合初学者的。 在这本书中有一个pygame小游戏项目,外星人入侵。...对于初学者来说,从小游戏入手去学python是个很不错的选择,然而我觉得此书中的外星人入侵小游戏太过单调和粗糙,所以灵光一闪决定将其升级为超级魔改版。...原始1.0版本要用到的文件如下: 其中分门别类,各文件都有其明确分工,alien是专门写外星人的,alien_invasion是主程序,bullet是控制子弹及相关参数的,button是控制开始游戏按钮...怪物以一定概率在一个身位内瞬移移动,可以闪避飞船的子弹。 第一关是可爱的小机器人,1点血量,在第三关出现了手拿盾牌的机器人,3点血量。 在第5关出现了BOSS,上方是它的红色血条,很长。...三、总结 本期奇思妙想之超级魔改版外星人入侵小游戏-01就到这里了,感兴趣的朋友可以关注我,后期会相应推出奇思妙想-02-03等系列文章。
游戏开始后,如果玩家不小心单击了Play按钮原来所处的区域,游戏将重 新开始!...14.1.6 隐藏光标 为让玩家能够开始游戏,我们要让光标可见,但游戏开始后,光标只会添乱。...14.2 提高等级 当前,将整群外星人都消灭干净后,玩家将提高一个等级,但游戏的难度并没有变。下面 来增加一点趣味性:每当玩家将屏幕上的外星人都消灭干净后,加快游戏的节奏,让游戏玩起 来更难。...、子弹和外星人的初始速度。...每当玩家提高一个等级时,我们都使用increase_speed() 来提高飞船、子弹和外星人的速度: settings.py def increase_speed(self): """提高速度设置
源码分享: import os import sys import cfg import random import pygame from modules import * '''开始游戏''...enemy_need_down = False enemy_move_right = True enemy_need_move_row = 6 enemy_max_row = 5 # 用于控制敌方发射子弹...boomed_enemies_group.remove(boomed_enemy) del boomed_enemy # --敌方子弹与我方飞船碰撞检测...ufo.update(cfg.SCREENSIZE[0]) # ----画UFO ufo.draw(screen) # --画我方飞船子弹...return is_win '''主函数''' def main(): # 初始化 pygame.init() pygame.display.set_caption('外星人入侵
如果有外星人 撞到了飞船或抵达屏幕底端,我们将销毁飞船并再创建一群外星人。 限制玩家可用的飞船数量,配给的飞船用完后,游戏结束。...(ai_settings, screen, ship, alien, bullets): --snip-- # 在飞船和外星人后面重绘所有的子弹 for bullet in bullets: bullet.draw_bullet...() ship.blitme() alien.blitme() # 让最近绘制的屏幕可见 pygame.display.flip() 我们先绘制飞船和子弹,再绘制外星人,让外星人在屏幕上位于最前面...、一个子弹编组和一个外星人编组 ship = Ship(ai_settings, screen) bullets = Group() 1 aliens = Group() # 创建外星人群 2...这行外星人在屏幕上稍微偏向了左边,这实际上是有好处的,因为我们将让外星人群往右移, 触及屏幕边缘后稍微往下移,然后往左移,以此类推。就像经典游戏《太空入侵者》,相比于只 往下移,这种移动方式更有趣。
本文带来的是偷学Python最后的项目二:使用Python开发飞机大战游戏,本文目录如下 ?...目标:创建一个可以左右移动的小飞机,用户可以通过空格space键来控制飞机发射子弹。...限制子弹的数量 为了不使这个小游戏跟开挂似得,肯定要限制一下发射子弹的数量,在settings.py中添加一行 # 限制子弹的数量 self.bullet_allowed = 5 在check_keydown_events...确定一行可以容纳多少个飞船 确定一行可以容纳多少个外星人,需要看一下可以用的水平空间有多大。...在这里我们使用game.sprite.groupcollide()方法,此方法检测两个rect是否有元素重叠,并返回一个字典 检测子弹与飞船碰撞 子弹击中飞船后飞船需要马上消失,所以需要在更新子弹的位置后面检测碰撞
领取专属 10元无门槛券
手把手带您无忧上云