Python 确保始终有一个供玩家跳跃的平台

Python 确保始终有一个供玩家跳跃的平台,python,random,pygame,Python,Random,Pygame,我正在制作一个玩家必须在平台上跳跃的游戏。然而,我有一个问题,确保总是有一个瓷砖的球员踩上。我是这样创建平台的: p1 = Platforms(random.randint(0, 200), -100) p2 = Platforms(random.randint(200, 400),-250) p3 = Platforms(random.randint(400, 600),-600) p4 = Platforms(random.randint(600, 800),-400) p5 = Platf

我正在制作一个玩家必须在平台上跳跃的游戏。然而,我有一个问题,确保总是有一个瓷砖的球员踩上。我是这样创建平台的:

p1 = Platforms(random.randint(0, 200), -100)
p2 = Platforms(random.randint(200, 400),-250)
p3 = Platforms(random.randint(400, 600),-600)
p4 = Platforms(random.randint(600, 800),-400)
p5 = Platforms(random.randint(800, 1000),-500)
p6 = Platforms(random.randint(800, 1000),-300)
random.randint(n,n)
是播放器的
x
位置,逗号后的数字是播放器的
y
位置。我如何确保屏幕上至少有4个平台,彼此之间的x距离为300 N,y距离为200 N(因为我的窗口大小为1200,600),同时也给人一种随机的印象,它们并不总是在同一位置。谢谢

此外,以下是我的平台类,可供参考:

class Platforms:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.width = 100
        self.height = 20
        self.speed_list = [0.5, 0.8, 1]


    def draw(self):
        pygame.draw.rect(g.d, (3, 124, 23), (self.x, self.y, self.width, self.height))

    def move(self):
        self.y += random.choice(self.speed_list)

    def reset(self):
        if p1.y > 600:
            p1.y = -100 
            p1.x =  random.randint(0, 200)
        if p2.y > 600:
            p2.y = -250
            p2.x = random.randint(200, 400)
        if p3.y > 600:
            p3.y = -600
            p3.x = random.randint(400, 600)
        if p4.y > 600:
            p4.y = -400
            p4.x = random.randint(600, 800)
        if p5.y > 600:
            p5.y = -500
            p5.x = random.randint(800, 1000)
        if p6.y > 600:
            p6.y = -300
            p6.x = random.randint(800, 1000)


    def on_plat(self):
        for plat in g.platlist:
            if (b.x > plat.x) and (b.x < plat.x + plat.width) or (b.x + b.side > plat.x) and (b.x + b.side < plat.x + plat.width):
                if (b.y > plat.y) and (b.y < plat.y + plat.height) or (b.y + b.side > plat.y) and (b.y + b.side < plat.y + plat.height):
                    b.is_jumping = False
                    b.y =  plat.y - b.side

p1 = Platforms(random.randint(0, 200), -100)
p2 = Platforms(random.randint(200, 400),-250)
p3 = Platforms(random.randint(400, 600),-600)
p4 = Platforms(random.randint(600, 800),-400)
p5 = Platforms(random.randint(800, 1000),-500)
p6 = Platforms(random.randint(800, 1000),-300)

g.platlist = [p1, p2, p3, p4, p5, p6]

while True: 
        for plats in g.platlist:
            plats.draw()
            plats.move()
            plats.reset()
            plats.on_plat()
类平台:
定义初始化(self,x,y):
self.x=x
self.y=y
自宽=100
自身高度=20
self.speed_list=[0.5,0.8,1]
def牵引(自):
pygame.draw.rect(g.d.(3,124,23),(self.x,self.y,self.width,self.height))
def移动(自我):
self.y+=随机选择(self.speed\u列表)
def重置(自):
如果p1.y>600:
p1.y=-100
p1.x=random.randint(0200)
如果p2.y>600:
p2.y=-250
p2.x=random.randint(200400)
如果p3.y>600:
p3.y=-600
p3.x=random.randint(400600)
如果p4.y>600:
p4.y=-400
p4.x=random.randint(600800)
如果p5.y>600:
p5.y=-500
p5.x=random.randint(8001000)
如果p6.y>600:
p6.y=-300
p6.x=random.randint(8001000)
平台上的def(自身):
对于g.platlist中的平台:
如果(b.x>plat.x)和(b.xplat.x)和(b.x+b.sideplat.y)和(b.yplat.y)和(b.y+b.side
一个简单的解决方法是做一个循环,然后取最后一个平台位置

比如:

platforms=[]
对于范围(6)中的i:
x、 y=0,0
如果(i>0):
lastplatform=平台[i-1]
x、 y=平台[i-1].x,平台[i-1].y
x+=random.randint(0200)
y+=random.randint(-100100)
平台。附加(平台(x,y))

您可以通过更改y随机数生成的范围来进行额外检查,以防止平台垂直脱离屏幕。

使用
平台类而不是
平台类不是更好吗?目前,如果我们决定总共需要15个平台,会发生什么?@AMC尽管我将其命名为Platfroms,但它拥有一个平台的所有属性。我知道这个问题已经得到了回答,但如果我们决定需要15个平台,我们可以使用for循环在列表中附加15个平台,这就是为什么我将x和y传递给init函数,以便它们可以是唯一具有platformsCan属性的变量。如果有帮助,请验证我的答案:)嗨,我理解代码有困难。你介意解释一下第4行、第5行和第6行是做什么的吗?这会有帮助:)根据我的理解,for的范围从1开始,一直增加到6,所以第4行中的“i”不总是大于0吗?我对从0到x-1的迭代范围感到困惑。所以它给你:0,1,2,3,4,5第4行检查它是否是第一次迭代。第5行是最后一个平台,它位于索引i-1,因为当您将元素附加到数组时,元素将添加到数组的末尾。在6号线,你坐最后一个站台的最后一个位置。