让外星人群移动

下面来让外星人群在屏幕上向右移动,撞到屏幕边缘后下移一定的距离,再沿着相反的方向移动。我们将不断移动所有的外星人,直到所有外星人都被消灭,有外星人撞上飞船,或者有外星人抵达屏幕底端。下面首先让我们将外星人向右移动起来吧。

向右移动外星人

为了移动外星人,我们将使用alien.py中的方法update( ),且对外星人群中的每个外星人都调用它。首先,添加一个控制外星人速度的设置:

settings.py

然后使用这个设置来实现alien.py中的update( ):

alien.py中的新增函数update( )

每次更新外星人位置时,都将它向右移动,移动量为alien_speed_factor的值。我们使用属性self.x跟踪每个外星人的准确位置,这个属性可存储小数值。然后,我们使用self.x的值来更新外星人的rect的位置。

在主while循环中已调用了更新飞船和子弹的方法,但现在还需更新每个外星人的位置:

alien_invasion.py

我们在更新子弹后再更新外星人的位置,因为稍后要检查是否有子弹撞到了外星人。最后,我们在文件game_functions.py中添加新函数update_aliens( ):

game_functions.py

我们对编组aliens调用方法update( ),这将自动对每个外星人调用方法update( )。如果你现在运行这个游戏,会看到外星人群向右移动,并逐渐消失在屏幕右边缘。

创建表示外星人移动方向的设置

下面来创建让外星人撞到屏幕右边缘后向下移动、再向左移动的设置。实现这种行为的代码如下:

settings.py

设置fleet_drop_speed指定了有外星人撞到屏幕边缘时,外星人群向下移动的速度。将这个速度与水平速度分开是有好处的,这样你就可以分别调整这两种速度了。

要实现fleet_direction设置,可以将其设置为文本值,如'left'或'right',但这趟就必须编写if-elif语句来检查外星人群的移动方向。鉴于只有两个可能的方向,我们使用值1和-1来表示它们,并在外星人群改变方向的时候在这两个值之间切换。另外,鉴于向右移动时需要增大每个外星人的x坐标,而向左移动时需要减小每个外星人的x坐标,使用数字来表示方向更加合理。

检查外星人是否撞到了屏幕边缘

现在需要编写一个方法来检查是否有外星人撞到了屏幕边缘,还需修改update( ),以让每个外星人都沿着正确的方向移动:

alien.py

我们可以对任何外星人都调用新方法check_edges( ),看看它是否位于屏幕左边缘或者右边缘。如果外星人的rect的right属性大于或者等于屏幕的rect的right属性,就说明外星人位于屏幕右边缘。如果外星人的rect的left属性小于或者等于0,就说明外星人位于屏幕左边缘。

我们修改了方法update( ),将移动量设置为外星人速度和fleet_direction的乘积,让外星人向左或向右移。如果fleet_direction为1,就将外星人当前的x坐标增大alien_speed_factor,从而将外星人向右移;如果fleet_direction为-1,就将外星人当前的x坐标减去alien_speed_factor,从而将外星人向左移。

向下移动外星人群并改变移动方向

有外星人到达屏幕边缘时,需要将整群外星人下移,并改变它们的移动方向。我们需要对game_functions.py做重大修改,因为我们要在这里检查是否有外星人到达了左边缘或者右边缘。为此,我们编写函数check_fleet_edges( )和change_fleet_direction( ),并对update_aliens( )进行修改:

game_functions.py

在check_fleet_edges( )中,我们遍历外星人群,并对其中的每个外星人都调用check_edges( )。如果check_edges( )返回True,我们就知道相应的外星人位于屏幕边缘,需要改变外星人群的方向,因此我们调用change_fleet_direction( )并退出循环。在change_fleet_direction( )中,我们遍历所有外星人,将每个外星人下移fleet_drop_speed设置的值;然后,将fleet_direction的值修改为其当前值与-1的乘积。

我们修改了函数update_aliens( ),在其中通过调用check_fleet_edges( )来确定是否有外星人位于屏幕边缘。现在,函数update_aliens( )包含形参ai_settings,因此我们调用它时制定了与ai_settings对应的实参:

alien_invasion.py

如果你现在运行这个游戏,外星人群将在屏幕上来回移动,并在抵达屏幕边缘后向下移动。现在可以开始射杀外星人、检查是否有外星人撞到飞船或者抵达屏幕底端啦。

python外星人入侵飞船上下移动_Python实现《外星人入侵》之移动外星人相关推荐

  1. python外星人入侵飞船上下移动_Python 项目练习1 外星人入侵(武装飞船)

    Python 项目练习1 外星人入侵(武装飞船) 2020年07月30日 | 萬仟网IT编程 | 我要评论 本项目具体步骤在书本<Python编程:从入门到实践>第十二章中安装pygame ...

  2. python外星人入侵飞船上下移动_python外星人入侵游戏左移正常,右移屏幕上不显示,但实际上已经移动了?...

    展开全部 主要看看向右移动的地方的代码有没有62616964757a686964616fe59b9ee7ad9431333433643634问题:# 设置向右移动flag self.move_righ ...

  3. python开发飞机小游戏_Python开发的飞机打外星人小游戏

    importsysfrom time importsleepimportpygamefrom bullet importBulletfrom alien importAlien#响应键盘按下事件 de ...

  4. python log函数怎么打_Python的log日志功能及设置方法

    python log函数怎么打_Python的log日志功能及设置方法_Elaine要当律师的博客-CSDN博客

  5. python判断素数的函数_Python素数prime函数练习_Python源码实操

    Python素数prime函数练习_Python源码实操 素数prime函数练习 1) 写一个函数isprime(x) 判断x是否为素数,如果是素数,返回True,否则返回False def ispr ...

  6. c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...

    用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...

  7. 关于在《python编程从入门到实践》书中练习“外星人大战”报错“AttributeError: ‘AlienInvasion‘ object has no attribute ‘blit‘”

    关于在<python编程从入门到实践>书中练习"外星人大战"报错"AttributeError: 'AlienInvasion' object has no ...

  8. python外星人入侵游戏加随机游动_Python外星人入侵游戏(四):飞船左右移动

    今日任务: 控制飞船 动手前思考 1.如何实现左右移动:游戏是通过循环来刷新界面,那就需要在循环中更新飞船的位置,更新位置是通过按键的点击,所以操作应该在监听按键和页面刷新中完成 2.考虑到习惯,我们 ...

  9. 《Python编程从入门到实践》外星人入侵游戏——添加 飞船 图片和外星人 图片,素材

    <Python编程从入门到实践>在本书里学到的.本篇主要介绍该游戏中所需要的两个图片.分别为飞船和外星人图片. 1.首先去到 http://www.ituring.com.cn/book/ ...

最新文章

  1. android:layout_gravity 和 android:gravity 的区别
  2. 如何在更大的div内使图像中心(垂直和水平)居中[重复]
  3. 通过缓存数据库结果提高PHP性能(转)
  4. MySQL调用mongodb事务回滚_SpringBoot整合MongoDB,在多数据源下实现事务回滚。
  5. C 的16个大坑,你能躲过几个?
  6. 如何将散乱的css代码规范化、格式化
  7. 20.看板方法---问题管理和升级策略
  8. Effective Java Methods Common to All Objects
  9. 相机标定原理介绍(二)
  10. 华三(H3C) H3C5820V2 交换机IOS升级
  11. 校园宽带客户端认证程序无法继续初始化绑定通信接口网络地址失败_解决办法
  12. textarea标签 禁止拉伸
  13. 【spark基础】之client模式下--conf读取外部文件
  14. 基于视觉的扫地机器人导航系统(模块设计)
  15. 小苹果蹿红背后的网络营销思考
  16. can总线短距离不用双绞线_can总线(一)物理层—屏蔽双绞线
  17. mysql 导入大于2m_用phpmyadmin导入大于2M的数据,导入大量数据的方法
  18. 一个简单的加壳解壳程序
  19. Activity 切换动画(小米图库列表进入详情页,图片从固定位置放大进入,缩小退出)
  20. Android Studio常用API

热门文章

  1. “心脏出血”漏洞可导致密码泄露
  2. 西安交大轴承实验集XJTU-SY_Bearing_Datasets的python调用代码
  3. js复数类的学习和使用
  4. android 相机功能修改,Android11不再支持更改默认相机程序,再也不能用美颜相机拍照了...
  5. [软件人生]关于我,我的未来,我的思考
  6. python cv2摄像头校准,坐标系转换
  7. 微信商城店铺怎么开通
  8. 钉钉应用开发,提示Warning: Invalid CERT Authority
  9. 不会被和谐的良心云端储存网盘? 试试MEGA吧!
  10. 关于全球苹果手机的型号版本介绍