只有当第一只乌龟到达终点线时,才会出现称为“胜利”的“旗帜”。假设当第二只乌龟获胜时,它仍然不会算作胜利,它会等待第一只乌龟到达终点线。我尝试修复它,但我做不到。因此,如果第一只乌龟到达终点线,则称为“胜利”的“旗帜”应该出现在第一只乌龟的前面。第二只和第三只海龟也是如此。但即使第二只或第三只乌龟获胜,当第一只乌龟到达终点线时,程序仍然结束。如果你帮助我,我将非常感激。如果有不明白的地方可以写信给我,我可以给你解释!
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)
我尝试修复它,但我做不到。因此,如果第一只乌龟到达终点线,则称为“胜利”的“旗帜”应该出现在第一只乌龟的前面。第二只和第三只海龟也是如此。但即使第二只或第三只乌龟获胜,当第一只乌龟到达终点线时,程序仍然结束。
问题在于您为
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())
所有评论都漏掉了问题。问题在于
r_f
的形状和位置。它的 y 坐标为 60,宽度和高度均为 60。因此,只有第一个 turtle
可以与它碰撞,因为 turtle
仅沿 X 轴移动,并且存在于 Y 轴上的不同点。我不知道在 pygame
框架中矩形的高度和宽度向哪个方向扩展,但是您需要使 r_f
的高度和 r_f
的 Y 位置从大约 64 延伸到 240,以便所有物体将能够正确地与它碰撞。