码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Pygame中Sprite的使用方法6-4


    判断两个或多个Sprite图形是否相撞也是在Pygame中经常要完成的。接下来我们通过编程实现如下功能,鼠标控制一个蓝色方块去触碰其他方块,要触碰的方块有两种颜色,红色和绿色,当鼠标控制的蓝色方块碰到绿色方块,则分数加1,碰到红色方块则分数减1,如图1和图2所示。

    图1 程序界面

    图2 分数显示

    以上功能可以通过Pygame的Sprite类的碰撞检测实现。

    1 定义Sprite派生类

    首先定义Sprite派生类Block,Block表示程序中的方块,代码如下所示。

    1. class Block(pygame.sprite.Sprite):
    2. def __init__(self, color, width, height):
    3. super().__init__()
    4. self.image = pygame.Surface((width, height))
    5. self.image.fill(color)
    6. self.rect = self.image.get_rect()

    其中,Block类的__init__()方法的color参数表示方块的颜色,width和height表示方块的宽度和高度。在__init__()方法中首先调用父类也就是Sprite类的__init__()方法;之后通过pygame.Surface()方法创建方块;接下来调用fill()方法为方块填充颜色;最后通过get_rect()获取方块的位置。

    相关链接1 pygame.sprite.Sprite类的使用,请参考

    Pygame中Sprite类的使用3_棉猴的博客-CSDN博客

    2 创建三种颜色方块

    通过创建Block类的实例来创建三种颜色的方块。

    2.1 创建绿色方块

    假设绿色方块有50个,创建绿色方块的代码如下所示。

    1. for i in range(50):
    2. block = Block(GREEN, 20 ,15)
    3. block.rect.x = random.randrange(screen_width)
    4. block.rect.y = random.randrange(screen_height)
    5. block_list.add(block)
    6. all_sprites_list.add(block)

    其中block即为Bloct类的实例,通过random.randrange()方法随机设置绿色方块的位置,之后把创建的绿色方法添加到block_list和all_sprites_list中。以上两个变量的类型是pygame.sprite.Group类的实例,分别用来保存所有绿色方块和所有三种颜色的方块。

    相关链接2 pygame.sprite.Group类的使用,请参考

    Pygame中Sprite类的使用3_棉猴的博客-CSDN博客

    2.2 创建红色方块

    假设红色方块有10个,创建红色方块的代码如下所示。

    1. for i in range(10):
    2. block = Block(RED, 20 ,15)
    3. block.rect.x = random.randrange(screen_width)
    4. block.rect.y = random.randrange(screen_height)
    5. block_bad_list.add(block)
    6. all_sprites_list.add(block)

    其中,block_bad_list是pygame.sprite.Group类的实例,将创建的红色方块分别保存到block_bad_list和all_sprites_list中。

    2.3 创建蓝色方块

    蓝色方块表示鼠标,只需要创建1个即可,其代码如下所示。

    1. player = Block(BLUE, 20, 15)
    2. all_sprites_list.add(player)

    将蓝色方块player保存到all_sprites_list中。

  • 相关阅读:
    Jar包常见的反编译工具介绍与使用
    JDBC 从入门到放弃
    ARP协议,ARP攻击和ARP欺骗
    Java学习 --- 设计模式的原型模式
    Python自带单元测试框架UnitTest,如何生成独立的测试报告?
    java毕业设计——基于java+mysql+socket的即时通讯软件设计与实现(毕业论文+程序源码)——即时通讯软件
    Linux怎么设置中文语言? centos中文乱码的解决办法
    音视频技术-电脑连接调音台时交流声的产生与消除
    【Go实战基础】创建并完成第一个可执行的 go 程序
    ReID的各种Loss的pytorch实现
  • 原文地址:https://blog.csdn.net/hou09tian/article/details/133247984
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号