如何让第二辆车说第二名



我想做的是

所以我基本上想做的是,每次一辆车通过终点线时,它都会说哪辆车有一辆,但我要做的是每次第一辆车赢了,第二辆车通过了终点线时我想说的是,哪辆车在上获得了第二名和第三名,以此类推

import pygame, random
pygame.init()
# music
music = pygame.mixer.music.load(“image/Led Zeppelin - Rock And Roll (Alternate Mix) (Official Music Video).mp3”)
pygame.mixer.music.play(-1)
#Setting up our colors that we are going to use
GREEN = (20, 255, 140)
GREY = (210, 210, 210)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
PURPLE = (255, 0, 255)
BLACKWHITE =(96, 96, 96)
SCREENWIDTH = 400
SCREENHEIGHT = 500
size = (SCREENWIDTH, SCREENHEIGHT)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Car Racing")
Icon = pygame.image.load("image/redca_iconr.png")
pygame.display.set_icon((Icon))
# This will be a list that will contain all the sprites we intend to use in our game.
#all_sprites_list = pygame.sprite.Group()
#player
playerIMG = pygame.image.load("image/red_racecar.png")
playerX = 250
playerY = 450
playerCar_position = 0

#player2
playerIMG_two = pygame.image.load("image/greencar.png")
playerX_two = 150
playerY_two = 450
playerCar_position_two = 0

#player3
playerIMG_three = pygame.image.load("image/Orangecar.png")
playerX_three = 50
playerY_three = 450
playerCar_position_three = 0
#player4
playerIMG_four = pygame.image.load("image/yellow_car.png")
playerX_four = 200
playerY_four = 450
playerCar_position_four = 0
#Putting cars to the screen
def player(x, y):
screen.blit(playerIMG, (x, y))
def player_two(x, y):
screen.blit(playerIMG_two, (x, y))
def player_three(x, y):
screen.blit(playerIMG_three, (x, y))
def player_four(x, y):
screen.blit(playerIMG_four, (x, y))

# Main game loop
run = True
clock = pygame.time.Clock()
#TIP - lots of our actions take place in our while loop cause we want the function/program to run consistently
while run:
# Drawing on Screen
screen.fill(GREEN)
# Draw The Road
pygame.draw.rect(screen, GREY, [40, 0, 300, 500])
# Draw Line painting on the road
pygame.draw.line(screen, WHITE, [185, 0], [185, 500], 5)
#Finish line
pygame.draw.rect(screen, BLACKWHITE, [50, 50, 280, 40])
pygame.draw.line(screen, WHITE, [50, 70], [330, 70], 5)
font = pygame.font.SysFont("Impact", 35)
text = font.render("Finish line!", 1, (150, 50, 25))
screen.blit(text, (195 - (text.get_width() / 2), 15))

for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
# Number of frames per secong e.g. 60
clock.tick(60)
keys = pygame.key.get_pressed()
if keys[pygame.K_1]:
playerCar_position = -0.1
if keys[pygame.K_q]:
playerCar_position = 0.1
if keys[pygame.K_2]:
playerCar_position_two = -0.1
if keys[pygame.K_w]:
playerCar_position_two = 0.1
if keys[pygame.K_3]:
playerCar_position_three = -0.1
if keys[pygame.K_e]:
playerCar_position_three = 0.1
if keys[pygame.K_4]:
playerCar_position_four = -0.1
if keys[pygame.K_r]:
playerCar_position_four = 0.1
# our functions
playerY += playerCar_position
playerY_two += playerCar_position_two
playerY_three += playerCar_position_three
playerY_four += playerCar_position_four
player(playerX, playerY)
player_two(playerX_two, playerY_two)
player_three(playerX_three, playerY_three)
player_four(playerX_four, playerY_four)
finish_line_rect = pygame.Rect(50, 70, 235, 32)

**这是我一直试图让代码以我想要的方式工作的地方,但我还没有运气,请帮忙。**

# Did anyone cross the line?
if (finish_line_rect.collidepoint(playerX, playerY)):
font2 = pygame.font.SysFont("Papyrus", 45)
text2 = font2.render("Red Car Won!!", 5, (255, 99, 7))
screen.blit(text2, (135 - (text2.get_width() / 5), 95))
pygame.display.flip()
print("Player (one) has crossed into finish line!")

elif (finish_line_rect.collidepoint(playerX_two , playerY_two)):
print("Player one has crossed into finish line first other car lost!")
font2 = pygame.font.SysFont("Papyrus", 45)
text2 = font2.render("Green Car Lost!!", 5,  (34, 139, 34))
screen.blit(text2, (135 - (text2.get_width() / 5), 95))
pygame.display.flip()
elif (finish_line_rect.collidepoint(playerX , playerY)):
print("Player two has crossed into finish line first other car lost!")
font2 = pygame.font.SysFont("Papyrus", 45)
text2 = font2.render("Red Car Lost!!", 5, (255, 99, 7))
screen.blit(text2, (135 - (text2.get_width() / 5), 95))
pygame.display.flip()
elif (finish_line_rect.collidepoint(playerX_two, playerY_two)):
print("Player two has crossed into finish line first other car lost!")
font2 = pygame.font.SysFont("Papyrus", 45)
text2 = font2.render("Green Car Won!!", 5, (255, 99, 7))
screen.blit(text2, (135 - (text2.get_width() / 5), 95))
pygame.display.flip()

# Refresh Screen
pygame.display.flip()




pygame.quit()

所以,你得到的代码是有效的,唯一的问题是当汽车与终点线相交时,你只是在屏幕上闪电式地显示文本

因此,在每一帧的屏幕上都有一个字符串,当一辆车过线时,将字符串更改为该车的

#put these outside the game loop
finish_text = ""
font2 = pygame.font.SysFont("Papyrus", 45)
players_finished = 0
placings = ["1st", "2nd", "3rd", "4th"]

while running: #game loop
...
# Did anyone cross the line?
if (finish_line_rect.collidepoint(playerX, playerY)):
if finish_text[:9] != "Player 1": #so it doesnt do this every frame the car is intersecting
finish_text = "Player 1 is " + placings[players_finished]
players_finished += 1
print("Player (one) has crossed into finish line!")

elif (finish_line_rect.collidepoint(playerX_two , playerY_two)):
if finish_text[:9] != "Player 2":
print("Player one has crossed into finish line first other car lost!")
finish_text = "Player 2 is " + placings[players_finished]
players_finished += 1
elif (finish_line_rect.collidepoint(playerX , playerY)):
if finish_text[:9] != "Player 3":
print("Player two has crossed into finish line first other car lost!")
finish_text = "Player 3 is " + placings[players_finished]
players_finished += 1
elif (finish_line_rect.collidepoint(playerX_two, playerY_two)):
if finish_text[:9] != "Player 4":
print("Player two has crossed into finish line first other car lost!")
finish_text = "Player 4 is " + placings[players_finished]
players_finished += 1

if finish_text != "": #test to see if there is anything to put on screen
text2 = font2.render(finish_text, 5, (255, 99, 7))
screen.blit(text2, (135 - (text2.get_width() / 5), 95))
pygame.display.flip()

注意。还没有测试过

我从未使用过pygame,所以不知道是否有内置函数。然而,你可以很容易地做一个计数器。

#this is all in your while loop
if playerY<50 or playerY_two<50 or playerY_three<50 or playerY_four<50:
count+=1
if count == 1:
if playerY<50:
print('playerY first place')
playerY=10000
if playerY_two<50:
print('playerY_two first place')
playerY_two=100000
if playerY_three<50:
print('playerY_three first place')
playerY_three=100000
if playerY_four<50:
print('playerY_four first place')
playerY_four=1000000
if count == 2:
if playerY<50:
print('playerY second place')
playerY=10000
if playerY_two<50:
print('playerY_two seoncd place')
playerY_two=100000
if playerY_three<50:
print('playerY_three second place')
playerY_three=100000
if playerY_four<50:
print('playerY_four second place')
playerY_four=1000000
if count == 3:
if playerY<50:
print('playerY third place')
playerY=10000
if playerY_two<50:
print('playerY_two third place')
playerY_two=100000
if playerY_three<50:
print('playerY_three third place')
playerY_three=100000
if playerY_four<50:
print('playerY_four third place')
playerY_four=1000000
if count == 4:
if playerY<50:
print('playerY 4th place')
playerY=10000
if playerY_two<50:
print('playerY_two 4th place')
playerY_two=100000
if playerY_three<50:
print('playerY_three 4th place')
playerY_three=100000
if playerY_four<50:
print('playerY_four 4th place')
playerY_four=1000000
break   

您可以创建一个类/函数,将上面的全部内容写在4行到5行中,但总体思路是您希望打印出谁越过了终点线,但您只希望打印出一次。

最新更新