1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python外星人入侵飞船上下移动_Python实现《外星人入侵》之移动外星人

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

时间:2023-02-10 14:54:18

相关推荐

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

让外星人群移动

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

向右移动外星人

为了移动外星人,我们将使用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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。