Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Random pygame中随机平台的生成与显示_Random_Pygame_Generator_Platform - Fatal编程技术网

Random pygame中随机平台的生成与显示

Random pygame中随机平台的生成与显示,random,pygame,generator,platform,Random,Pygame,Generator,Platform,这是我的游戏代码的一部分,使用pygame。我试图生成随机平台(从3个不同的选项),将它们存储在一个列表中,然后将列表中的所有平台blit到屏幕上。我能够正确生成平台形状,但除了第一个平台之外,我无法将它们定位在我想要的位置 blue = (0, 255, 255) black = (0, 0, 0) red = (255, 0, 0) i = 0 c = 0 Done = True globalplatpos = pygame.Surface([395, 30]) globalplat

这是我的游戏代码的一部分,使用pygame。我试图生成随机平台(从3个不同的选项),将它们存储在一个列表中,然后将列表中的所有平台blit到屏幕上。我能够正确生成平台形状,但除了第一个平台之外,我无法将它们定位在我想要的位置

blue = (0, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)

i = 0
c = 0


Done = True
globalplatpos = pygame.Surface([395, 30])
globalplat = globalplatpos.get_rect()

platform_dimensions = plattop, platleft, platw, plath = 0,0,0,0


def play():

#============GAME SETUP============
    SIZE = WIDTH, HEIGHT = 800, 600
    TITLE = "Duality"
    SPEED = 10
    JUMPHEIGHT = 300
    JUMPCOUNT = 0
    JUMPSPEED = 15
    GRAVITY = 10
    STANDING = 1
    JUMPING = 0

    globalplatpos.fill(red)
    platform = globalplat
    platform.bottom = HEIGHT

    PLATFORM = []
    PLATPOS = []

    platstand = True

    screen = pygame.display.set_mode(SIZE)
    caption = pygame.display.set_caption(TITLE)
    clock = pygame.time.Clock()

    mainsprite = pygame.image.load("images\mainsprite.png")
    mainchar = mainsprite.get_rect()
    mainchar.left = 177.5
    mainchar.bottom = 570

    mirrsprite = pygame.image.load("images\mirrsprite.png")
    mirrchar = mirrsprite.get_rect()
    mirrchar.left = mainchar.left + 400
    mirrchar.bottom = mainchar.bottom
#============GAME SETUP============







#============PLATFORM GENERATOR============
    def platform_generator(platform):
        global globalplat
        global globalplatpos
        global platform_dimensions

        globalplat = platform.move(0,-60)
        globalplatpos.fill(red)

        lastplat = PLATFORM[len(PLATFORM) - 1]
        platheight = lastplat.top

        leftpos = pygame.Surface([131, 30])
        leftplat = leftpos.get_rect()

        centrepos = pygame.Surface([100, 30])
        centreplat = centrepos.get_rect() 

        rightpos = pygame.Surface([131, 30]) 
        rightplat = rightpos.get_rect()

        plat_type = random.randrange(0,3)

        if plat_type == 0:
            globalplat = leftplat
            globalplatpos = leftpos
            platform_dimensions = int(globalplat.top + 290), 0, 131, 30

        elif plat_type == 1:
            globalplat = centreplat
            globalplatpos = centrepos
            platform_dimensions = int(globalplat.top + 290), 132, 100, 30

        elif plat_type == 2:
            globalplat = rightplat
            globalplatpos = rightpos
            platform_dimensions = int(globalplat.top + 290), 233, 131, 30

        else:
            pass

        PLATFORM.append(globalplat)
        PLATPOS.append(globalplatpos)       

#============PLATFORM GENERATOR============







#============GAME LOOP============    
    Done = False
    while not Done:
        clock.tick(60)
        fps = clock.get_fps()
        print(fps)
        platform = globalplat
        platpos = globalplatpos



        mirrchar.left = mainchar.left + 406
        mirrchar.bottom = mainchar.bottom

        def update():
            screen = pygame.display.set_mode(SIZE)
            screen.fill(blue)
            screen.blit(mainsprite, mainchar)
            screen.blit(mirrsprite, mirrchar)
            listpos = 0
            pos = PLATPOS[listpos]
            platshape = pygame.Rect(platform_dimensions)
            platform = pygame.draw.rect(screen, red, platshape, 0)
            platpos = globalplatpos
            PLATFORM.append(platform)
            PLATPOS.append(platpos)
            for form in PLATFORM:
                pos = PLATPOS[listpos]
                listpos += 1
                screen.blit(pos, form)

            divpos = pygame.Rect(395, 0, 10, HEIGHT)
            divrect = pygame.draw.rect(screen, black, divpos, 0)
            pygame.display.update()




        global i
        if i == 0:
            globalplat.bottom = HEIGHT
            i = 1
            PLATFORM.append(globalplat)
            PLATPOS.append(globalplatpos)
            screen.blit(globalplatpos, globalplat)

        elif i == 1 and len(PLATFORM) < 10:
            platform_generator(platform)
            plat1 = PLATFORM[0]
            update()

        elif plat1.top > HEIGHT:
            plat1 = PLATFORM[0]
            pos1 = PLATPOS[0]
            del plat1
            del pos1

        else:
            update()





        if mainchar.left > 0: #MOVE LEFT
            if pygame.key.get_pressed()[K_LEFT] or pygame.key.get_pressed()[K_a]:
                mainchar.left -= SPEED
        else:
            mainchar.left = 0

        if mainchar.right < 395: # MOVE RIGHT
            if pygame.key.get_pressed()[K_RIGHT] or pygame.key.get_pressed()[K_d]:
                mainchar.right += SPEED
        else:
            mainchar.right = 395


        jump = pygame.key.get_pressed()[K_SPACE] or pygame.key.get_pressed()[K_UP]


        platstand = mainchar.collidelist(PLATFORM)
        for form in PLATFORM:
            if mainchar.colliderect(form):
                STANDING = 1
                mainchar.bottom = form.top


        if JUMPING == 0:
            if mainchar.collidelist(PLATFORM) > -1:
                STANDING = 1


        if STANDING == 1:
            if jump:
                JUMPING = 1

        if JUMPING == 1:
            if JUMPCOUNT < JUMPHEIGHT/2:
                mainchar.bottom -= JUMPSPEED
                mirrchar.bottom -= JUMPSPEED
                JUMPCOUNT += JUMPSPEED
            elif JUMPCOUNT > JUMPHEIGHT/2 and JUMPCOUNT < JUMPHEIGHT * 0.75:
                mainchar.bottom -= JUMPSPEED/2
                mirrchar.bottom -= JUMPSPEED/2
                JUMPCOUNT += JUMPSPEED
            elif JUMPCOUNT > JUMPHEIGHT * 0.75 and JUMPCOUNT < JUMPHEIGHT:
                mainchar.bottom -= JUMPSPEED/4
                mirrchar.bottom -= JUMPSPEED/4
                JUMPCOUNT += JUMPSPEED
            else:
                JUMPCOUNT = 0
                JUMPING = 0
                STANDING = 0
                jump = False

        if STANDING == 0:
            mainchar.bottom += GRAVITY
            mirrchar.bottom += GRAVITY


        def gameover():
            Done = True

        if mainchar.top > HEIGHT:
            gameover()

        if pygame.key.get_pressed()[K_ESCAPE]:
            escape()

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

        update()
#============GAME LOOP============
blue=(0,255,255)
黑色=(0,0,0)
红色=(255,0,0)
i=0
c=0
完成=正确
globalplatpos=pygame.Surface([395,30])
globalplat=globalplatpos.get_rect()
平台尺寸=平台顶部、平台左侧、平台W、平台H=0,0,0,0
def play():
#=============游戏设置============
尺寸=宽度,高度=800600
TITLE=“二元性”
速度=10
跳跃高度=300
跳数=0
跳跃速度=15
重力=10
站立=1
跳跃=0
全局平台位置填充(红色)
平台=全球平台
平台底部=高度
平台=[]
PLATPOS=[]
平台=正确
screen=pygame.display.set_模式(大小)
caption=pygame.display.set\u标题(TITLE)
clock=pygame.time.clock()
mainsprite=pygame.image.load(“images\mainsprite.png”)
mainchar=mainsprite.get_rect()
mainchar.left=177.5
mainchar.bottom=570
mirrsprite=pygame.image.load(“images\mirrsprite.png”)
mirrchar=mirrsprite.get_rect()
mirrchar.left=mainchar.left+400
mirrchar.bottom=mainchar.bottom
#=============游戏设置============
#================平台生成器============
def平台_发生器(平台):
全球平台
全球平台
全球平台尺寸
globalplat=平台移动(0,-60)
全局平台位置填充(红色)
lastplat=平台[len(平台)-1]
平台高度=最后一个平台顶部
leftpos=pygame.Surface([131,30])
leftplat=leftpos.get_rect()
centrepos=pygame.Surface([100,30])
centreplat=centrepos.get_rect()
rightpos=pygame.Surface([131,30])
rightplat=rightpos.get_rect()
平台类型=随机。随机范围(0,3)
如果平台类型==0:
globalplat=左平台
globalplatpos=leftpos
平台尺寸=int(globalplat.top+290),0,131,30
elif平台类型==1:
全局平面=中心平面
globalplatpos=centrepos
平台尺寸=int(全球平台顶部+290),132,100,30
elif平台类型==2:
globalplat=右平台
globalplatpos=rightpos
平台尺寸=int(全球平台顶部+290),233131,30
其他:
通过
平台附加(globalplat)
平台附加(全局平台)
#================平台生成器============
#===================游戏循环===============================
完成=错误
虽然没有这样做:
时钟滴答(60)
fps=clock.get_fps()
打印(fps)
平台=全球平台
platpos=全球平台
mirrchar.left=mainchar.left+406
mirrchar.bottom=mainchar.bottom
def update():
screen=pygame.display.set_模式(大小)
屏幕填充(蓝色)
screen.blit(mainsprite,mainchar)
屏幕。blit(mirrsprite,mirrchar)
listpos=0
pos=PLATPOS[listpos]
platshape=pygame.Rect(平台尺寸)
platform=pygame.draw.rect(屏幕,红色,平板,0)
platpos=全球平台
PLATFORM.append(平台)
平台位置追加(平台位置)
对于平台中的表单:
pos=PLATPOS[listpos]
listpos+=1
屏幕blit(位置、表格)
divpos=pygame.Rect(395,0,10,HEIGHT)
divrect=pygame.draw.rect(屏幕,黑色,divpos,0)
pygame.display.update()
全球i
如果i==0:
globalplat.bottom=高度
i=1
平台附加(globalplat)
平台附加(全局平台)
屏幕blit(全球平台POS、全球平台)
elif i==1且len(平台)<10:
平台发电机(平台)
平台1=平台[0]
更新()
elif plat1.top>高度:
平台1=平台[0]
pos1=平台POS[0]
德尔普拉特1
德尔波斯1酒店
其他:
更新()
如果mainchar.left>0:#向左移动
如果pygame.key.get_pressed()[K_LEFT]或pygame.key.get_pressed()[K_a]:
mainchar.left-=速度
其他:
mainchar.left=0
如果mainchar.right<395:#向右移动
如果pygame.key.get_pressed()[K_RIGHT]或pygame.key.get_pressed()[K_d]:
mainchar.right+=速度
其他:
mainchar.right=395
jump=pygame.key.get_pressed()[K_SPACE]或pygame.key.get_pressed()[K_UP]
platstand=mainchar.collizeList(平台)
对于平台中的表单:
如果mainchar.colliderect(表单):
站立=1
mainchar.bottom=form.top
如果跳跃==0:
如果mainchar.CollizeList(平台)>-1:
站立=1
如果站立=1:
如果跳转:
跳跃=1
如果跳跃==1:
如果JUMPCOUNTJUMPHEIGHT/2和JUMPCOUNTJUMPHEIGHT*0.75和JUMPCOUNTscreen.blit( position, surface )
screen.blit( surface, position )