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

长文预警

导语

我们的塔防游戏终于实现了第一步

怪物可以顺着地图的路径移动了

虽然程序结构简单

但总算从零开始起步了

所以

今天给大家分享一下

最新的塔防游戏设计代码

我将详细地讲一讲这个游戏的设计过程

相关资源 代码获取

1:关注“python趣味爱好者”公众号,回复“ 红精灵来袭”获取源代码。

 # 效果展示 

按一次空格键,生成一个怪物

# 开发工具

版本:python3.6.4

第三方库:pygame

如果大家想和我们一起为这个游戏添砖加瓦,可以点击下面的链接联系我们哦!!!

#往期推荐

#  一起来设计“塔防游戏”吧

# 讲解部分

一:素材准备与抠图

我们首先准备游戏素材。在当前的路径下,我们建立三个文件夹,分别是

其中分别存放:地图,游戏素材,游戏精灵代码。

游戏地图就是上次那个,其中有一条明显的路径。左上角代表的是起点,也就是产生怪物的点,左下角代表城堡。也就是怪物的终点,怪物按照一定的速度从起点移动到终点。

我们将路径上的像素点用列表存储起来,这样就非常简单了。

path1=[(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)]

比如说,path1的第一个位置的像素点是(50,14)代表的就是第一步的像素坐标。也就是左上角的那个位置。

有的同学可能会问:我们如何才能获取图片上某个像素点的位置呢?很简单,选中图片,右键编辑,然后把鼠标移动到你想要的位置,就可以知道这个点的坐标了。

在这个列表当中,如果我们要让怪物移动,就直接修改索引值即可。

移动怪物时只需要修改列表索引即可。

还有一点需要我们注意的就是抠图,对于我们的怪物图片,如果用普通的图片,那么就会在游戏中显示这个图片的背景,如果这个图片的背景是白色,那么显示的就是白色的背景图片。

就是这样的效果,很不合适。

这个白色背景非常显眼,所以我们最好将这个背景改成透明的。用抠图工具即可。网上有很多这样的工具。

二:怪物的类

我们在sprites文件夹中存放各种类,需要的时候在主程序中直接调用即可。

比如说怪物的类Monster,由于我们最开始只设计了一个怪物。也就是下面这个。

所以我们定义一个类就行。代码就是下面的样子。

class Monster1(pygame.sprite.Sprite):
  def __init__(self):
    pygame.sprite.Sprite.__init__(self)


    self.image = pygame.image.load('./resource/imgs/game/monster.png')
    
    self.rect = self.image.get_rect()


    self.index1=0#目前所在路径列表中的位置
    self.position = 60, 40
    self.rect.left, self.rect.top = self.position
    # 最大生命值
    self.max_life_value = 20
    # 当前生命值
    self.life_value = 20
    # 速度
    self.speed = 1
    # 击杀奖励
    self.reward = 100
    # 对大本营造成的伤害
    self.damage = 1


  '''不停地移动'''
  def move(self, the_path):
    if self.index1+self.speed<len(the_path):
      self.index1=self.index1+self.speed
      return 0#意思是没有攻击到目标点
    else:
      return 1#意思是已经攻击到了目标点

这个怪物的图片(透明背景)我们放在了resource里面。按照路径读取即可。pygame.image.load('./resource/imgs/game/monster.png')

在定义这个类的时候,我们先继承pygame的精灵类。这样,我们定义的类就继承了精灵类的所有功能和属性。

class Monster1(pygame.sprite.Sprite):

在此基础上,我们添加特定的功能,比如说,我们定义的怪物有一些特有属性,比如,有血量上限,当前的血量,能对大本营生成伤害,击杀以后玩家可以获得奖励。这些参数都可以写到类里面。

   # 最大生命值
    self.max_life_value = 20
    # 当前生命值
    self.life_value = 20
    # 速度
    self.speed = 1
    # 击杀奖励
    self.reward = 100
    # 对大本营造成的伤害
    self.damage = 1

可以说,类里面存储着这个怪物的DNA信息。每次生成一个怪物,都是按照这个模子刻出来的。

当然,我们的游戏目前只有简单的第一步,还不需要用到这些性质,先写在这里,以后会用到的。

三:游戏节奏的控制

最后就是游戏节奏的控制,目前我们的游戏不完整,只有简单的怪物移动。所以就是一个简单的循环。主要就是获取按键信息以及屏幕刷新。

while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                create_monster()
    monster_move()
    screen.blit(background,(0,0))
    draw_monster()
    clock.tick(4)
    pygame.display.flip()

在这个while循环中,我们先用for循环获取按键信息,如果我们按了空格键,那么我们就实例化一个Monster对象。其中create_monster()就是我们定义的生成怪物的函数。这样就生成了一个怪物。

之后,我们写怪物的移动,也就是monster_move(),然后填充背景图片,在背景图片上画现有的信息,最后按照帧率停顿4ms。再刷新一下屏幕。这样,就完成了一个循环。

作者|齐

编辑|齐

PYTHON

扫二维码|关注我们

QQ群:729683466

# 参考来源

游戏素材来源网络:侵歉删

图片来源:

https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=4253821060,3654962471&fm=26&gp=0.jpg
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值