如何使随机大小的形状从屏幕的顶部到底部落下?

时间:2017-11-23 14:55:34

标签: python python-3.x pygame python-3.6

我试图用pygame在Python中制作一个类似于游戏的游戏。我对Python很陌生,我不确定如何让对象从屏幕顶部掉落,无论如何,这是我的代码(我使用的是Python 3.6):

import pygame
import random
pygame.init()

BLACK=(0,0,0)
WHITE=(255,255,255)
RED=(255,0,0)
GREEN=(0,255,0)
BLUE=(0,0,255)

width=600
height=650

screen=pygame.display.set_mode((width,height))
pygame.display.set_caption('Videojuego')
done=False
screen.fill(WHITE)
pygame.display.flip()

background_image=pygame.image.load('fondo.jpg').convert()
screen.blit(background_image,[0,0])

player_image=pygame.image.load('rocket.png').convert()
player_image=pygame.transform.scale(player_image,(50,75))
pygame.display.flip()

pygame.mouse.set_visible(False)

count=0
clock=pygame.time.Clock()

rect_x=random.randrange(0,580)
rect_y=random.randrange(0,2)
rect_chx=5

size1=random.randrange(10,70)
size2=random.randrange(15,84)

while(not done):
    for event in pygame.event.get():
    if(event.type==pygame.QUIT):
        print('Quit')
        done=True
    else:
        done=False
    screen.blit(background_image,[0,0])
    player_position=pygame.mouse.get_pos()
    x=player_position[0]
    y=player_position[1]
    screen.blit(player_image,(x,y))
    fig=pygame.draw.rect(screen,RED,[rect_x,rect_y,size1,size2])
    if(rect_y>550 or rect_y<5):
        rect_chx=rect_chx*1
    rect_y+=rect_chx
    pygame.display.flip()
    clock.tick(60)

 pygame.quit()

此代码只会使一个矩形掉落,我不知道如何制作更多矩形。

1 个答案:

答案 0 :(得分:1)

您可以创建一个简单的类Rect,它将封装一个矩形,并将其打印到屏幕中:

class Rect():
    def __init__(self):
        self.x=random.randrange(0,580)
        self.y=random.randrange(0,2)

        self.size_x=random.randrange(10,70)
        self.size_y=random.randrange(15,84)

    def update(self, screen, fall_speed):
        self.y += fall_speed
        pygame.draw.rect(screen, RED, [self.x, self.y, self.size_x, self.size_y])

然后你可以在列表中创建一些Rect: rect_list = [Rect() for _ in range(10)](根据你想要的Rect数改变10)。

最后,你在每个循环中迭代你的列表:

while(not done):
    for event in pygame.event.get():
    if(event.type==pygame.QUIT):
        print('Quit')
        done=True
    screen.blit(background_image,[0,0])
    player_position=pygame.mouse.get_pos()
    x=player_position[0]
    y=player_position[1]
    screen.blit(player_image,(x,y))
    for rect in rect_list:
        # Here 5 is the rect_chx, or fall speed
        rect.update(screen, 5)
    pygame.display.flip()
    clock.tick(60)

这将在开头创建10个rect。您可能希望检测Rect何时位于底部,然后将其从列表中删除(它将不再显示),或者将新的Rect添加到列表中以使它们弹出顶部。

我建议你学习如何使用函数,类,循环和列表来执行基本的python。如果您想创建游戏,即使是最小的游戏,这也是必须的。