• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Python面向对象植物大战僵尸

武飞扬头像
码农NoError
帮助1

先来一波效果图

学新通

学新通 

 来看看如何设计游戏架构

  1.  
    import sys
  2.  
     
  3.  
    import pygame
  4.  
     
  5.  
     
  6.  
    class BaseSprite(pygame.sprite.Sprite):
  7.  
    def __init__(self, name):
  8.  
    super().__init__()
  9.  
    self.image = pygame.image.load(name)
  10.  
    self.rect = self.image.get_rect()
  11.  
     
  12.  
     
  13.  
    class AnimateSprite(BaseSprite):
  14.  
    def __init__(self, default_name, names):
  15.  
    super().__init__(default_name)
  16.  
    self.images = [pygame.image.load(name) for name in names]
  17.  
    self.current = 0
  18.  
     
  19.  
    def update(self):
  20.  
    self.current = 1
  21.  
    if self.current == len(self.images) * 2:
  22.  
    self.current = 0
  23.  
    self.image = self.images[self.current // 2]
  24.  
     
  25.  
     
  26.  
    class Enemy(AnimateSprite):
  27.  
    def __init__(self, default_name, names, center, gm):
  28.  
    super().__init__(default_name, names)
  29.  
    self.rect.center = center
  30.  
    self.time_count = 2
  31.  
    self.gm = gm
  32.  
     
  33.  
    self.bullet_group = pygame.sprite.Group()
  34.  
     
  35.  
    def update(self):
  36.  
    super().update()
  37.  
    self.rect.left -= 1
  38.  
     
  39.  
     
  40.  
    class PeaShooter(AnimateSprite):
  41.  
    def __init__(self, default_name, names, center, gm):
  42.  
    super().__init__(default_name, names)
  43.  
    self.rect.center = center
  44.  
    self.time_count = 5
  45.  
    self.gm = gm
  46.  
     
  47.  
    self.bullet_group = pygame.sprite.Group()
  48.  
     
  49.  
    def update(self):
  50.  
    super().update()
  51.  
    self.time_count -= 0.1
  52.  
    if self.time_count <= 0:
  53.  
    self.time_count = 5
  54.  
    BulletSprite("bullet.png", (self.rect.right, self.rect.top 15)).add(self.bullet_group)
  55.  
     
  56.  
    self.bullet_group.draw(self.gm.screen)
  57.  
    self.bullet_group.update()
  58.  
     
  59.  
    print("当前子弹哟", len(self.bullet_group.sprites()))
  60.  
     
  61.  
     
  62.  
    class BulletSprite(BaseSprite):
  63.  
    def __init__(self, name, center):
  64.  
    super().__init__(name)
  65.  
    self.rect.center = center
  66.  
     
  67.  
    def update(self):
  68.  
    self.rect.left = 5
  69.  
    if self.rect.left > 1400:
  70.  
    self.kill()
  71.  
     
  72.  
     
  73.  
    class GameManage:
  74.  
    def __init__(self):
  75.  
    self.screen = pygame.display.set_mode((1400, 600))
  76.  
    pygame.display.set_caption("植物大战僵尸")
  77.  
     
  78.  
    self.clock = pygame.time.Clock()
  79.  
     
  80.  
    self.bg_surface = pygame.image.load("background1.jpg")
  81.  
     
  82.  
    # 射手精灵组
  83.  
    self.pea_shooter_group = pygame.sprite.Group()
  84.  
     
  85.  
    self.pea1 = PeaShooter("plants/peashooter/idle/idle_00.png",
  86.  
    [f"plants/peashooter/idle/idle_0{i}.png" for i in range(8)], (700, 200), self)
  87.  
    self.pea1.add(self.pea_shooter_group)
  88.  
     
  89.  
    self.pea2 = PeaShooter("plants/peashooter/idle/idle_00.png",
  90.  
    [f"plants/peashooter/idle/idle_0{i}.png" for i in range(8)], (700, 300), self)
  91.  
    self.pea2.add(self.pea_shooter_group)
  92.  
     
  93.  
    self.enemy_group = pygame.sprite.Group()
  94.  
     
  95.  
    images = [f"zombies/run/run_0{i}.png" for i in range(10)]
  96.  
    for i in range(10, 31):
  97.  
    images.append(f"zombies/run/run_{i}.png")
  98.  
     
  99.  
    self.enemy1 = Enemy("zombies/run/run_00.png", images, (1400, 200), self)
  100.  
    self.enemy1.add(self.enemy_group)
  101.  
     
  102.  
    self.enemy2 = Enemy("zombies/run/run_00.png", images, (1100, 200), self)
  103.  
    self.enemy2.add(self.enemy_group)
  104.  
     
  105.  
    self.enemy3 = Enemy("zombies/run/run_00.png", images, (1300, 300), self)
  106.  
    self.enemy3.add(self.enemy_group)
  107.  
     
  108.  
    self.enemy4 = Enemy("zombies/run/run_00.png", images, (1200, 300), self)
  109.  
    self.enemy4.add(self.enemy_group)
  110.  
     
  111.  
    def run(self):
  112.  
    while True:
  113.  
    self.clock.tick(20)
  114.  
     
  115.  
    for event in pygame.event.get():
  116.  
    if event.type == pygame.QUIT:
  117.  
    pygame.quit()
  118.  
    sys.exit()
  119.  
     
  120.  
    self.screen.blit(self.bg_surface, (0, 0))
  121.  
     
  122.  
    self.pea_shooter_group.draw(self.screen)
  123.  
    self.pea_shooter_group.update()
  124.  
     
  125.  
    self.enemy_group.draw(self.screen)
  126.  
    self.enemy_group.update()
  127.  
     
  128.  
     
  129.  
    for pea_sprite in self.pea_shooter_group.sprites():
  130.  
    if pygame.sprite.groupcollide(pea_sprite.bullet_group, self.enemy_group, True, True):
  131.  
    print("打死了一个僵尸")
  132.  
     
  133.  
    pygame.display.flip()
  134.  
     
  135.  
     
  136.  
    gm = GameManage()
  137.  
    gm.run()
学新通

抛砖引玉,等待后续完善。。。。。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhiahjii
系列文章
更多 icon
同类精品
更多 icon
继续加载