Python面向对象植物大战僵尸
先来一波效果图
来看看如何设计游戏架构
-
import sys
-
-
import pygame
-
-
-
class BaseSprite(pygame.sprite.Sprite):
-
def __init__(self, name):
-
super().__init__()
-
self.image = pygame.image.load(name)
-
self.rect = self.image.get_rect()
-
-
-
class AnimateSprite(BaseSprite):
-
def __init__(self, default_name, names):
-
super().__init__(default_name)
-
self.images = [pygame.image.load(name) for name in names]
-
self.current = 0
-
-
def update(self):
-
self.current = 1
-
if self.current == len(self.images) * 2:
-
self.current = 0
-
self.image = self.images[self.current // 2]
-
-
-
class Enemy(AnimateSprite):
-
def __init__(self, default_name, names, center, gm):
-
super().__init__(default_name, names)
-
self.rect.center = center
-
self.time_count = 2
-
self.gm = gm
-
-
self.bullet_group = pygame.sprite.Group()
-
-
def update(self):
-
super().update()
-
self.rect.left -= 1
-
-
-
class PeaShooter(AnimateSprite):
-
def __init__(self, default_name, names, center, gm):
-
super().__init__(default_name, names)
-
self.rect.center = center
-
self.time_count = 5
-
self.gm = gm
-
-
self.bullet_group = pygame.sprite.Group()
-
-
def update(self):
-
super().update()
-
self.time_count -= 0.1
-
if self.time_count <= 0:
-
self.time_count = 5
-
BulletSprite("bullet.png", (self.rect.right, self.rect.top 15)).add(self.bullet_group)
-
-
self.bullet_group.draw(self.gm.screen)
-
self.bullet_group.update()
-
-
print("当前子弹哟", len(self.bullet_group.sprites()))
-
-
-
class BulletSprite(BaseSprite):
-
def __init__(self, name, center):
-
super().__init__(name)
-
self.rect.center = center
-
-
def update(self):
-
self.rect.left = 5
-
if self.rect.left > 1400:
-
self.kill()
-
-
-
class GameManage:
-
def __init__(self):
-
self.screen = pygame.display.set_mode((1400, 600))
-
pygame.display.set_caption("植物大战僵尸")
-
-
self.clock = pygame.time.Clock()
-
-
self.bg_surface = pygame.image.load("background1.jpg")
-
-
# 射手精灵组
-
self.pea_shooter_group = pygame.sprite.Group()
-
-
self.pea1 = PeaShooter("plants/peashooter/idle/idle_00.png",
-
[f"plants/peashooter/idle/idle_0{i}.png" for i in range(8)], (700, 200), self)
-
self.pea1.add(self.pea_shooter_group)
-
-
self.pea2 = PeaShooter("plants/peashooter/idle/idle_00.png",
-
[f"plants/peashooter/idle/idle_0{i}.png" for i in range(8)], (700, 300), self)
-
self.pea2.add(self.pea_shooter_group)
-
-
self.enemy_group = pygame.sprite.Group()
-
-
images = [f"zombies/run/run_0{i}.png" for i in range(10)]
-
for i in range(10, 31):
-
images.append(f"zombies/run/run_{i}.png")
-
-
self.enemy1 = Enemy("zombies/run/run_00.png", images, (1400, 200), self)
-
self.enemy1.add(self.enemy_group)
-
-
self.enemy2 = Enemy("zombies/run/run_00.png", images, (1100, 200), self)
-
self.enemy2.add(self.enemy_group)
-
-
self.enemy3 = Enemy("zombies/run/run_00.png", images, (1300, 300), self)
-
self.enemy3.add(self.enemy_group)
-
-
self.enemy4 = Enemy("zombies/run/run_00.png", images, (1200, 300), self)
-
self.enemy4.add(self.enemy_group)
-
-
def run(self):
-
while True:
-
self.clock.tick(20)
-
-
for event in pygame.event.get():
-
if event.type == pygame.QUIT:
-
pygame.quit()
-
sys.exit()
-
-
self.screen.blit(self.bg_surface, (0, 0))
-
-
self.pea_shooter_group.draw(self.screen)
-
self.pea_shooter_group.update()
-
-
self.enemy_group.draw(self.screen)
-
self.enemy_group.update()
-
-
-
for pea_sprite in self.pea_shooter_group.sprites():
-
if pygame.sprite.groupcollide(pea_sprite.bullet_group, self.enemy_group, True, True):
-
print("打死了一个僵尸")
-
-
pygame.display.flip()
-
-
-
gm = GameManage()
-
gm.run()
抛砖引玉,等待后续完善。。。。。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhiahjii
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22