欢迎加入我们卧虎藏龙的python讨论qq群:729683466
长文预警
●导 语 ●
很长时间没有更新了
这段时间我一直在写塔防游戏
没有时间更新公众号
今天
塔防游戏有完成了重要一步
可以说现在是一个完整的塔防游戏了。
麻雀虽小,五脏俱全
代码及相关资源获取
1:关注“python趣味爱好者”公众号,回复“塔防游戏 ”获取源代码。
效果演示
ss
往期精选
????
开发工具
python3.6.4
第三方库:pygame,random,os,math,sys
讲解部分
一:地图路径函数。
上一节课我们讲的是如何让怪兽从起点移动到终点,我们用一个列表存储了所有的路径的像素点坐标,然后让索引值慢慢加一,这样,怪兽的坐标点就可以按着地图的路径移动了。
-
map1=
[(50,14),(86,14),(135,14),(175,14),(180,47),(180,92),(215,92),(260,92),\
-
(302,94),(305,135),(306,174),(344,174),(392,174),(430,180),(430,139),\
-
(430,90),(430,51),(475,52),(516,52),(560,52),(560,94),(560,131),(560,166),\
-
(560,205),(560,247),(560,273),(560,307),(513,305),(469,305),(432,305),\
-
(387,305),(349,305),(300,305),(250,305),(200,305)]
但是这样的移动方法有一个坏处。那就是怪兽的坐标点是不连续的。比如说
地图路径的第一个点是(50,14),第二个点是(86,14)。如果我想表示怪兽移动到了两个点中间的点(70,14)。那就不能表示了。
所以我们可以把地图的路径分成几条直线,然后用参数方程的形式表示出来。
设置一个参数t。间接地用t来表示各个点的坐标。
这个函数比较长,我只截取一小部分给大家看一看。
-
def
get_path(t):
-
if
t<203 and t>50:
-
x=
t
-
y=
34
-
return
[x,y]
-
elif
t<286:
-
x=
203
-
y=
t-203+34
-
return
[x,y]
-
.........
-
.........
写好这个道路函数以后,我们就可以根据这个来获取怪兽的位置,然后在相应的位置画怪兽。
二:箭塔类和对象
这个游戏中最重要的就是三个类:分别是箭塔,箭,怪兽。
我们先讲一下如何定义箭塔类,也就是Tower。
-
class Tower1(pygame.sprite.Sprite):
-
-
-
def __init__(self,pos_x,pos_y,shot_angle,cooling_time):
-
#shot_angle是射击方向
-
pygame.sprite.Sprite.__init_
_(
self)
-
#self.imgs = ['./resource/imgs/game/basic_tower.png', './resource/imgs/game/med_tower.png', './resource/imgs/game/heavy_tower.png']
-
self.image = pygame.image.load(
'./resource/imgs/game/tower5.png')
-
self.rect =
self.image.get_rect()
-
self.cooling_time=cooling_time
-
self.cooling_now=cooling_time
#箭塔的冷却时间
-
self.shot_angle=shot_angle
-
self.price=
300
#箭塔的价格
-
self.position = pos_x,pos_y
-
self.rect.left,
self.rect.top =
self.position
首先,我们要继承Pygame里面的精灵类,因为箭塔可以需要继承精灵类的一些功能。好比说,Pygame的精灵类是一个毛坯房,我们需要对其进行精装修,加上一些特色的方法,就可以形成我们的箭塔类。继承方法就是这样
class Tower1(pygame.sprite.Sprite):
Tower类需要载入图片,也就是箭塔的图片。另外就是设置一下箭塔的冷却时间。冷却时间在主函数的while循环中,每循环一次减一,如果这个冷却时间小于0,那就代表冷却时间结束了。就可以发射一支箭。
在这里,就又要提一下我们设置的Tower的一个功能,就是shot。这个函数不是直接射箭,而是减小冷却时间。
-
def shot(self, position)
:
#参数是子弹的位置和角度
-
if
self.cooling_now<=
0:
-
self.cooling_now=
self.cooling_time
-
return
1
-
else:
-
self.cooling_now-=
1
-
return
0
并且判断冷却时间是否小于0,如果是小于0,就返回1,返回1的意思是发射一支箭,否则,冷却时间减一,返回0。
这就是箭塔类的功能。
更多的怪兽类,箭,以及背景音乐等知识,我们下次给大家慢慢讲
作者|齐
编辑|齐
感谢大家观看
有钱的老板可打赏一下小编哦
扫描二维码
关注我们
QQ群:729683466
◰
参考来源
游戏素材来源于网络--侵歉删
转载:https://blog.csdn.net/qq_42680814/article/details/113667704