【Python游戏】Python实现一个Q版泡泡堂小游戏 | 附带源码

本文介绍了如何使用Python和pygame模块开发一个Q版泡泡堂小游戏。游戏规则、角色控制、环境搭建、游戏精灵类的设计如炸弹、角色、墙、背景和水果等均有详细说明,并展示了游戏开始和游戏界面的效果。提供了地图解析和游戏主循环的实现,文章末尾分享了学习资源和获取源码的方式。
摘要由CSDN通过智能技术生成

相关文件

想学Python的小伙伴可以关注小编的公众号【Python日志】
有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!!
需要源码的小伙伴可以在公众号回复泡泡堂
Python源码、问题解答学习交流群:773162165

开发环境

Python版本:3.6.4
相关模块:
pygame模块;
以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

原理介绍

游戏规则:

玩家通过↑↓←→键控制角色zelda(绿色)行动,当玩家按下空格键时,则可以在当前位置放置炸弹。其他角色(dk和batman)则由电脑控制进行随机行动。所有角色被炸弹产生的火焰灼烧时(包括自己放置的炸弹),都将损失一定生命值;所有角色吃到水果时,均可恢复一定数值的生命值。另外,墙可以阻止炸弹产生的火焰进一步扩散。
当我方角色zelda生命值为0时,游戏失败;当电脑方所有角色生命值为0时,游戏胜利,进入下一关。
逐步实现:
首先,我们来明确一下该游戏包含哪些游戏精灵类:

  • 炸弹类
  • 角色类
  • 墙类
  • 背景类
  • 水果类

墙类和背景类很好定义,只需要可以导入图片,然后把图片绑定到指定位置就行了:

效果展示

开始界面
在这里插入图片描述
游戏界面
在这里插入图片描述

代码实现

'''墙类'''
class Wall(pygame.sprite.Sprite):
  def __init__(self, imagepath, coordinate, blocksize, **kwargs):
    pygame.sprite.Sprite.__init__(self)
    self.image = pygame.image.load(imagepath)
    self.image = pygame.transform.scale(self.image, (blocksize, blocksize))
    self.rect = self.image.get_rect()
    self.rect.left, self.rect.top = coordinate[0] * blocksize, coordinate[1] * blocksize
    self.coordinate = coordinate
    self.blocksize = blocksize
  '''画到屏幕上'''
  def draw(self, screen):
    screen.blit(self.image, self.rect)
    return True


'''背景类'''
class Background(pygame.sprite.Sprite):
  def __init__(self, imagepath, coordinate, blocksize, **kwargs):
    pygame.sprite.Sprite.__init__(self)
    self.image = pygame.image.load(imagepath)
    self.image = pygame.transform.scale(self.image, (blocksize, blocksize))
    self.rect = self.image.get_rect()
    self.rect.left, self.rect.top = coordinate[0] * blocksize, coordinate[1] * blocksize
    self.coordinate = coordinate
    self.blocksize = blocksize
  '''画到屏幕上'''
  def draw(self, screen):
    screen.blit(self.image, self.rect)
    return True

水果类定义其实也差不多,但是不同的水果可以帮助角色恢复不同数值的生命值:

'''水果类'''
class Fruit(pygame.sprite.Sprite):
  def __init__(self, imagepath, coordinate, blocksize, **kwargs):
    pygame.sprite.Sprite.__init__(self)
    self.kind = imagepath.split('/')[-1].split('.')[0]
    if self.kind == 'banana':
      self.value = 5
    elif self.kind == 'cherry':
      self.value = 10
    else:
      raise ValueError('Unknow fruit <%s>...' % self.kind)
    self.image = pygame.image.load(imagepath)
    self.image = pygame.transform.scale(self.image, (blocksize, blocksize))
    self.rect = self.image.get_rect()
    self.rect.left, self.rect.top = coordinate[0] * blocksize, coordinate[1] * blocksize
    self.coordinate = coordinate
    self.blocksize = blocksize
  '''画到屏幕上'''
  def draw(self, screen):
    screen.blit(self.image, self.rect)
    return True

炸弹类和角色类的定义就稍稍复杂一些了。角色类需要根据玩家或者电脑的指示上下左右移动,同时可以在自己的位置上产生炸弹以及吃水果之后恢复一定数值的生命值:

'''角色类'''
class Hero(pygame.sprite.Sprite):
  def __init__(self, imagepaths, coordinate, blocksize, map_parser, **kwargs):
    pygame.sprite.Sprite.__init__(self)
    self.imagepaths = imagepaths
    self.image = pygame.image.load(imagepaths[-1])
    self.image = pygame.transform.scale(self.image, (blocksize, blocksize))
    self.rect = self.image.get_rect()
    self.rect.left, self.rect.top = coordinate[0] * blocksize, coordinate[1] * blocksize
    self.coordinate = coordinate
    self.blocksize = blocksize
    self.map_parser = map_parser
    self.hero_name = kwargs.get('hero_name')
    # 生命值
    self.health_value = 50
    # 炸弹冷却时间
    self.bomb_cooling_time = 5000
    self.bomb_cooling_count = 0
    # 随机移动冷却时间(仅AI电脑用)
    self.randommove_cooling_time = 100
    self.randommove_cooling_count = 0
  '''角色移动'''
  def move(self, direction):
    self.__updateImage(direction)
    if direction == 'left':
      if self.coordinate[0]-1 < 0<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值