Pygame中Sprite的使用方法6-6

4 重新绘制界面

每次碰撞发生后,程序界面需要重新绘制,代码如下所示。

python 复制代码
screen.fill(WHITE)
all_sprites_list.draw(screen)
pygame.display.flip()

其中,screen表示程序的整个界面,将其绘制为白色背景;之后通过all_sprites_list.draw()绘制碰撞后剩下的方块(碰撞的方块已经在group中删除);最后显示重新绘制的内容。

5 完整代码

以上程序的完整代码如下所示。

python 复制代码
import pygame, random
from pygame.locals import *

class Block(pygame.sprite.Sprite):
    def __init__(self, color, width, height):
        super().__init__()
        self.image = pygame.Surface((width, height))
        self.image.fill(color)
        self.rect = self.image.get_rect()

GREEN = (0, 255, 0)
RED = (255, 0, 0)
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
screen_width = 1000
screen_height = 600
done = False
score = 0
clock = pygame.time.Clock()

pygame.init()
screen = pygame.display.set_mode((screen_width, screen_height))
block_list = pygame.sprite.Group()
all_sprites_list = pygame.sprite.Group()
block_bad_list = pygame.sprite.Group()

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

for i in range(10):
    block = Block(RED, 20 ,15)
    block.rect.x = random.randrange(screen_width)
    block.rect.y = random.randrange(screen_height)
    block_bad_list.add(block)
    all_sprites_list.add(block)
    
player = Block(BLUE, 20, 15)
all_sprites_list.add(player)

while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

    screen.fill(WHITE)
    pos = pygame.mouse.get_pos()
    player.rect.x = pos[0]
    player.rect.y = pos[1]

    blocks_hit_list = \
    pygame.sprite.spritecollide(player, block_list, True)
    for block in blocks_hit_list:
        score += 1
        print('当前分数为:'+str(score))

    blocks_hit_list = \
    pygame.sprite.spritecollide(player, block_bad_list, True)
    for block in blocks_hit_list:
        score -= 1
        print('当前分数为:'+str(score))
        
    all_sprites_list.draw(screen)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
    
相关推荐
禾乃儿_xiuer3 天前
《Python制作动态爱心粒子特效》
开发语言·python·生活·pygame·爱心代码·python表白·初学者入门
虞书欣的65 天前
Python小游戏27——飞翔的小鸟
开发语言·人工智能·游戏·pycharm·pygame
虞书欣的67 天前
Python小游戏24——小恐龙躲避游戏
开发语言·python·游戏·小程序·pygame
不太爱喝水10 天前
外星人入侵
开发语言·python·pygame
狂奔solar10 天前
DQN强化训练agent玩是男人就下xx层小游戏
python·pygame·dqn 强化
星和月10 天前
Python——飞机大战
python·pygame
狐凄10 天前
Python练习19
开发语言·python·pygame
虞书欣的611 天前
Python小游戏25——黄金矿工
开发语言·人工智能·游戏·小程序·pygame
其木王·王子11 天前
0. 渲染游戏画面
python·游戏·pygame
2301_8112123311 天前
python数据结构操作与可视化的应用
数据结构·python·信息可视化·django·virtualenv·pygame·tornado