只有当第一只乌龟到达终点线时才会出现“旗帜”

问题描述 投票:0回答:2

[[[enter image description here](https://i.stack.imgur.com/694bC.png)](https://i.stack.imgur.com/1jiZh.png)](https://i.stack.imgur.com/OG6D7.png)

只有当第一只乌龟到达终点线时,才会出现称为“胜利”的“旗帜”。假设当第二只乌龟获胜时,它仍然不会算作胜利,它会等待第一只乌龟到达终点线。我尝试修复它,但我做不到。因此,如果第一只乌龟到达终点线,则称为“胜利”的“旗帜”应该出现在第一只乌龟的前面。第二只和第三只海龟也是如此。但即使第二只或第三只乌龟获胜,当第一只乌龟到达终点线时,程序仍然结束。如果你帮助我,我将非常感激。如果有不明白的地方可以写信给我,我可以给你解释!

import pygame
from random import randint

pygame.init()
clock = pygame.time.Clock()
sc = pygame.display.set_mode((400, 350))
pl = pygame.image.load('pl.png')
t = pygame.image.load('tr.png')
win = pygame.image.load('win.png')
finish = pygame.image.load('finish.png')
r_f = pygame.Rect(360, 60, 60, 60)
x1 = x2 = x3 = 0
winner = 0

while winner == 0:
    sc.blit(pl, (0, 0))
    sc.blit(finish, r_f)

    r_t1 = pygame.Rect(x1, 64, 60, 60)
    r_t2 = pygame.Rect(x2, 160, 60, 60)
    r_t3 = pygame.Rect(x3, 240, 60, 60)

    sc.blit(t, r_t1)
    sc.blit(t, r_t2)
    sc.blit(t, r_t3)

    x1 = x1 + randint(0,3)
    x2 = x2 + randint(0,3)
    x3 = x3 + randint(0,3)
    
    if r_t1.colliderect(r_f):
        winner = 1
        sc.blit(win, (300, 20))
    if r_t2.colliderect(r_f):
        winner = 1
        sc.blit(win, (300, 100))
    if r_t3.colliderect(r_f):
        winner = 1
        sc.blit(win, (300, 200))

    pygame.display.update()
    clock.tick(60)

我尝试修复它,但我做不到。因此,如果第一只乌龟到达终点线,则称为“胜利”的“旗帜”应该出现在第一只乌龟的前面。第二只和第三只海龟也是如此。但即使第二只或第三只乌龟获胜,当第一只乌龟到达终点线时,程序仍然结束。

python pygame rect
2个回答
2
投票

问题在于您为

r_f
定义的区域。您只将终点线区域设置为 60 像素高,因此只有 r_t1 可以与其碰撞。

尝试将

r_f
的矩形更改为:

r_f = pygame.Rect(360, 54, 10, 200)

您还可以使用 .png 图像的大小以编程方式设置其位置和矩形大小,如下所示:

finish = pygame.image.load('finish.png')
finish_w, finish_h = finish.get_size()
r_f = pygame.Rect(360, (350 - finish_h)//2, finish_w, finish_h)

或者如果你想手动调整 y 位置,你可以使用:

r_f = pygame.Rect(360, 54, *finish.get_size())

0
投票

所有评论都漏掉了问题。问题在于

r_f
的形状和位置。它的 y 坐标为 60,宽度和高度均为 60。因此,只有第一个
turtle
可以与它碰撞,因为
turtle
仅沿 X 轴移动,并且存在于 Y 轴上的不同点。我不知道在
pygame
框架中矩形的高度和宽度向哪个方向扩展,但是您需要使
r_f
的高度和
r_f
的 Y 位置从大约 64 延伸到 240,以便所有物体将能够正确地与它碰撞。

© www.soinside.com 2019 - 2024. All rights reserved.