为了实现碰撞消失的功能,使用继承精灵进行对玩家的优化

# 引入飞机的类
class Plane(pygame.sprite.Sprite):
# 创建玩家的方法,引入screen模块
def __init__(self, screen):
# 引入图片创建玩家
self.player = pygame.image.load("./images/me1.png")
self.image=self.player
# 设置速度变量
self.speed = 10
# 调用继承精灵初始化方法
pygame.sprite.Sprite.__init__(self)
# 根据图片进行获取矩形对象
self.rect = self.image.get_rect()
self.rect.topleft = [179,500]
self.x = 179
self.y = 500
# 使screen变为飞机类的一个属性
self.screen = screen
# 定义装子弹的列表
self.bullets = pygame.sprite.Group() # 定义update方法包含检测指令和绘制
def update(self):
self.key_control()
self.display()
# 创建玩家移动的方法
def key_control(self):
# 判断按下键盘事件,对玩家x,y坐标进行调整使玩家移动
key_pressed = pygame.key.get_pressed()
if key_pressed[K_w] or key_pressed[K_UP]:
self.rect.top -= self.speed
if key_pressed[K_d] or key_pressed[K_RIGHT]:
self.rect.right+= self.speed
if key_pressed[K_a] or key_pressed[K_LEFT]:
self.rect.left -= self.speed
if key_pressed[K_s] or key_pressed[K_DOWN]:
self.rect.bottom += self.speed
if key_pressed[K_SPACE]:
# 按下空格键发射子弹
bullet = Bullet(self.screen, self.rect.left, self.rect.top)
# 将子弹存入列表
self.bullets.add(bullet) def display(self):
# 绘制玩家
self.screen.blit(self.player, self.rect)
# 更新子弹坐标
self.bullets.update()
# 绘制所有子弹到屏幕
self.bullets.draw(self.screen)

与原本代码的对比 

# 引入飞机的类
class Plane(object):
# 创建玩家的方法,引入screen模块
def __init__(self, screen):
# 引入图片创建玩家
self.player = pygame.image.load("./images/me1.png")
# 设置速度变量
self.speed = 10 self.x = 179
self.y = 500
# 使screen变为飞机类的一个属性
self.screen = screen
# 定义装子弹的列表
self.bullets = [] # 创建玩家移动的方法
def key_control(self):
# 判断按下键盘事件,对玩家x,y坐标进行调整使玩家移动
key_pressed = pygame.key.get_pressed()
if key_pressed[K_w] or key_pressed[K_UP]:
self.y -= self.speed
if key_pressed[K_d] or key_pressed[K_RIGHT]:
self.x += self.speed
if key_pressed[K_a] or key_pressed[K_LEFT]:
self.x -= self.speed
if key_pressed[K_s] or key_pressed[K_DOWN]:
self.y += self.speed
if key_pressed[K_SPACE]:
# 按下空格键发射子弹
bullet = Bullet(self.screen, self.x, self.y)
# 将子弹存入列表
self.bullets.append(bullet) def display(self):
# 绘制玩家
self.screen.blit(self.player, (self.x, self.y))
# 遍历所有子弹
for bullet in self.bullets:
# 引入让子弹飞起来的方法
bullet.auto_move()
# 显示子弹
bullet.display()

pygame小游戏飞机大战_8继承精灵玩家优化的更多相关文章

  1. 软件工程 Android小游戏 猜拳大战

    一.前言 最近学校举办的大学生程序设计竞赛,自己利用课余时间写了一个小游戏,最近一直在忙这个写这个小游戏,参加比赛,最终是老师说自己写的简单,可以做的更复杂的点的.加油 二.内容简介 自己玩过Andr ...

  2. 原生JS实现的h5小游戏-植物大战僵尸

    代码地址如下:http://www.demodashi.com/demo/12755.html 项目介绍 本项目是利用原生js实现的h5小游戏-植物大战僵尸,主要结合了一下自己对于h5小游戏的理解,结 ...

  3. pygame小游戏之坦克大战

    以前在学校的时候无聊的学了会pygame.看了大概一周的教学视频,做出来个坦克大战的小游戏 Python3.5  pycharm import pygame,sys,time from random ...

  4. Pygame小游戏练习五

    @Python编程从入门到实践 Python项目练习 十一.显示游戏得分及最高分 创建新类Scoreboard,用以显示得分和最高分. # scoreboard.py import pygame.fo ...

  5. Pygame小游戏练习二

    @Python编程从入门到实践 Python项目练习 四.创建Ship类 建立ship.py,创建Ship类,管理飞船行为. # ship.py import pygame class Ship(): ...

  6. Pygame小游戏练习四

    @Python编程从入门到实践 Python项目练习 九.添加Play按钮 一.创建Button类 先让游戏一开始为非活动状态 # game_stats.py # --snip-- self.game ...

  7. Pygame小游戏练习三

    @Python编程从入门到实践 Python项目练习 七.创建Passenger类 创建passenger.py文件,创建Passenger类,控制乘客属性和行为 # passenger.py imp ...

  8. android小游戏 飞机躲子弹

    最近android老师让每人写一个小东西,因为之前学awt时写过一个java版的飞机躲子弹,所以这次想写成android版的. 文件直接导入就行http://files.cnblogs.com/fil ...

  9. 关于Unity的入门游戏飞机大战的开发(下)

    开发思路: 1: 修改测试模式,去掉开始按钮方便开发,加入敌机的资源2: 创建敌机 添加刚体,碰撞器组件,添加帧动画播放组件;3: 创建敌机出现的队形;4: 根据队形随机 生成我们的敌机,调整敌机的速 ...

  10. 关于Unity的入门游戏飞机大战的开发(上)

    每个组件都是一个类的实例,要获得某个组件,要先创建一个同类型的组件类实例,然后把实例传引用过去,就可以对想要的组件实例进行操作. 做游戏一般创建一个逻辑节点,里面只管逻辑,再创建一个动画节点,里面有好 ...

随机推荐

  1. 2024牛客多校2B MST

    同步发布于我的网站. Problem Sajin最近深入研究了最小生成树,现在他已经掌握了MST的算法.他渴望通过一系列查询来评估您对最小生成树概念的掌握程度. 您将面临一个加权无向图,该图包含没有任 ...

  2. Style:用法,多样性,全局样式与资源字典

    Style:用法,多样性,全局样式与资源字典 本文同时为b站WPF课程的笔记,相关示例代码 对应06~08 前言 大部分能够想到的属性,xaml里面都是自带了的.可以多去网络上搜一搜.比如说高度.宽度 ...

  3. Web前端入门第 62 问:JavaScript 循环结构注意事项

    HELLO,这里是大熊的前端开发笔记. 循环作为 算法与数据结构 中的基石,JS 与其他编程语言一样,都提供了多种循环结构用于处理数据. for 循环 事物的开端往往都是从最常用的开始,循环结构咱们从 ...

  4. Joomla设计理念探讨系列2 -程序员要如何用代码实现“白纸幻想”?

    客户幻想拖拖拽拽就建站?程序员连夜拆解出网格化背后的技术深渊. 1. 破灭的白纸幻想?不,是技术逻辑的碰撞 当客户兴奋地描述"白纸网格"时,程序员的第一反应往往是: "需 ...

  5. 解密prompt系列55.Agent Memory的工程实现 - Mem0 & LlamaIndex

    记忆存储是构建智能个性化.越用越懂你的Agent的核心挑战.上期我们探讨了模型方案实现长记忆存储,本期将聚焦工程实现层面. What:记忆内容(手动管理 vs 自动识别) How:记忆处理(压缩/抽取 ...

  6. 使用wxWidgets进行跨平台GUI开发(附1)

    补充说明wxWidgets在Windows下使用CMake的配置 wxWidgets官方提供了一个在Windows下使用CMake来构建wxWidgets库的方法,这样便于你自己用CMake构建项目. ...

  7. SpringBoot集成TOTP双因素认证(2FA)实战

    一.双因素认证的概念 双因素认证(2FA,Two Factor Authentication)又称双因子认证.两步验证,指的是是一种安全认证过程,需要用户提供两种不同类型的认证因子来表明自己的身份,包 ...

  8. 九、buildroot系统 usb配置

    3.3.usb配置 源码中kernel默认已经打开了相关的usb配置,只需要在buildroot中打开相关配置. 1.基本功能类别 简称 功能描述 ADB (Android Debug Bridge) ...

  9. 我是一名数学专业的应届博士,我该如何选择offer?

    这是IC男奋斗史的第5篇原创 关注公众号[IC男奋斗史],让我们一起撸起袖子加油干! 本文1396字,预计阅读4分钟. 本文来自私信咨询问答.杰哥已征得对方同意把内容展示在公众平台. 感谢对杰哥的信任 ...

  10. Xamarin.Andorid 代码方式弹出下拉框

    转载于:https://my.oschina.net/u/1024921/blog/163142 public static void SetFocus(this Spinner snr) { snr ...