1 “敌人”汽车类的创建
在创建玩家汽车类之后,接下来创建“敌人”汽车类。“敌人”汽车类与玩家类一样,也是包含两个方法,一个是__init__(),另一个是move()。
1.1 __init__()方法
“敌人”汽车类的__init__()方法代码如图1所示。
图1 “敌人”汽车类的__init__()方法代码
其中,“敌人”汽车类名是Enemy,该类也是pygame.sprite.Sprite类的子类。在__init__()方法中,第37行代码调用了其父类也就是pygame.sprite.Sprite类的__init__()方法,完成精灵类的初始化;第38行代码导入“敌人”汽车的图片;第39行代码获取“敌人”汽车图片的位置及大小信息;第40行代码设置“敌人”汽车的初始位置,因为其初始位置在屏幕的最上方,所以其纵坐标的值是0,横坐标是一个随机值,可以保证“敌人”汽车出现的随机性,原理如图2所示。
图2 “敌人”汽车的初始位置原理图
其中,汽车图片宽度的一半是40,因此其中心位置的横坐标最小值是40,最大值是屏幕宽度-40。第40行代码中使用random.randint()函数生成从40到WIDTH-40之间的一个随机值作为汽车图片中心位置的横坐标。
注意1 需要导入random模块。
1.2 move()方法
“敌人”汽车类的move()方法用于控制“敌人”汽车的移动,代码如图3所示。
图3 “敌人”汽车类的move()方法代码
其中,第43行代码将变量SCORE声明为全局变量,SCORE表示玩家的分数,当玩家成功躲避了一辆敌人的汽车,则分数加1,该变量在“敌人”汽车类之外定义,因为要在类内对其进行修改,需要将其设置为global;第44行代码通过rect.move_ip()函数实现“敌人”汽车图片的移动,因为“敌人”汽车是从屏幕上方向下方移动,只需要在垂直方向移动图片,水平方向无需移动,SPEED表示“敌人”汽车的速度,在“敌人”汽车类之外定义;第45-48行代码的作用是当“敌人”汽车移动到屏幕下方之后的处理,当rect.bottom大于HEIGHT,表示“敌人”汽车移动到屏幕下方,此时表示玩家成功躲避了一辆敌人的汽车,第46行代码将玩家分数加1,第47-48行代码重新设置“敌人”汽车的位置,使其重新回到屏幕的上方,并随机设置其水平位置。