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