Я хочу, чтобы игрок уклонялся от 2 прямоугольников, но они появляются параллельно друг другу - PullRequest
3 голосов
/ 20 марта 2019

Я пытаюсь сделать игру про уклонение от машины в pygame, я только изучил python и изучаю pygame.

Я сделал функцию вещей, которые вызывали a раз с различными параметрами оси x, чтобы нарисовать прямоугольники, так как я хочу, чтобы игрок уклонился от 2-х риток. Но я не могу придумать, чтобы отложить вторую, чтобы они не пришли в то же время.

Я хочу, чтобы секунда была нарисована после некоторой задержки, в основном с некоторой разницей в их оси y. прикрепив сюда изображение и код

enter image description here

import pygame
import time
import random

pygame.init()

display_width=600
display_height=800

black=(0,0,0)
white=(255,255,255)
red=(255,0,0)
green=(0,255,0)
blue=(0,0,255)
brown=(165,42,42)

car_width=60

gameDisplay=pygame.display.set_mode((display_width,display_height))

pygame.display.set_caption("Lets Race")

bg = pygame.image.load("road.png")

clock=pygame.time.Clock()

CarImg=pygame.image.load("Image.png")

pygame.mouse.set_visible(1)



def things_dodged(count):
    font=pygame.font.SysFont(None,40)
    text=font.render("Score "+str(count),True,black)
    gameDisplay.blit(text,(20,20))

def car(x,y):
    gameDisplay.blit(CarImg,(x,y))

def things(thingx,thingy,thingw,thingh,color):
    color=brown

    pygame.draw.rect(gameDisplay,color,[thingx,thingy,thingw,thingh])

def text_objects(text,font):
    textSurface=font.render(text, True, white)
    return textSurface, textSurface.get_rect()

def message_display(text):
    largeText=pygame.font.Font('freesansbold.ttf',80)
    TextSurf, TextRect=text_objects(text, largeText)
    TextRect.center=((display_width/2),(display_height/2))
    gameDisplay.blit(TextSurf, TextRect)

    pygame.display.update()

    time.sleep(2)

    game_loop()

def crash():
    message_display('Game Over')

def game_loop():
    x=(display_width*0.48)
    y=(display_height*0.79)

    x_change=0

    thing_startx=random.randrange(0,display_width-100)
    thing_startx2=random.randrange(0,display_width-100)
    thing_starty=-600
    thing_speed=9
    thing_width=100
    thing_height=100

    dodged=0

    gameExit=False

    while not gameExit:

        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                pygame.quit()
                quit()

            if event.type==pygame.KEYDOWN:
                if event.key==pygame.K_LEFT:
                    x_change=-15
                elif event.key==pygame.K_RIGHT:
                    x_change=15

            if event.type==pygame.KEYUP:
                if event.key==pygame.K_LEFT or event.key==pygame.K_RIGHT:
                    x_change=0

        x+=x_change

        #gameDisplay.fill(white)
        gameDisplay.blit(bg, (0, 0))

        #things(thingx,thingy,thingw,thingh,color)
        things(thing_startx,thing_starty,thing_width,thing_height,black)
        things(thing_startx2,thing_starty,thing_width,thing_height,black)


        thing_starty+=thing_speed
        car(x,y)
        things_dodged(dodged)

        if x>display_width-car_width or x<0:
            crash()
        if thing_starty>display_height:
            thing_starty=0-thing_height
            thing_startx=random.randrange(0,display_width-100)
            dodged+=1
            if thing_speed<15:
                thing_speed+=0.15

        if y<thing_starty+thing_height:
            pass

            if x>thing_startx and x<thing_startx+thing_width or x+car_width>thing_startx and x+car_width<thing_startx+thing_width:
                crash()

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

game_loop()
pygame.quit()
quit()

1 Ответ

1 голос
/ 20 марта 2019

2 прямоугольника имеют 2 разные координаты х (thing_startx, thing_startx2). У них тоже должно быть 2 разных координаты y.

Создать список «вещей», который в основном представляет собой список позиций (координаты x и y):

thing_list = [
    [random.randrange(0,display_width-100), -600],
    [random.randrange(0,display_width-100), -300]]
thing_speed=9
thing_width=100
thing_height=100

Работа со списком вещей в основном цикле.
Далее я рекомендую использовать pygame.Rect.colliderect() для проверки на столкновения.

while not gameExit:

    # [...]

    for thing in thing_list:
        things(*thing, thing_width, thing_height, black)
        thing[1] += thing_speed

    car(x,y)
    things_dodged(dodged)

    if x>display_width-car_width or x<0:
        crash()

    carRect = pygame.Rect(x, y, car_width, 1)
    for thing in thing_list:
        if thing[1] > display_height:
            thing[0] = random.randrange(0,display_width-100)
            thing[1] = 0-thing_height;
            dodged += 1
            thing_speed = min(thing_speed+0.15, 15)
        if carRect.colliderect(pygame.Rect(*thing, thing_width, thing_height)):
            crash()

    pygame.display.update()
    clock.tick(100)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...