小言_互联网的博客

python塔防之“双层箭塔”(一)

240人阅读  评论(0)

欢迎加入我们卧虎藏龙的python讨论qq群:729683466

长文预警

导 语 ●

很长时间没有更新了

这段时间我一直在写塔防游戏

没有时间更新公众号

今天

塔防游戏有完成了重要一步

可以说现在是一个完整的塔防游戏了。

麻雀虽小,五脏俱全

代码及相关资源获取

1:关注“python趣味爱好者”公众号,回复“塔防游戏 ”获取源代码。  

效果演示

ss

往期精选

python塔防之------“红精灵来袭”

 ????

开发工具

python3.6.4

第三方库:pygame,random,os,math,sys

讲解部分

一:地图路径函数。

上一节课我们讲的是如何让怪兽从起点移动到终点,我们用一个列表存储了所有的路径的像素点坐标,然后让索引值慢慢加一,这样,怪兽的坐标点就可以按着地图的路径移动了。


   
  1. map1= [(50,14),(86,14),(135,14),(175,14),(180,47),(180,92),(215,92),(260,92),\
  2. (302,94),(305,135),(306,174),(344,174),(392,174),(430,180),(430,139),\
  3. (430,90),(430,51),(475,52),(516,52),(560,52),(560,94),(560,131),(560,166),\
  4. (560,205),(560,247),(560,273),(560,307),(513,305),(469,305),(432,305),\
  5. (387,305),(349,305),(300,305),(250,305),(200,305)]

但是这样的移动方法有一个坏处。那就是怪兽的坐标点是不连续的。比如说

地图路径的第一个点是(50,14),第二个点是(86,14)。如果我想表示怪兽移动到了两个点中间的点(70,14)。那就不能表示了。

所以我们可以把地图的路径分成几条直线,然后用参数方程的形式表示出来。

设置一个参数t。间接地用t来表示各个点的坐标。

这个函数比较长,我只截取一小部分给大家看一看。


   
  1. def get_path(t):
  2. if t<203 and t>50:
  3. x= t
  4. y= 34
  5. return [x,y]
  6. elif t<286:
  7. x= 203
  8. y= t-203+34
  9. return [x,y]
  10.         .........
  11.         .........

写好这个道路函数以后,我们就可以根据这个来获取怪兽的位置,然后在相应的位置画怪兽。

二:箭塔类和对象

这个游戏中最重要的就是三个类:分别是箭塔,箭,怪兽。

我们先讲一下如何定义箭塔类,也就是Tower。


   
  1. class Tower1(pygame.sprite.Sprite):
  2. def __init__(self,pos_x,pos_y,shot_angle,cooling_time):
  3. #shot_angle是射击方向
  4. pygame.sprite.Sprite.__init_ _( self)
  5. #self.imgs = ['./resource/imgs/game/basic_tower.png', './resource/imgs/game/med_tower.png', './resource/imgs/game/heavy_tower.png']
  6. self.image = pygame.image.load( './resource/imgs/game/tower5.png')
  7. self.rect = self.image.get_rect()
  8. self.cooling_time=cooling_time
  9. self.cooling_now=cooling_time #箭塔的冷却时间
  10. self.shot_angle=shot_angle
  11. self.price= 300 #箭塔的价格
  12. self.position = pos_x,pos_y
  13.      self.rect.left,  self.rect.top =  self.position

首先,我们要继承Pygame里面的精灵类,因为箭塔可以需要继承精灵类的一些功能。好比说,Pygame的精灵类是一个毛坯房,我们需要对其进行精装修,加上一些特色的方法,就可以形成我们的箭塔类。继承方法就是这样

class Tower1(pygame.sprite.Sprite):

Tower类需要载入图片,也就是箭塔的图片。另外就是设置一下箭塔的冷却时间。冷却时间在主函数的while循环中,每循环一次减一,如果这个冷却时间小于0,那就代表冷却时间结束了。就可以发射一支箭。

在这里,就又要提一下我们设置的Tower的一个功能,就是shot。这个函数不是直接射箭,而是减小冷却时间。


   
  1.    def shot(self, position) : #参数是子弹的位置和角度
  2.      if  self.cooling_now<= 0:
  3. self.cooling_now= self.cooling_time
  4. return 1
  5. else:
  6. self.cooling_now-= 1
  7. return 0

并且判断冷却时间是否小于0,如果是小于0,就返回1,返回1的意思是发射一支箭,否则,冷却时间减一,返回0。

这就是箭塔类的功能。

更多的怪兽类,箭,以及背景音乐等知识,我们下次给大家慢慢讲

作者|齐

编辑|齐

感谢大家观看

有钱的老板可打赏一下小编哦

扫描二维码

关注我们

QQ群:729683466

◰  

参考来源

游戏素材来源于网络--侵歉删


转载:https://blog.csdn.net/qq_42680814/article/details/113667704
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场