Python Pygame-生成随机对象错误

Python Pygame-生成随机对象错误,python,pygame,Python,Pygame,晚上好,亲爱的飞机驾驶员。 我正在用Pygame创建一个游戏。直到现在我还没有遇到任何问题,但现在我希望能得到一些帮助。我正在尝试创建一个函数,每次我调用它时它都会自动生成新的等级(更具体地说,在击败当前等级中的每个敌人之后)。现在,我只生成不与之碰撞的图像,只是为了使级别更漂亮,但我也将使用该函数生成对象,所以这对我来说很重要。所以问题是,我需要不断地更新游戏窗口,很明显,但是这个函数也会不断地生成所有的东西,正如你在下面的视频中看到的那样。我不知道如何让关卡只生成一次,让游戏记住生成的所有图

晚上好,亲爱的飞机驾驶员。 我正在用Pygame创建一个游戏。直到现在我还没有遇到任何问题,但现在我希望能得到一些帮助。我正在尝试创建一个函数,每次我调用它时它都会自动生成新的等级(更具体地说,在击败当前等级中的每个敌人之后)。现在,我只生成不与之碰撞的图像,只是为了使级别更漂亮,但我也将使用该函数生成对象,所以这对我来说很重要。所以问题是,我需要不断地更新游戏窗口,很明显,但是这个函数也会不断地生成所有的东西,正如你在下面的视频中看到的那样。我不知道如何让关卡只生成一次,让游戏记住生成的所有图像(它们的x和y位置),以及如何保持它们的显示,直到我到达另一关卡时再次调用该函数。有什么想法吗

以下是视频:

以下是函数以及您需要了解的有关我的问题的所有信息。你可能更难理解,因为它不是英文的,但翻译会让人烦躁,所以我至少翻译了这两个函数中最重要的内容。

vytvor_level = create_level
sirka_okna = ´width of the game window´
vyska_okna = ´height of the game window´
trava = grass
kytka = flower
aktulizace_okna = ´updating the game window´
okno = window
hrac.animace_hrace = player.player_animation
hrac.animace_dashe = player.dash_animation
import pygame as py
import random
py.init()

sirka_okna = 1000
vyska_okna = 600

okno = py.display.set_mode((sirka_okna, vyska_okna))

py.display.set_caption("Little Hero")

bezi_program = True

# Animace hráče
animaceVpravo = [py.image.load('WR1.png'), py.image.load('WR2.png'), py.image.load('WR3.png'), py.image.load('WR4.png'), py.image.load('WR5.png'), py.image.load('WR6.png')]
animaceVlevo = [py.image.load('WL1.png'), py.image.load('WL2.png'), py.image.load('WL3.png'), py.image.load('WL4.png'), py.image.load('WL5.png'), py.image.load('WL6.png')]
animaceNahoru = [py.image.load('WU1.png'), py.image.load('WU2.png'), py.image.load('WU3.png'), py.image.load('WU4.png'), py.image.load('WU5.png'), py.image.load('WU6.png')]
animaceDolu = [py.image.load('WD1.png'), py.image.load('WD2.png'), py.image.load('WD3.png'), py.image.load('WD4.png'), py.image.load('WD5.png'), py.image.load('WD6.png')]
animaceDash = [py.image.load('DASH1.png'), py.image.load('DASH2.png'), py.image.load('DASH3.png'), py.image.load('DASH4.png'), py.image.load('DASH5.png'), py.image.load('DASH6.png'), py.image.load('DASH7.png')]
animaceStoji = [py.image.load('IDLE1.png'), py.image.load('IDLE2.png'), py.image.load('IDLE3.png'), py.image.load('IDLE4.png'), py.image.load('IDLE5.png'), py.image.load('IDLE6.png')]

# Prostředí
travy = [py.image.load('GRASS1.png'), py.image.load('GRASS2.png'), py.image.load('GRASS3.png'), py.image.load('GRASS4.png'), py.image.load('GRASS5.png'), py.image.load('GRASS6.png')]
kytky = [py.image.load('FLOWERS1.png'), py.image.load('FLOWERS2.png'), py.image.load('FLOWERS3.png'), py.image.load('FLOWERS4.png')]
pozadi = py.image.load('Little_Hero_Pozadi.png')


#------------------------------------------------------

class Hrac:
    def __init__(self, x, y, sirka, vyska, rychlost, sila_dashe):
        self.x = y
        self.y = y
        self.sirka = sirka
        self.vyska = vyska
        self.rychlost = rychlost
        self.sila_dashe = sila_dashe
        self.jde_vpravo = False
        self.jde_vlevo = False
        self.jde_nahoru = False
        self.jde_dolu = False
        self.stoji = True
        self.dashuje = False
        self.pocet_kroku = 0
        self.snimek_dashe = 0 

    def animace_hrace(self, okno):
        if self.pocet_kroku + 1 >= 18:
            self.pocet_kroku = 0
        
        if not self.stoji:
            if self.jde_vlevo:  
                okno.blit(animaceVlevo[hrac.pocet_kroku//3], (round(hrac.x),round(hrac.y)))
                self.pocet_kroku += 1                          
            elif self.jde_vpravo:
                okno.blit(animaceVpravo[hrac.pocet_kroku//3], (round(hrac.x),round(hrac.y)))
                self.pocet_kroku += 1
            elif hrac.jde_nahoru:
                okno.blit(animaceNahoru[hrac.pocet_kroku//3], (round(hrac.x),round(hrac.y)))
                self.pocet_kroku += 1
            else:
                okno.blit(animaceDolu[hrac.pocet_kroku//3], (round(hrac.x),round(hrac.y)))
                self.pocet_kroku += 1
        else:
            okno.blit(animaceStoji[hrac.pocet_kroku//3], (round(hrac.x),round(hrac.y)))
            self.pocet_kroku += 1

    def animace_dashe(self, okno):
        x = self.x + self.sirka
        y = self.y + self.vyska * 0.25
        if self.snimek_dashe + 1 >= 7:
            self.snimek_dashe = 0
            
        if self.dashuje:
            self.snimek_dashe += 0.25
            okno.blit(animaceDash[int(self.snimek_dashe)], (round(x),round(y)))
 
    def pohyb_hrace(self):
        if (klavesa[py.K_a] or klavesa[py.K_LEFT]) and self.x > self.rychlost:
            self.jde_vlevo = True
            self.jde_vpravo = False
            self.jde_nahoru = False
            self.jde_dolu = False
            self.stoji = False
            self.x -= self.rychlost
            if (klavesa[py.K_e]) and self.x > self.sila_dashe:
                self.dashuje = True
                self.x -= self.sila_dashe
            if (klavesa[py.K_w] or klavesa[py.K_UP]) and self.y > self.rychlost:
                hrac.y -= self.rychlost
            if (klavesa[py.K_s] or klavesa[py.K_DOWN]) and self.y > self.rychlost:
                hrac.y += self.rychlost
        elif (klavesa[py.K_d] or klavesa[py.K_RIGHT]) and self.x < sirka_okna - self.sirka - self.rychlost:
            self.jde_vlevo = False
            self.jde_vpravo = True
            self.jde_nahoru = False
            self.jde_dolu = False
            self.stoji = False
            self.x += self.rychlost
            if (klavesa[py.K_e]) and self.x < sirka_okna - self.sila_dashe - self.sirka:
                self.dashuje = True
                self.x += self.sila_dashe
            if (klavesa[py.K_w] or klavesa[py.K_UP]) and self.y > self.rychlost:
                hrac.y -= self.rychlost
            if (klavesa[py.K_s] or klavesa[py.K_DOWN]) and self.y > self.rychlost:
                hrac.y += self.rychlost
        elif (klavesa[py.K_w] or klavesa[py.K_UP]) and self.y > self.rychlost:
            self.jde_vlevo = False
            self.jde_vpravo = False
            self.jde_nahoru = True
            self.jde_dolu = False
            self.stoji = False
            self.y -= hrac.rychlost
            if (klavesa[py.K_e]) and self.y > self.sila_dashe:
                self.dashuje = True
                self.y -= self.sila_dashe           
        elif (klavesa[py.K_s] or klavesa[py.K_DOWN]) and self.y < vyska_okna - self.vyska - self.rychlost:
            self.jde_vlevo = False
            self.jde_vpravo = False
            self.jde_nahoru = False
            self.jde_dolu = True
            self.stoji = False
            self.y += self.rychlost
            if (klavesa[py.K_e]) and self.y < vyska_okna - self.sila_dashe - self.sirka:
                self.dashuje = True
                self.y += self.sila_dashe
        else:
            self.stoji = True
            self.pocet_kroku = 0
            self.dashuje = False
            self.snimek_dashe = 0

  
def vytvor_level():
    for objekt in range(200):
        x = random.randint(0, sirka_okna)
        y = random.randint(0, vyska_okna)
        trava = random.choice(travy)
        okno.blit(trava, (x,y))
        x = random.randint(0, sirka_okna)
        y = random.randint(0, vyska_okna)
        kytka = random.choice(kytky)
        okno.blit(kytka, (x,y))
        
def aktulizace_okna():
    okno.blit(pozadi, (0,0))
    hrac.animace_hrace(okno)
    hrac.animace_dashe(okno)
    vytvor_level()
    py.display.update()
    
hrac = Hrac(10, 458, 40, 40, 3, 20)


tik = py.time.Clock()


while bezi_program:
    tik.tick(60)

    for event in py.event.get():
        if event.type == py.QUIT:
            bezi_program = False

    klavesa = py.key.get_pressed()

    hrac.pohyb_hrace()
        
    #if hrac.x < enemy.x + enemy.sirka and hrac.x + hrac.sirka > enemy.x and hrac.y < enemy.y + enemy.vyska and hrac.y + hrac.vyska > enemy.y:
        #print("Kolize detekována")

    aktulizace_okna()
            
py.quit()
如果需要,这里是完整的代码。

vytvor_level = create_level
sirka_okna = ´width of the game window´
vyska_okna = ´height of the game window´
trava = grass
kytka = flower
aktulizace_okna = ´updating the game window´
okno = window
hrac.animace_hrace = player.player_animation
hrac.animace_dashe = player.dash_animation
import pygame as py
import random
py.init()

sirka_okna = 1000
vyska_okna = 600

okno = py.display.set_mode((sirka_okna, vyska_okna))

py.display.set_caption("Little Hero")

bezi_program = True

# Animace hráče
animaceVpravo = [py.image.load('WR1.png'), py.image.load('WR2.png'), py.image.load('WR3.png'), py.image.load('WR4.png'), py.image.load('WR5.png'), py.image.load('WR6.png')]
animaceVlevo = [py.image.load('WL1.png'), py.image.load('WL2.png'), py.image.load('WL3.png'), py.image.load('WL4.png'), py.image.load('WL5.png'), py.image.load('WL6.png')]
animaceNahoru = [py.image.load('WU1.png'), py.image.load('WU2.png'), py.image.load('WU3.png'), py.image.load('WU4.png'), py.image.load('WU5.png'), py.image.load('WU6.png')]
animaceDolu = [py.image.load('WD1.png'), py.image.load('WD2.png'), py.image.load('WD3.png'), py.image.load('WD4.png'), py.image.load('WD5.png'), py.image.load('WD6.png')]
animaceDash = [py.image.load('DASH1.png'), py.image.load('DASH2.png'), py.image.load('DASH3.png'), py.image.load('DASH4.png'), py.image.load('DASH5.png'), py.image.load('DASH6.png'), py.image.load('DASH7.png')]
animaceStoji = [py.image.load('IDLE1.png'), py.image.load('IDLE2.png'), py.image.load('IDLE3.png'), py.image.load('IDLE4.png'), py.image.load('IDLE5.png'), py.image.load('IDLE6.png')]

# Prostředí
travy = [py.image.load('GRASS1.png'), py.image.load('GRASS2.png'), py.image.load('GRASS3.png'), py.image.load('GRASS4.png'), py.image.load('GRASS5.png'), py.image.load('GRASS6.png')]
kytky = [py.image.load('FLOWERS1.png'), py.image.load('FLOWERS2.png'), py.image.load('FLOWERS3.png'), py.image.load('FLOWERS4.png')]
pozadi = py.image.load('Little_Hero_Pozadi.png')


#------------------------------------------------------

class Hrac:
    def __init__(self, x, y, sirka, vyska, rychlost, sila_dashe):
        self.x = y
        self.y = y
        self.sirka = sirka
        self.vyska = vyska
        self.rychlost = rychlost
        self.sila_dashe = sila_dashe
        self.jde_vpravo = False
        self.jde_vlevo = False
        self.jde_nahoru = False
        self.jde_dolu = False
        self.stoji = True
        self.dashuje = False
        self.pocet_kroku = 0
        self.snimek_dashe = 0 

    def animace_hrace(self, okno):
        if self.pocet_kroku + 1 >= 18:
            self.pocet_kroku = 0
        
        if not self.stoji:
            if self.jde_vlevo:  
                okno.blit(animaceVlevo[hrac.pocet_kroku//3], (round(hrac.x),round(hrac.y)))
                self.pocet_kroku += 1                          
            elif self.jde_vpravo:
                okno.blit(animaceVpravo[hrac.pocet_kroku//3], (round(hrac.x),round(hrac.y)))
                self.pocet_kroku += 1
            elif hrac.jde_nahoru:
                okno.blit(animaceNahoru[hrac.pocet_kroku//3], (round(hrac.x),round(hrac.y)))
                self.pocet_kroku += 1
            else:
                okno.blit(animaceDolu[hrac.pocet_kroku//3], (round(hrac.x),round(hrac.y)))
                self.pocet_kroku += 1
        else:
            okno.blit(animaceStoji[hrac.pocet_kroku//3], (round(hrac.x),round(hrac.y)))
            self.pocet_kroku += 1

    def animace_dashe(self, okno):
        x = self.x + self.sirka
        y = self.y + self.vyska * 0.25
        if self.snimek_dashe + 1 >= 7:
            self.snimek_dashe = 0
            
        if self.dashuje:
            self.snimek_dashe += 0.25
            okno.blit(animaceDash[int(self.snimek_dashe)], (round(x),round(y)))
 
    def pohyb_hrace(self):
        if (klavesa[py.K_a] or klavesa[py.K_LEFT]) and self.x > self.rychlost:
            self.jde_vlevo = True
            self.jde_vpravo = False
            self.jde_nahoru = False
            self.jde_dolu = False
            self.stoji = False
            self.x -= self.rychlost
            if (klavesa[py.K_e]) and self.x > self.sila_dashe:
                self.dashuje = True
                self.x -= self.sila_dashe
            if (klavesa[py.K_w] or klavesa[py.K_UP]) and self.y > self.rychlost:
                hrac.y -= self.rychlost
            if (klavesa[py.K_s] or klavesa[py.K_DOWN]) and self.y > self.rychlost:
                hrac.y += self.rychlost
        elif (klavesa[py.K_d] or klavesa[py.K_RIGHT]) and self.x < sirka_okna - self.sirka - self.rychlost:
            self.jde_vlevo = False
            self.jde_vpravo = True
            self.jde_nahoru = False
            self.jde_dolu = False
            self.stoji = False
            self.x += self.rychlost
            if (klavesa[py.K_e]) and self.x < sirka_okna - self.sila_dashe - self.sirka:
                self.dashuje = True
                self.x += self.sila_dashe
            if (klavesa[py.K_w] or klavesa[py.K_UP]) and self.y > self.rychlost:
                hrac.y -= self.rychlost
            if (klavesa[py.K_s] or klavesa[py.K_DOWN]) and self.y > self.rychlost:
                hrac.y += self.rychlost
        elif (klavesa[py.K_w] or klavesa[py.K_UP]) and self.y > self.rychlost:
            self.jde_vlevo = False
            self.jde_vpravo = False
            self.jde_nahoru = True
            self.jde_dolu = False
            self.stoji = False
            self.y -= hrac.rychlost
            if (klavesa[py.K_e]) and self.y > self.sila_dashe:
                self.dashuje = True
                self.y -= self.sila_dashe           
        elif (klavesa[py.K_s] or klavesa[py.K_DOWN]) and self.y < vyska_okna - self.vyska - self.rychlost:
            self.jde_vlevo = False
            self.jde_vpravo = False
            self.jde_nahoru = False
            self.jde_dolu = True
            self.stoji = False
            self.y += self.rychlost
            if (klavesa[py.K_e]) and self.y < vyska_okna - self.sila_dashe - self.sirka:
                self.dashuje = True
                self.y += self.sila_dashe
        else:
            self.stoji = True
            self.pocet_kroku = 0
            self.dashuje = False
            self.snimek_dashe = 0

  
def vytvor_level():
    for objekt in range(200):
        x = random.randint(0, sirka_okna)
        y = random.randint(0, vyska_okna)
        trava = random.choice(travy)
        okno.blit(trava, (x,y))
        x = random.randint(0, sirka_okna)
        y = random.randint(0, vyska_okna)
        kytka = random.choice(kytky)
        okno.blit(kytka, (x,y))
        
def aktulizace_okna():
    okno.blit(pozadi, (0,0))
    hrac.animace_hrace(okno)
    hrac.animace_dashe(okno)
    vytvor_level()
    py.display.update()
    
hrac = Hrac(10, 458, 40, 40, 3, 20)


tik = py.time.Clock()


while bezi_program:
    tik.tick(60)

    for event in py.event.get():
        if event.type == py.QUIT:
            bezi_program = False

    klavesa = py.key.get_pressed()

    hrac.pohyb_hrace()
        
    #if hrac.x < enemy.x + enemy.sirka and hrac.x + hrac.sirka > enemy.x and hrac.y < enemy.y + enemy.vyska and hrac.y + hrac.vyska > enemy.y:
        #print("Kolize detekována")

    aktulizace_okna()
            
py.quit()
将pygame导入为py
随机输入
py.init()
俄克拉荷马锡卡=1000
vyska_okna=600
okno=py.display.set_模式((sirka_-okna,vyska_-okna))
py.display.set_标题(“小英雄”)
bezi_程序=真
#动物类
animaceVpravo=[py.image.load('WR1.png')、py.image.load('WR2.png')、py.image.load('WR3.png')、py.image.load('WR4.png')、py.image.load('WR5.png')、py.image.load('WR6.png')]
animacevlo=[py.image.load('WL1.png')、py.image.load('WL2.png')、py.image.load('WL3.png')、py.image.load('WL4.png')、py.image.load('WL5.png')、py.image.load('WL6.png')]
animaceNahoru=[py.image.load('WU1.png')、py.image.load('WU2.png')、py.image.load('WU3.png')、py.image.load('WU4.png')、py.image.load('WU5.png')、py.image.load('WU6.png')]
animaceDolu=[py.image.load('WD1.png')、py.image.load('WD2.png')、py.image.load('WD3.png')、py.image.load('WD4.png')、py.image.load('WD5.png')、py.image.load('WD6.png')]
animaceDash=[py.image.load('DASH1.png')、py.image.load('DASH2.png')、py.image.load('DASH3.png')、py.image.load('DASH4.png')、py.image.load('DASH5.png')、py.image.load('DASH6.png')、py image.load('DASH7.png')]
animaceStoji=[py.image.load('IDLE1.png')、py.image.load('IDLE2.png')、py.image.load('IDLE3.png')、py.image.load('IDLE4.png')、py.image.load('IDLE5.png')、py.image.load('IDLE6.png')]
#普罗斯蒂德
travy=[py.image.load('GRASS1.png')、py.image.load('GRASS2.png')、py.image.load('GRASS3.png')、py.image.load('GRASS4.png')、py.image.load('GRASS5.png')、py.image.load('GRASS6.png')]
kytky=[py.image.load('FLOWERS1.png')、py.image.load('FLOWERS2.png')、py.image.load('FLOWERS3.png')、py.image.load('FLOWERS4.png')]
pozadi=py.image.load('Little\u Hero\u pozadi.png')
#------------------------------------------------------
Hrac类:
定义初始值(self、x、y、sirka、vyska、rychlost、sila_dash):
self.x=y
self.y=y
self.sirka=sirka
self.vyska=vyska
self.rychlost=rychlost
self.sila\u dash=sila\u dash
self.jde_vpravo=False
self.jde_vlevo=False
self.jde_nahoru=False
self.jde_dolu=False
self.stoji=True
self.dashuje=False
self.pocet_kroku=0
self.snimek_dash=0
def animace_hrace(赛尔夫,俄克拉何马州):
如果self.pocet_kroku+1>=18:
self.pocet_kroku=0
如果不是self.stoji:
如果self.jde_vlevo:
okno.blit(animaceVlevo[hrac.pocet_kroku//3],(圆形(hrac.x),圆形(hrac.y)))
self.pocet_kroku+=1
elif self.jde_vpravo:
okno.blit(animaceVpravo[hrac.pocet_kroku//3],(圆形(hrac.x),圆形(hrac.y)))
self.pocet_kroku+=1
elif hrac.jde_nahoru:
okno.blit(animaceNahoru[hrac.pocet_kroku//3],(圆形(hrac.x),圆形(hrac.y)))
self.pocet_kroku+=1
其他:
okno.blit(animaceDolu[hrac.pocet_kroku//3],(圆形(hrac.x),圆形(hrac.y)))
self.pocet_kroku+=1
其他:
okno.blit(animaceStoji[hrac.pocet_kroku//3],(圆形(hrac.x),圆形(hrac.y)))
self.pocet_kroku+=1
def animace_dash(self,okno):
x=self.x+self.sirka
y=self.y+self.vyska*0.25
如果self.snimek_dash+1>=7:
self.snimek_dash=0
如果self.dashuje:
self.snimek_dash+=0.25
okno.blit(animaceDash[int(self.snimek_dash)],(第(x)轮,第(y)轮)
def pohyb_hrace(自身):
如果(klavesa[py.K_a]或klavesa[py.K_左])和self.x>self.rychlost:
self.jde_vlevo=True
self.jde_vpravo=False
self.jde_nahoru=False
self.jde_dolu=False
self.stoji=False
self.x-=self.rychlost
如果(klavesa[py.K_e])和self.x>self.sila_dash:
self.dashuje=True
self.x-=self.sila_dash
如果(klavesa[py.K_w]或klavesa[py.K_UP])和self.y>self.rychlost:
hrac.y-=自身rychlost
如果(klavesa[py.K_s]或klavesa[py.K_DOWN])和self.y>self.rychlost:
hrac.y+=self.rychlost
elif(klavesa[py.K_d]或klavesa[py.K_RIGHT])和self.x