当前位置: 首页 > news >正文

Python面向对象植物大战僵尸

先来一波效果图

 

 来看看如何设计游戏架构

import sysimport pygameclass 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 = 0def update(self):self.current += 1if self.current == len(self.images) * 2:self.current = 0self.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 = centerself.time_count = 2self.gm = gmself.bullet_group = pygame.sprite.Group()def update(self):super().update()self.rect.left -= 1class PeaShooter(AnimateSprite):def __init__(self, default_name, names, center, gm):super().__init__(default_name, names)self.rect.center = centerself.time_count = 5self.gm = gmself.bullet_group = pygame.sprite.Group()def update(self):super().update()self.time_count -= 0.1if self.time_count <= 0:self.time_count = 5BulletSprite("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 = centerdef update(self):self.rect.left += 5if 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()

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

http://www.lryc.cn/news/134097.html

相关文章:

  • 大屏模板,增加自适应(包含websocket)
  • 电商系统架构设计系列(九):如何规划和设计分库分表?
  • 从Web 2.0到Web 3.0,互联网有哪些变革?
  • QT中资源文件resourcefile的使用,使用API完成页面布局
  • 2337. 移动片段得到字符串
  • Java并发编程第5讲——volatile关键字(万字详解)
  • 6.小程序api分类
  • 什么是PPS和TOD时序?授时防护设备是什么?
  • 推荐一款好用的开源视频播放器(免费无广告)
  • STM32 CubeMX (第三步Freertos中断管理和软件定时)
  • Java虚拟机(JVM):堆溢出
  • C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
  • Php“牵手”淘宝商品详情页数据采集方法,淘宝API接口申请指南
  • 如何使用CSS实现一个全屏滚动效果(Fullpage Scroll)?
  • Docker之Compose
  • 安装chromedriver 115,对应chrome版本115(经检验,116也可以使用)
  • 排序算法:插入排序
  • 掌握AI助手的魔法工具:解密Prompt(提示)在AIGC时代的应用「上篇」
  • JMeter - 接口压力测试工具简单使用
  • 【C++入门到精通】C++入门 —— priority_queue(STL)优先队列
  • 静态代码扫描工具 Sonar 配置及使用
  • docker 03(docker 容器的数据卷)
  • 【04】基础知识:typescript中的类
  • CCClippingNode:在游戏中实现遮罩效果、剪切效果,以涂抹糖霜为例,如何更好的实现涂抹效果,提高用户的游戏体验
  • cuda gdb调试
  • 【vim 学习系列文章 5 - cscope 过滤掉某些目录】
  • 实验三 HBase1.2.6安装及配置
  • LightDB sequence支持MAXVALUE最大值与Oracle相同
  • 二、Kafka快速入门
  • 消息中间件-kafka实战-第五章-kafka重复消费、顺序消费及死信队列