利用Python实现飞机大战的详细步骤过程是什么
Admin 2022-09-03 群英技术资讯 363 次浏览
为了熟悉Python基础语法,学习了一个经典的案例:飞机大战,最后实现效果如下:
实现步骤:
①下载64位对应python
版本的pygame
:pygame-1.9.6-cp38-cp38-win_amd64.whl
② 更新pip
:python -m pip install --upgrade pip
③ 安装pygame
:pip install pygame-1.9.6-cp38-cp38-win_amd64.whl
④ 实现代码如下:
import sys # 导入系统模块 import random # 随机数模块 import pygame # 导入pygame模块 import pygame.locals # 导入pygame本地策略 ICO_PATH = "images/app.ico" # APP_ICO APP_NAME = "飞机大战V1.0" # APP_NAME Enemy_IMGS = ("images/enemy1.png", "images/enemy2.png") # ENEMY_IMGS # TODO 定义一个公共类 class Model: window = None # 主窗体window对象 # 初始化函数 def __init__(self, img_path, x, y): self.img = pygame.image.load(img_path) self.x = x self.y = y # 将图片填充到背景中 def display(self): Model.window.blit(self.img, (self.x, self.y)) # TODO 背景 class Background(Model): # 背景移动 def move(self): if self.y <= Game.WINDOW_HEIGHT: self.y += 1 else: self.y = 0 # 背景图片展示 def display(self): Model.window.blit(self.img, (self.x, self.y)) # 填充背景 Model.window.blit(self.img, (self.x, self.y - Game.WINDOW_HEIGHT)) # 填充辅助背景 # TODO 玩家类 class PlayerPlane(Model): def __init__(self, img_path, x, y): super().__init__(img_path, x, y) # 子弹 self.bullets = [] def display(self, enemys): super().display() remove_bullets = [] for bullet in self.bullets: bullet.move() bullet.display() # 如果子弹小于消失于屏幕,删除子弹 if bullet.y < -11: remove_bullets.append(bullet) # 子弹的矩阵 bullet_rect = pygame.locals.Rect(bullet.x, bullet.y, 5, 11) # TODO 进行碰撞检测 for enemy in enemys: # 敌机的矩阵 enemy_rect = pygame.locals.Rect(enemy.x, enemy.y, 57, 43) # 如果碰撞 if pygame.Rect.colliderect(bullet_rect, enemy_rect): # 随机修改敌机的位置模拟敌机销毁并生成新敌机并删除子弹 enemy.img = pygame.image.load(Enemy_IMGS[random.randint(0, 1)]) enemy.x = random.randint(0, Game.WINDOW_WIDTH - 57) enemy.y = random.randint(-Game.WINDOW_WIDTH, -43) remove_bullets.append(bullet) break for bullet in remove_bullets: self.bullets.remove(bullet) # TODO 敌机类 class EnemyPlane(Model): def __init__(self): self.img = pygame.image.load(Enemy_IMGS[random.randint(0, 1)]) self.x = random.randint(0, Game.WINDOW_WIDTH - 57) self.y = random.randint(-Game.WINDOW_WIDTH, -43) def move(self): if self.y > Game.WINDOW_HEIGHT: self.y = -43 # 返回初始位置 else: self.y += 1 # TODO 子弹类 class Bullet(Model): def move(self): self.y -= 1 # TODO 游戏类 class Game: WINDOW_WIDTH = 410 WINDOW_HEIGHT = 614 # 初始化操作 def __init__(self): self.window = pygame.display.set_mode([Game.WINDOW_WIDTH, Game.WINDOW_HEIGHT]) # 窗口的设置 self.background = Background("images/background.png", 0, 0) # 窗体模型的设置 self.player = PlayerPlane("images/me1.png", 180, 400) self.enemyPlanes = [] for _ in range(5): self.enemyPlanes.append(EnemyPlane()) # 游戏的入口函数 def run(self): self.frame_init() while True: self.background.move() # 背景向上移动,模拟环境移动 self.background.display() # 将图片塞入到窗体中 self.player.display(self.enemyPlanes) for enemy in self.enemyPlanes: enemy.move() enemy.display() pygame.display.update() # 刷新窗体 self.event_init() # 监听事件 # 初始化窗口 def frame_init(self): Model.window = self.window # 将window对象赋值给Model公有类 ico = pygame.image.load(ICO_PATH) # 加载图片 pygame.display.set_icon(ico) # 设置icon pygame.display.set_caption(APP_NAME) # 设置app_name # 事件初始化方法 def event_init(self): for event in pygame.event.get(): # 关闭事件 if event.type == pygame.locals.QUIT: sys.exit() # 监听鼠标事件 if event.type == pygame.locals.MOUSEMOTION: pos = pygame.mouse.get_pos() self.player.x = pos[0] - 51 self.player.y = pos[1] - 63 focus_state = pygame.mouse.get_pressed() if focus_state[0] == 1: pos = pygame.mouse.get_pos() self.player.bullets.append(Bullet("images/bullet1.png", pos[0], pos[1] - 75)) if __name__ == "__main__": Game().run()
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
#!/use/bin/envpython#-*-conding:utf-8-*-#author:shanshan"""写代码1,实现用户输入用户名和密码,当用户名为seven且密码为123时,显示登陆成功,否则登陆失败!2,实现用户输入用户名和密码,当用户名为seven且密码为123时,显示登陆成功,否则登陆失败,失败时允许重复输入三次3,实现用户输入用户名和密码,当用户
这篇文章主要介绍了Python基础之操作MySQL数据库,文中有非常详细的代码示例,对正在学习python基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
数据合并是数据处理过程中的必经环节,pandas作为数据分析的利器,提供了五种常用的数据合并方式,让我们看看如何使用这些方法吧!
本文主要介绍了Python中可以用三种方法判断文件是否存在,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这篇文章主要和大家详细介绍一下Python是如何优雅地对数据进行分组的,文中通过示例进行了详细的讲解,感兴趣的小伙伴可以跟随小编一起学习一下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008