Crossin的编程教室

标题: 【Pygame 第9课】 一大波飞机 [打印本页]

作者: crossin先生    时间: 2013-9-2 18:24
标题: 【Pygame 第9课】 一大波飞机
又到周一了,小伙伴们周末过得可好?是不是有人刚刚结束了无聊的暑假,又开始丰富多彩的校园生活了?

上周最后的课里说了,这次我们要来加入一大波飞机正在接近的效果。这个要比之前的子弹容易实现多了。因为只要让飞机不停地从屏幕上方出现就好了,不用管它具体的间隔怎样,看上去像那么回事就可以。

之前我们单个飞机已经完成了在屏幕上方区域内随机出现,并且到底底部后重新回上方的功能。现在要做的,仅仅是把一架敌机换成一组敌机:
  1. enemies = []
  2. for i in range(5):
  3.     enemies.append(Enemy())
复制代码
创建5个Enemy的对象,把它们添加到一个叫做enemies的list中。
然后,在主循环里,去处理每一架敌机的运动:
  1. for e in enemies:
  2.     e.move()
  3.     screen.blit(e.image, (e.x, e.y))
复制代码
如果你觉得几架敌机的运动状态还是比较接近,试着调节它们速度随机范围,以及出现的位置范围。它们在屏幕上方出现的范围选择越大,在游戏中新增敌机的间隔随机性就越大。

That's all. 就这么多。感谢面向对象让我们省去了很多代码量。运行游戏看看有没有不断各种敌机前赴后继进攻的感觉?

9run.jpg

#==== Crossin的编程教室 ====#
微信ID:crossincode
论坛:http://crossin.me
QQ群:156630350

面向零基础初学者的编程课
每天5分钟,轻松学编程

9.py

2.06 KB, 下载次数: 436

源代码


作者: Victor    时间: 2013-9-2 20:09
今天的比较简单。。。期待明天的
作者: katry    时间: 2013-9-2 22:29
果断搭个环境慢慢学。
作者: zed    时间: 2013-9-4 17:26
嘿 小伙伴
作者: liu-pengfei    时间: 2014-9-20 21:28
我已经做到这里了,很有趣。
作者: 周末晒被子    时间: 2015-12-31 23:27
先生啊,敌机出现的坐标是范围内随机确定的,有可能两个敌机出现的坐标十分相近,有导致敌机图片重叠的可能。

作者: 周末晒被子    时间: 2015-12-31 23:51
还有, screen 的 x 的范围只有 (0,450) ,为什么敌机的随机生成的 x 的范围是 (50,800) ,比如一个 (700,-30) 的敌机,生成了也应该看不到了。
作者: 周末晒被子    时间: 2015-12-31 23:56
周末晒被子 发表于 2015-12-31 23:27
先生啊,敌机出现的坐标是范围内随机确定的,有可能两个敌机出现的坐标十分相近,有导致敌机图片重叠的可能 ...

额,好像重叠也没有什么关系...
作者: catherinemic    时间: 2016-2-12 13:06
get it!

作者: 一路向北    时间: 2016-3-25 13:42
继续加油
作者: 马梦晨    时间: 2017-4-5 19:27
666
作者: 超级6666    时间: 2017-8-3 16:59
C先生,我发现如果使用enemy=Enemy()创建实例  并且下面list enemies.append(enemy)就会导致只有一架敌机,而且有时候速度快得异常,但是改成enemies.append(Enemy())就没有问题了,这是为什么呀
作者: crossin先生    时间: 2017-8-3 17:06
超级6666 发表于 2017-8-3 16:59
C先生,我发现如果使用enemy=Enemy()创建实例  并且下面list enemies.append(enemy)就会导致只有一架敌机 ...

你的enemy不在循环里吧,只创建了一个敌机,速度都加在一起了。

Enemy()每次调用都会创建一个敌机对象

作者: 超级6666    时间: 2017-8-3 17:17
crossin先生 发表于 2017-8-3 17:06
你的enemy不在循环里吧,只创建了一个敌机,速度都加在一起了。

Enemy()每次调用都会创建一个敌机对象
  1. for i in range(5):
  2.     enemies.append(Enemy())
复制代码
只是把括号中的Enemy()改成前面创建过得实例enemy
我想这样改过之后就不会每次都创建一个新的对象,所以速度就全都加到那一个enemy上了




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5