pygame Sprite类(4)

开箱即用的打砖块游戏精灵类Demo版

# Pygame Sprite(4)
# coding: utf-8
# 作者:爱编程的章老师
# 创建:2021/1/27 2:53 下午
# 邮箱:slxxf000@163.com
# 微信:slxxfl
# 微信公众号:A卫隆少儿编程
# 格言:给自己的生活增加一份向上的力,每都进步一点点
from random import randintimport pygame
from pygame.sprite import Sprite, Groupfrom sys import exit'''运用Sprite类重写打砖块程序'''# 砖快类
class Brick(Sprite):def __init__(self, left, top, width, height):super().__init__()self.rect = pygame.Rect(left, top, width, height)  # 位置矩形self.image = pygame.Surface((width, height))  # 画布pygame.draw.rect(self.image, "blue", (0, 0, width, height))  # 画到画布上# 球类
class Ball(Sprite):def __init__(self, pos, radius):super().__init__()self.rect = pygame.Rect(pos, (2 * radius, 2 * radius))  # 位置矩形self.image = pygame.Surface((2 * radius, 2 * radius))  # 画布pygame.draw.circle(self.image, "red", (radius, radius), radius)  # 画到画布上def update(self, direct):DISTANCE = 5# 传入一个方向参数,用来决定向哪个方向移动# 分成四个方向:左上,右上,左下,右下if direct == 1:  # 左上self.rect.left -= DISTANCEself.rect.top -= DISTANCEreturnif direct == 2:  # 右上self.rect.left += DISTANCEself.rect.top -= DISTANCEreturnif direct == 3:  # 左下self.rect.left -= DISTANCEself.rect.top += DISTANCEreturn# 右下self.rect.left += DISTANCEself.rect.top += DISTANCE# 挡板类
class Board(Sprite):def __init__(self, left, top, width, height):super().__init__()self.rect = pygame.Rect(left, top, width, height)  # 位置矩形self.image = pygame.Surface((width, height))  # 画布pygame.draw.rect(self.image, "green", (0, 0, width, height))  # 画到画布上# 挡版的移动def update(self, direct):# direct = 1 时往右, direct = -1 时往左, direct = 0 时不动self.rect.left += direct * 10# 主程序
def main():pygame.init()screen = pygame.display.set_mode((800, 600))pygame.display.set_caption("打砖块程序V2.0")brick_width = 800 // 8 - 5brick_height = 15 - 5brick_group = Group()clock = pygame.time.Clock()for i in range(8):for j in range(5):# 往砖块组加入砖快brick_group.add(Brick(i * 100, j * 15, brick_width, brick_height))# 方向右上或者左上ball_direct = randint(1, 2)board_direct = 0# 第二种加入分组的方法# 板board_group = Group()board = Board(300, 570, 200, 20)board.add(board_group)# 球ball_group = Group()ball = Ball((400, 545), 25)ball.add(ball_group)# 主循环while 1:for event in pygame.event.get():if event.type == pygame.QUIT:exit()screen.fill("black")# 画砖brick_group.update()brick_group.draw(screen)# 画球ball_group.update(ball_direct)ball_group.draw(screen)# 画板board_group.update(board_direct)board_group.draw(screen)# 按键检测if event.type == pygame.KEYDOWN:if event.key == pygame.K_RIGHT:if board.rect.right < 800:board_direct = 1else:board_direct = 0board.rect.right = 800elif event.key == pygame.K_LEFT:if board.rect.left > 0:board_direct = -1else:board_direct = 0board.rect.left = 0if event.type == pygame.KEYUP:if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT:board_direct = 0pygame.display.update()# 碰撞检测# 碰砖检测for brick in brick_group:if ball.rect.colliderect(brick.rect):if ball_direct == 1:ball_direct = 3elif ball_direct == 2:ball_direct = 4brick_group.remove(brick)break# 碰墙if ball.rect.left <= 0:  # 左墙if ball_direct == 1:ball_direct = 2elif ball_direct == 3:ball_direct == 4elif ball.rect.right >= 800:  # 右墙if ball_direct == 2:ball_direct = 1elif ball_direct == 4:ball_direct == 3elif ball.rect.top <= 0:  # 上墙if ball_direct == 1:ball_direct = 3elif ball_direct == 2:ball_direct = 4# 碰板if ball.rect.colliderect(board.rect):if ball_direct == 3:ball_direct = 1elif ball_direct == 4:ball_direct = 2if ball.rect.top >= 600:break# 设置帧率clock.tick(60)if __name__ == "__main__":main()

说明

对Sprite()类作了一个简单的回顾,与增加了两个简单的函数说明

  • 精灵主动加入一个分组:sprite.add(group)
  • 一个精灵从组中删除:group.remove(sprite) sprite.remove(group)
  • 如果精灵属于一个唯一的分组,或者想从所有分组中删除自己.可以用sprite.kill()实现
    未举例应用的:碰撞消失(子弹击中对象,双双消灭)

pygame Sprite类(4)相关推荐

  1. Pygame中的Sprite类

    Sprite源代码 pygame中sprite模块的Sprite类是一个简单的基类,它的源代码如下: class Sprite(object):def __init__(self, *groups): ...

  2. Python中pygame模块pygame.sprite.groupcollision碰撞检测的详解与测试

    在游戏开发中,非常重要的编程工作就是进行碰撞检测.在python的pygame模块中的sprite精灵类提供了多种方便快捷的碰撞检测方法.比如矩形碰撞检测.圆形碰撞检测.遮罩碰撞检测,这些方法基本都是 ...

  3. html5 精灵动画,H5案例分享:CreateJs-EaselJS精灵Sprite类和简明动画

    CreateJs-EaselJS精灵Sprite类和简明动画 一.EaselJS中Sprite类 EaselJS精灵Sprite类是用spritesheet实例显示一个帧或帧序列(即动画).精灵片是一 ...

  4. 如何使用Createjs来编写HTML5游戏(三)使用EaselJS中的制作Sprite类制作

     一,使用Sprite制作动画 动画的制作原理据说是由于人的视觉残留效应,连续播放一系列的静止图片,即可获得一段动画,每张图片可以称作动画的一帧,可以参考Gif动画的原理.在EaselJS中,提供了一 ...

  5. pygame 中pygame.sprite.Sprite的零碎知识点

    1.Sprite(精灵类)的作用是派生子类,子类必须在初始化方法中定义图像(image)和位置(rect)的属性: 2.初始化方式中image属性记录图像数据 3.初始化方法中rect属性记录在屏幕上 ...

  6. python:collisions=pygame.sprite.groupcollide(bullets,aliens,True,True)

    这行代码遍历bullets和aliens这两个编组,并根据后面的True或False来决定是否删除对应的精灵. 以下是有道对这个方法的翻译: 找到所有在两个组之间碰撞的精灵. groupcollisi ...

  7. 使用 Python 和 Pygame 构建小行星游戏

    原文地址:https://realpython.com/asteroids-game-python/ 教程的电子文档:下载 模块pygame的官方网址:https://www.pygame.org/d ...

  8. pygame显示图片的方法_使用Sprite实现移动动画(Pygame中的精灵类)

    pygame.sprite.Sprite就是Pygame里面用来实现精灵的一个类,使用时,并不需要对它实例化,只需要继承他,然后按需写出自己的类就好了,因此非常简单实用. 什么是精灵? 精灵可以认为成 ...

  9. python动画精灵_【python游戏编程之旅】第六篇---pygame中的Sprite(精灵)模块和加载动画...

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 直到现在我们已经学了很多pygame基础知识了,从这篇博客开始我们将会学习pygame中高级部分,更多和精灵 ...

最新文章

  1. Androidx FloatingActionButton 中间图片颜色值修改
  2. TM、XWT和Wazaabi
  3. 前端开发面试题总结之——JAVASCRIPT.One
  4. python查看函数参数快捷键_Python基础知识—快捷键
  5. macOS如何使用命令启动服务/停止服务/查看服务
  6. JPA + EclipseLink + SAP云平台 = 运行在云端的数据库应用 1
  7. IQ数据简介:I/Q Data
  8. cefsharp 网页另存为图片_如何将PDF转换为JPG图片?这些转换方法一学就会
  9. java redis事务_Redis事务
  10. 管理感悟:当领导就要敢于,及时做出决策
  11. matlab画x的1 3次方图像,Y=X的3次方的图像)
  12. 云购PHP,高仿一元云购CMS-PHP源码
  13. vector begin()用法
  14. 我,35岁大专,高龄入职鹅厂,试用期未过被劝退(分享java面试宝典)
  15. AndroidQ 分屏窗口尺寸计算 (WMS部分)
  16. Android小技巧 自动关闭输入法软键盘
  17. Spoken English
  18. 【mac m1 paddleOCR】安装环境及其坑位
  19. 浣溪沙 2022年4月24日
  20. 上海职称不用考计算机和英语翻译,国家翻译专业资格考试将替代职称评定

热门文章

  1. 奔驰漏油维权调查结果公布!罚款100万
  2. 模拟-HDOJ-5336-XYZ and Drops
  3. 计算机总是进入休眠状态,电脑关机总是进入待机状态的处理方法
  4. Linux - C SHELL提示符中显示时间,设置在切换小时时不提示“DING!“
  5. 数字城市福州智慧巡查平台行业分析【软件测试与工程】
  6. Android Binder框架实现之bindService详解
  7. Google 地图 API for Android
  8. java this 多线程_Java多线程编程的常见陷阱
  9. 无处 不在的无线智能——6g 的关键驱动与研究挑战_一文看懂什么是 6G - 6G,5G
  10. JS中clientWidth offsetWidth innerWidth scrollWidth等区分