如何使一个矩形的副本留在屏幕上绘制和不渗透在皮格姆

2024-06-24 11:55:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个类似俄罗斯方块的益智游戏,它包括放置方块。我把它设置成当程序运行时,一个块在一个围起来的区域上生成,并且该块每1000ms向下移动一次。它可以使用左、右或下移动到不同的方向,当它到达底部边界时,y位置重置为默认值,并且该块的“副本”被放置在它以前的位置。我试图弄清楚如何使副本保持绘制状态,以及如何使副本块不可渗透,因为主块在放置后实际上可以占据与副本相同的位置。你知道吗

我对python和pygame非常陌生,所以我想做的就是创建一个名为copyCount的变量,每当绘制一个副本时,在该计数上添加一个数字,并为范围(copyCount)中的每个数字绘制一个矩形。否则,尽管,我是空白。也不知道如何使所述复制块不可渗透(检查复制块和主块的Y位置?)你知道吗

我本以为这些积木会一直画在屏幕上,但事实并非如此。你知道吗


Tags: 程序运行游戏区域状态副本绘制数字方向
1条回答
网友
1楼 · 发布于 2024-06-24 11:55:28

可以通过^{}创建^{}的副本。你知道吗

为最后放置的矩形创建一个列表。当player到达地面时,将.copy()player坑放入列表。 绘制副本列表(copylist)。你知道吗

copylist = []
while run:

    # [...]

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        elif event.type == moveDownEvent:
            if player.y < 390:
                player.y += vel
            elif player.y >= 390:
                copylist.append(player.copy()) # < - copy rectangle
                player.y = 50  

    # [...]

    # draw copies
    for c in copylist:    
        pygame.draw.rect(win,(40,100,0),c)

    pygame.draw.rect(win, (100,40,0), player)
    pygame.display.update()

注意,copylist可以用来检查与播放器的冲突。把新积木放在地上积木的上面。矩形的碰撞可以通过^{}^{}检查:

例如

while run:
    pygame.time.delay(100)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        elif event.type == moveDownEvent:
            if player.y >= 390 or player.move(0, vel).collidelist(copylist) >= 0:
                copylist.append(player.copy())
                player.y = 50 
            else:
                player.y += vel

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player.x > 168 and player.move(-vel, 0).collidelist(copylist) < 0:
        player.x -= vel
    if keys[pygame.K_RIGHT] and player.x < 330 and player.move(vel, 0).collidelist(copylist) < 0:
        player.x += vel
    if keys[pygame.K_DOWN] and player.y < 390:
        if player.move(0, vel).collidelist(copylist) >= 0:
            copylist.append(player.copy())
            player.y = 50 
        else:
            player.y += vel

    # [...]

相关问题 更多 >