本文首发于腾讯云+社区,也可关注微信公众号【离不开的网】支持一下,就差你的关注支持了。
这个地图类最重要的就是,根据这些数字在地图中生成对应得砖块和铁块。上面含有x代表的是x轴的位置,含有y代表的是y轴对象的位置。
然后,通过循环遍历上面所定义的列表,得到每一个砖块和铁块的位置,在地图上把它们生成出来。
#这里+3是因为背景图有3像素的边框要去掉
self.brick.rect.left,self.brick.rect.top=3+x*24,3+y*24
#将Sprite精灵self.brick添加到self.brickGroup此组
self.brickGroup.add(self.brick)
首先,装备和食物这种东西都是随机的,所以我们需要一种随机算法random,所以要在最上面导入random模块(import random)
在初始化的时候,把图片加载进来,pygame.image.load();convert_alpha()可透明,convert()不支持透明。
定义一个类型self.kind随机获得1到7的其中一个值;random中的choice方法是随机抽取一个值出来;根据抽取的随机值显示对应的食物;下面把self.kind和对应的食物图片绑定。
这里是定义的一个change()方法,如果你想改变食物的话,你就可以调用这个方法。self.life是否活着,是否显示在窗口。
首先,定义一个己方坦克MyTank()class类,同样是继承pygame的精灵pygame.sprite.Sprite,在初始化__init__()
方法中定义多一个玩家编号的对象playerNumber用来识别玩家,然后就是加载和定义图片文件。pygame.sprite.Sprite.__init__(self)
这句一定要写,这是完成初始化很重要的一步,当你使用了精灵。
初始的坦克等级self.level=0为零级,所以定义初始坦克图片self.tank为tank_L0那张图。每个玩家对应的坦克都有三个等级。
每一个玩家所对应的坦克都是三个等级,也就是三张图,而每个等级所对应的图又包含前后左右四个方向的坦克,所以我们需要在一张图上裁剪自己需要的部分,通过subsurface()函数来实现,括号中的第一个括号数字代表裁剪的起始点x,y的值,第二个括号数字代表的是裁剪图片的宽高。每个方向都有两张图,来回切换达到实现运动的视觉效果,所以每个方向都有两张图需要裁剪。self.rect = self.tank_R0.get_rect()获取坦克位置,再通过下面self.rect.left, self.rect.top设定具体位置。
然后接下来就是移动的问题了,基本上下左右都是雷同的,就方向不同,一些细节不同,详细见代码,这里列举一个向上的moveUp():
一样,开始先定义类,这里定义一个EnemyTank()同样继承pygame精灵,然后定义初始化__init__
方法并设定属性;然后下面是定义坦克出现之前的动画是否播放,还有时间times为90毫秒。
这里定义敌方坦克种类随机出现,定义类型kind,kind随机在1到4之间获取一个数,然后下面定义每一种数字所对应的敌方坦克类型。进而完成敌方坦克加载操作。
定义一个isred属性,来保存坦克是否携带食物;这里设定了四个false和一个true,有20%的机会携带食物,然后判断如果self.isred为true时坦克的类型也就是此时应该加载哪一张坦克图,false时同理。
这个定义一个随机x值,主要作用是让将要生成的坦克可以在那三个位置随机出现,达到随机效果,不固定。
同样,需要获取加载的图片,所以一样跟之前裁剪出自己需要的图片,然后获得图片位置并设定他的位置起始坐标x和y的值。然后定义坦克的速度,方向,生命,子弹的生命和子弹的缓存蓄力时间就是冷却等数值(跟己方坦克同理)。再定义一个dirChange属性,怕你难过坦克撞墙则改变方向。初始值为false,撞墙会改变方向则为true。
然后,设定每种类型坦克的特性属性,比如类型kind值为2,它的speed速度为3;kind为3则生命值life为3。
定义一个move方法,定义rect.move()内第一个参数是speed速度乘以x轴的方向的值,第二个参数是peed速度乘以y轴的方向的值。然后下面定义了根据具体方向来加载裁剪相应的坦克图。
定义一个Bullet类,继承pygame的精灵,定义初始化方法并完成初始化,然后加载图片,其他都跟之前差不多,然后就是定义一个改变图片的方法,根据方向来决定图片显示。
这里flash播放也是有时间的,比如多少帧画之类的
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。