pygame静态方块收集最简单鼠标控制核心代码.py

"""静态方块收集最简单鼠标控制核心代码.py
"""
import pygame
from random import randrange
 
# 定义颜色常量
BLACK = (  0,   0,   0)
WHITE = (255, 255, 255)
RED   = (255,   0,   0)
 
class Block(pygame.sprite.Sprite):
    """ 方块类,继承自角色类  """
 
    def __init__(self, color, width, height,selfgroup=None,allgroup=None):
        """ 初始化方法,先调用父类的同名方法,然后创建image. """
 
        # 调用基类的构造器
        super().__init__()
 
        # 创建图像,它是一个面,也可以用pygame.image.load加载漂亮的图形
        self.image = pygame.Surface([width, height])
        self.image.fill(color)
 
        # 把图形的矩形对象做为实例化后对象的坐标
        self.rect = self.image.get_rect()
        # 为每个方块设置一个随机的坐标
        self.rect.center = randrange(screen_width),randrange(screen_height)
        if selfgroup!=None:selfgroup.add(self)
        if allgroup!=None:allgroup.add(self)
 
# 初始化pygame引擎
pygame.init()
 
# 设定屏幕宽度和高度,创建屏幕对象
screen_width = 700
screen_height = 400
screen = pygame.display.set_mode([screen_width, screen_height])
pygame.display.set_caption("静态方块收集最简单鼠标控制核心代码")
 
# 方块“列表”,由组来创建. 
block_list = pygame.sprite.Group()
 
# 所有角色列表,由Group来创建。用来统一重画所有角色.
all_sprites_list = pygame.sprite.Group()

# 生成一些方块 ,用列表推导式,扁平胜于嵌套
[ Block(BLACK, 20, 15,block_list,all_sprites_list) for i in range(50)] 
 
# 创建一个红色的小方块
player = Block(RED, 20, 15)
all_sprites_list.add(player)
 
# 用户单击了关闭按钮会触发QUIT事件,把此变量设为True会退出while循环
# 所以,它初始化的值为False.
done = False
 
# 设置屏幕刷新率的时钟对象
clock = pygame.time.Clock()
 
score = 0
 
# -------- 主程序循环 -----------
while not done:
    for event in pygame.event.get(): 
        if event.type == pygame.QUIT: done = True # 扁平胜于嵌套
 
    # 给屏幕填充为白色
    screen.fill(WHITE)
 
    # 把鼠标指针的坐标设为角色中心点坐标,这样就能用鼠标指针操控它了
    player.rect.center = pygame.mouse.get_pos() 
 
    # 检测是否玩家方块和其它方块有碰撞
    blocks_hit_list = pygame.sprite.spritecollide(player, block_list, True)
 
    # 遍历每个碰到的方块,加分
    for block in blocks_hit_list:
        score += 1
        print(score)
 
    # 重画所有角色
    all_sprites_list.draw(screen)
 
    # 更新整个屏幕显示
    pygame.display.flip()
 
    # 限定帧率为60
    clock.tick(60)
 
pygame.quit()