python外星人入侵游戏代码_Python《外星人入侵》游戏<七>

v2-250ac2140a3c4318c7ff6f78d8a0e6d3_1440w.jpg?source=172ae18b

在Python《外星人入侵》游戏<六>中,我们已经成功的在屏幕上创建了外星人群。但目前,都只是静态的展示,并没有动起来。

这一次,我们要实现的功能是,让外星人群左右和向下移动。

首先让外星人群向右移动,当碰到右边屏幕边缘的时候,向下移动一定距离,然后再向左移动,碰到左边屏幕边缘的时候,向下移动一定距离,再向相反方向移动。重复这个过程,直到所有外星人被消灭,或者有外星人碰到了飞船,或者是触碰到了屏幕的底部边缘。

向右移动外星人群

首先在settings.py中添加一个控制外星人速度的设置。

class 

在alien.py中创建一个update()函数,来更新外星人的位置。

"""更新外星人的位置"""
    

每次更新外星人的位置,都是将外星人向右移动,每次外星人移动的量都是ai_settings.alien_speed_factor的值。

不过每次都是使用self.x来记录每个外星人的准确位置,因为这个属性是可以存储小数值的。

最后使用self.x的值来更新外星人的rect的位置。

在game_functions.py中定义函数update_aliens(aliens),用来更新外星人群中每个外星人的位置。

"""更新外星人的位置"""

这里是对编组aliens调用update()方法,将会自动对编组中的每个外星人调用update()方法。

最后我们需要在alien_invasion.py的while循环中调用update_aliens()。

"""游戏循环体"""
    

v2-fbca3b92bd18ee21ad85a6775b8a90fe_b.gif

判断外星人是否撞到了屏幕边缘

现在我们发现,外星人向右移动的时候,是可以穿过屏幕的右边缘的。

我们需要设置下,当外星人群到达屏幕右边缘或左边缘的时候,怎么办?

在alien.py模块中定义一个函数,当外星人群到达屏幕边缘的时候,就返回True。

alien.py

def 

在settings.py中为外星人添加一个方向设置:

self

我们使用fleet_direction表示外星人运动的方向,1表示外星人群向右,-1表示外星人群向左。

定义了一个变量fleet_drop_speed,表示有外星人撞到边缘时,外星人群向下移动的速度。

还要修改update()方法,让外星人的速度乘以方向。速度为正,表示外星人群向右运动,速度为负,表示外星人群向左运动。

"""更新外星人的位置"""
    

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

当有外星人碰到屏幕边缘的时候,需要将外星人群下移,并改变他们的移动方向。我们在game_functions.py模块中,定义一个函数change_fleet_direction()来实现这个功能。

def 

我们还需要检测有没有外星人到达左边缘或右边缘,如果有的话,就需要调用change_fleet_direction()函数,然后使用break终止程序。

def 

我们使用for循环遍历外星人编组中的所有外星人,只要有一个外星人满足条件alien.check_edges(),即有外星人触碰到屏幕左边缘或者右边缘,就会调用change_fleet_direction()函数,将外星人群下移,并改变运动方向。然后使用break,跳出循环。

def 

最后在update_aliens()中调用check_fleet_edges()方法,每次更新显示外星人群的时候,就需要判断是否有外星人触碰到屏幕边缘。

"""更新外星人的位置"""

最后,我们还需要在alien_invasion.py的while循环中将ai_settings作为实参传递给update_aliens()函数。

"""游戏循环体"""
    

v2-0b2ead543bfb4d2b958c69fd25cf9eba_b.gif
文章参考书籍《Python编程:从入门到实践》

尝试一下,外星人群就开始移动起来了。

下一次,我们将实现飞船对外星人的射击功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值