原标题:少儿编程分享:手把手教你用Python编写战斗机游戏(完)

加入图像

现在我们已经能够玩游戏了,但这个游戏丑确实有点丑 。接下来,我们要把单调的白色矩形换成好看的图片。

在前面的代码中,我们用填充了白色的surface对象来表示游戏中的所有东西(包括游戏主角、敌人)。用白色矩形能够帮助我们理解surface对象是如何运作的,但是它们确实不美观。我们现在要给游戏主角和敌人加上图片,图片的素材可以通过文末扫码获得。如果你不记得要把图片素材放在哪里,可以看看我们之前发的兔獾大作战游戏教程。

改变对象构造器

现在我们的player构造器(constructor,类里用于建立对象的特殊子程序)长这样:

class Player(pygame.sprite.Sprite):

def __init__(self):

super(Player, self).__init__()

self.surf = pygame.Surface((75, 25))

self.surf.fill((255, 255, 255))

self.rect = self.surf.get_rect()

新的构造器会长这样:

我们想把surface对象换成图片,要用到pygame.image.load()方法,然后向这个方法传递一个文件地址。Load()方法会返回一个surface对象。然后我们要对这个surface对象调用convert()对其进行复制,让它更快地出现在屏幕上。

接下来,我们要对图像调用set_colorkey()方法。Set_colorkey方法会设定PyGame渲染成透明色的颜色。在这里,我把这个颜色设置为白色,因为白色是飞机图片的背景图。RLEACCEL是一个可有可无的参数,不过加上这个参数能够让PyGame渲染图片时更快些。

最后,我们要对图像调用get_rect()方法来得到rect对象。

小提示

现在surface对象不再是用白色填充,而是被放上了图片。

对Enemy构造器进行类似的改动:

现在我们的游戏有了更好看的图片了!不过好像还少了些什么。让我们在画面上加些云朵,这样飞机就更像是在空中飞行了。要加上云朵,和先前加上其他对象类似。首先,我们要创建一个带有云朵图片的Cloud对象,然后用update()方法不断地把云朵移向屏幕的左边。然后我们要创建一个自定义事件来产生一些新的云朵(这些新的云朵也会被加到all_sprites组中)。创建Cloud对象的代码如下:

看起来是不是很眼熟?在这段代码下面,我们要加上创建敌人的事件:

ADDCLOUD = pygame.USEREVENT + 2

pygame.time.set_timer(ADDCLOUD, 1000)

然后给他们创建一个新的精灵组:

clouds = pygame.sprite.Group()

现在,在我们的游戏主循环中,我们要对事件队列进行循环,并对添加云朵的事件ADDCLOUD进行侦听:

这段代码:

for event in pygame.event.get():

if event.type == KEYDOWN:

if event.key == K_ESCAPE:

running = False

elif event.type == QUIT:

running = False

elif event.type == ADDENEMY:

new_enemy = Enemy()

enemies.add(new_enemy)

all_sprites.add(new_enemy)

会变成这样:

for event in pygame.event.get():

if event.type == KEYDOWN:

if event.key == K_ESCAPE:

running = False

elif event.type == QUIT:

running = False

elif event.type == ADDENEMY:

new_enemy = Enemy()

enemies.add(new_enemy)

all_sprites.add(new_enemy)

elif event.type == ADDCLOUD:

new_cloud = Cloud()

all_sprites.add(new_cloud)

clouds.add(new_cloud)

我们要把云朵加到all_sprites组和新的clouds组内。之所以要把云朵加到这两个组内是因为我们要用all_sprites来进行渲染,用clouds来调用update函数。你可能会问,我们为什么不直接把他们加到现有的enemies组中?我们不是一直在调用相同的update函数吗?原因是,我们不需要检测飞机是否撞上了云朵。我们的飞机应该能够完好无损地穿过云朵,而不是撞到云朵然后游戏结束。我们现在需要做的就是调用clouds组的update()方法。

成功!恭喜你!制作完成!

最终效果就如封面所示噢~有任何问题欢迎评论或在公众号(maquxueyuan)提问~返回搜狐,查看更多

责任编辑:

python 儿童 游戏_少儿编程分享:手把手教你用Python编写战斗机游戏(完)相关推荐

  1. 用python画小兔子_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)

    原标题:少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一) 游戏制作 我们今天要制作的小游戏是Bunnies vs. Badgers (兔獾大作战).游戏中的兔子通过射箭抵御獾的进攻,从而保卫 ...

  2. python星星万花筒_少儿编程分享:码趣君教你用Python编写推星星游戏(完)

    这是推星星游戏的最后一期了 希望每个学习了的同学都能制作出你自己的推星星游戏 记得巩固好知识噢~ Drawing the Map绘制地图 535. def drawMap(mapObj, gameSt ...

  3. 怎么用python做战斗机_少儿编程分享:手把手教你用Python编写战斗机游戏(四)

    游戏分享:手把手教你用Python编写 战斗机游戏(四) 2018.1.25 飞机大战就到这里啦 你的飞机大战做出来了吗 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑.接下来,我们要把单 ...

  4. 怎么用python编贪吃蛇_少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二)

    原标题:少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二) 检测和判断 无论我们制作的简单或者复杂的游戏 这都是最关键的两个部分 事件处理循环 61. while True: # 游戏主循环 62 ...

  5. python图形设计编程_少儿编程分享:手把手教你用Python制作艺术图片

    原标题:少儿编程分享:手把手教你用Python制作艺术图片 在前面的几篇文章中,我们分享了一些用PyGame制作小游戏的教程.我们今天的分享使用的仍然是PyGame,只不过这次不是写游戏啦-我们要用P ...

  6. python俄罗斯方块编程思路_少儿编程分享:手把手教你用Python编写俄罗斯方块(十)...

    www.codingmarch.com 游戏分享:手把手教你用 Python 编写 俄罗斯方块(十) 2017.12.28 这是俄罗斯方块的最后一章了 经历了这么多游戏 编写了这么多代码 你的心中是否 ...

  7. python代码示例图形-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  8. python画图代码大全-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  9. python在财务中的应用-【手把手教你】Python金融财务分析

    微信公众号: 1. 货币时间价值 实际上numpy和scipy很强大,包含了计算各种财务指标的函数,可以直接调用,终值(fv).现值(pv).净现值(npv).每期支付金额(pmt).内部收益率(ir ...

最新文章

  1. python入门(七)
  2. 【EventBus】事件通信框架 ( 订阅类-订阅方法缓存集合 | 事件类型-订阅者集合 | 订阅对象-事件类型集合 )
  3. OFDM资料(待总结)
  4. matlab 基于GUI的PID研究
  5. Python基础语法-Python,Java,C++变量互换值的区别
  6. 中国PLC市场增长分析
  7. 你知道哪些苹果自家应用采用 Swift 语言编写吗?
  8. jclasslib插件_在IDEA利用断点debug+解析class文件+jclasslib插件
  9. Linux:文件系统和数据资料
  10. [SEO知识]如何通过SEO思维收割各大平台的流量?
  11. CentOS7 aarch64 arm平台sysbench安装及CPU、内存、IO测试
  12. python 矩阵和三角函数
  13. 如果你在犹豫要不要去外包公司,不妨看看这篇文章
  14. SQL Server ansi_null_default | ansi_null_dflt_on
  15. http的幂等性及幂等性
  16. 直流马达驱动_ADC_PWM加减速(STM32F4 CubeMX)
  17. POJ,ZOJ题目分类(多篇整合版,分类很细致,全面)
  18. php mysql开发实战 光盘_随书光盘-PHP开发实战1200例 | 软件库
  19. 艺术品经营单位备案申报材料和艺术品经营单位备案申请表格式
  20. scratch案例——深水炸弹

热门文章

  1. Docker容器修改配置文件
  2. FastAPI 入门教程
  3. linux桌面文件夹路径是什么,【已解决】Ubuntu中右键(桌面和文件夹)打开终端(定位到当前路径)...
  4. IT 通信类客户分析
  5. ROUGE评价算法学习
  6. JS: exec()方法
  7. 小程序一:利用Python编写一个简单的图书管理系统
  8. 多视图几何的数学基础知识的掌握(2)--李群李代数
  9. 嵌入式:万字详解通信接口设计
  10. nginx:代理服务器(涉及upstream)的例子