Как сбросить лабиринт

#python #pygame #maze

Вопрос:

Я пытаюсь создать лабиринт в pygame, но у меня проблема, когда я открываю свой первый лабиринт, все в порядке, но когда я закрываю его и открываю другой, мой лабиринт, 2 лабиринта находятся друг на друге. Я попытался перезапустить свою страницу tkinter и сыграть в pygame.уволился, но ничего не помогло.

Вот мой код:

 import os import random import pygame from random import randint from tkinter import* from PIL import ImageTk, Image    class Player(pygame.sprite.Sprite):    def __init__(self):  super().__init__()    self.image = pygame.image.load('vaisseau.png')  self.rect = self.image.get_rect() #creation du rectangle Player  #Rect(left, top, width, height)  #left: le point ou le rectangle commence pareil pour le top  self.rect.x=23  self.rect.y=27  def move(self, dx, dy):  # Bouge chaque axes separement   if dx != 0:  self.move_single_axis(dx, 0)  if dy != 0:  self.move_single_axis(0, dy)    def move_single_axis(self, dx, dy):    # Move the rect  self.rect.x  = dx  self.rect.y  = dy    # If you collide with a wall, move out based on velocity  for wall in walls:  if self.rect.colliderect(wall.rect):#test si deux rectangles se chevauchent  if dx gt; 0: # Moving right; Hit the left side of the wall  self.rect.right = wall.rect.left  if dx lt; 0: # Moving left; Hit the right side of the wall  self.rect.left = wall.rect.right  if dy gt; 0: # Moving down; Hit the top side of the wall  self.rect.bottom = wall.rect.top  if dy lt; 0: # Moving up; Hit the bottom side of the wall  self.rect.top = wall.rect.bottom     class Wall():    def __init__(self, pos):  walls.append(self)  self.rect = pygame.Rect(pos[0], pos[1], 25, 25)    class labyrinthe_aleatoire():  def __init__(self):  self.niveau = randint(1,3)    def implementation(self):  x=1  y=1  if self.niveau==1:   for row in level1:#pour chaque ligne dans le niveau  for col in row:#pour chaque colonne dans la ligne  if col == "W": # si une colonne est la lettre W  Wall((x,y)) #alors on cree un mur au coordonne x et y  x  = 25 #on ajoute 25 a l'abcisse    y  = 25 #on ajoute 25 a l'ordonne   x = 1 #on revient au point 0 des abcisses   elif self.niveau==2:      for row in level2:#pour chaque ligne dans le niveau  for col in row:#pour chaque colonne dans la ligne  if col == "W": # si une colonne est la lettre W  Wall((x,y)) #alors on cree un mur au coordonne x et y    x  = 25 #on ajoute 25 a l'abcisse  y  = 25 #on ajoute 25 a l'ordonne   x = 1 #on revient au point 0 des abcisses   elif self.niveau==3:    for row in level3:#pour chaque ligne dans le niveau  for col in row:#pour chaque colonne dans la ligne  if col == "W": # si une colonne est la lettre W  Wall((x,y)) #alors on cree un mur au coordonne x et y   x  = 25 #on ajoute 25 a l'abcisse  y  = 25 #on ajoute 25 a l'ordonne   x = 1 #on revient au point 0 des abcisses  def f1():  global fenetre1  fenetre1=Tk()  fenetre1.geometry("750x600")  fenetre1.title("Snake") #titre de la fenêtre  Titre1 = Label(fenetre1, text="MAZE",font=('Fixedsys',55),foreground='white')  Titre1.pack(side= TOP)   texte3 = Label(fenetre1, text="by Alexandre,Aaron,Maxime,Roméo",font=('Fixedsys',13),foreground = 'red',)  texte3.pack(expand = YES )    lan = Button(fenetre1, text ='Niveau Aléatoire',font=("Fixedsys",20),width=17,height=1,command = maze)  lan.pack(expand = YES )    photo = PhotoImage(file = "level1.png")  level1bt= Button(fenetre1, text ='Level 1 ',font=("Fixedsys",20),width=700,height=86,command = niveau1,image = photo)  level1bt.pack(expand = YES)    photo2 = PhotoImage(file = "levelmario.png")  level2bt= Button(fenetre1, text ='Level 2 ',font=("Fixedsys",12),width=700,height=86 ,command = niveau2,image = photo2)  level2bt.pack(expand = YES)    photo3 = PhotoImage(file = "levelamongus.png")  level3bt= Button(fenetre1, text ='Level 3 ',font=("Fixedsys",12),width=700,height=87,command = niveau3,image= photo3)  level3bt.pack(expand = YES)    photo4 = PhotoImage(file = "leveltetris.png")  level4bt= Button(fenetre1, text ='Level 4 ',font=("Fixedsys",12),width=700,height=87,command = maze,image= photo4)  level4bt.place(x = 520 , y = 220)  level4bt.pack(expand = YES)    fenetre1.mainloop()     def MainLevel(x,y,dimension,bg):  running = True  end_rect = pygame.Rect(x,y , 25, 25)  screen = pygame.display.set_mode(dimension)  back = pygame.image.load(bg)   while running:    clock.tick(60)  for e in pygame.event.get():  if e.type == pygame.QUIT:  running = False  if e.type == pygame.KEYDOWN and e.key == pygame.K_ESCAPE:  running = False          # Move the player if an arrow key is pressed  key = pygame.key.get_pressed()  if key[pygame.K_LEFT]:#si la fleche gauche est presse le joueur se deplace de -2 sur les abcisses  player.move(-3, 0)  if key[pygame.K_RIGHT]:#si la fleche droite est presse le joueur se deplace de 2 sur les abcisses  player.move(3, 0)  if key[pygame.K_UP]:#si la fleche du haut est presse le joueur se deplace de -2 sur les ordonne(vers le haut)  player.move(0, -3)  if key[pygame.K_DOWN]:#si la fleche du bas est presse le joueur se deplace de 2 sur les ordonne(vers le bas)  player.move(0, 3)    # Just added this to make it slightly fun ;)   if player.rect.colliderect(end_rect):#test si deux rectangles se chevauchent   restart()   # Draw the scene  screen.fill((0,0,0))  for wall in walls:  pygame.draw.rect(screen, (255, 255, 255), wall.rect)    pygame.draw.rect(screen, (255, 0, 0), end_rect)  screen.blit(player.image,player.rect)    pygame.display.flip()   screen.fill((0,0,0))  restart()    def restart():  fenetre1.destroy()  pygame.quit()  f1()   def niveau1():   labyrinthe.niveau = 1  labyrinthe.implementation()  MainLevel(720,470,(850, 600),"back.png")     def niveau2():   labyrinthe.niveau = 2  labyrinthe.implementation()  MainLevel(1550,575,(1600, 760),"mario_level.png")  def niveau3():   labyrinthe.niveau =3  labyrinthe.implementation()  MainLevel(1550,575,(1760, 800),"mario_level.png")   def maze():  running = True  labyrinthe.implementation()  x=y=w=h=0  screen = 0  bg =0  if labyrinthe.niveau == 1:  x=720  y=470  w=850  h=600  bg="back.png"  screen = pygame.display.set_mode((w,h ))  elif labyrinthe.niveau == 2:  x=1550  y=575  w=1600  h=760  bg="mario_level.png"  screen = pygame.display.set_mode((w,h))      MainLevel(x,y,(w,h),bg)              pygame.init()#   pygame.display.set_caption("Va au carre rouge!")  clock = pygame.time.Clock() walls = [] player = Player() labyrinthe = labyrinthe_aleatoire()  # Holds the level layout in a list of strings. level1= [  "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW",  " W W",  "W WWWW WWWW WWWWWWWWWWWWW W",  "W W W W W W W",  "W W WWWW WWWWWWW WWWW W W",  "W W W W W W",  "W W W W W WWWW WWWWWWW W",  "W W W W W W W",  "W WWWW W W WWWWWWWWWW WWWW",  "W W W W W",  "W WWWWWWWWWWWWWWWW W WWWWWWW",  "W W W",  "WWWW WWWW W W W WWWWWWW W",  "W W W W W W W",  "WWWW WWWW W WWWWWWWWWWWWW W",  "W W W W W",  "W WWWWWWWWWW WWWWWWWWWW WWWW",  "W W W W W W W W",  "W WWWW W W WWWW W WWWW W" ,   "W W W W" ,   "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW"  ] level2 = [    "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", "W W W W W W W W W", "WWWW W WWWW WWWW WWWWWWWWWW W WWWWWWW WWWW WWWW W W W", "W W W W W W W W W W W W W", "WWWW W W W W W W WWWW W WWWW WWWWWWW W WWWWWWW WWWW", "W W W W W W W W", "W WWWW WWWWWWW W WWWW WWWW W WWWWWWW W WWWWWWWWWWWWW W", "W W W W W W W W W W W W", "W WWWWWWW WWWW WWWWWWW W WWWWWWW WWWWWWWWWWWWWWWW WWWW W", "W W W W W W W W W W W W W", "W W WWWW W WWWW W W WWWWWWW WWWW W W WWWWWWW WWWW W", "W W W W W W W W W W W W", "WWWW WWWW WWWW W W WWWW WWWWWWW WWWWWWW W W WWWWWWW W", "W W W W W W W W W W W", "W WWWW WWWWWWW W WWWW WWWWWWW W WWWW WWWW WWWW W W W", "W W W W W W W W W W W W W", "W W W W W WWWW W WWWWWWWWWWWWW WWWWWWW WWWW W W W W", "W W W W W W W W W W W W W W W", "W WWWWWWWWWW WWWW W W WWWW WWWW WWWW W W WWWW WWWW W", "W W W W W W W W W W W W W", "W W WWWW W WWWWWWWWWW WWWW W W W WWWWWWW WWWW WWWWWWW", "W W W W W W W W W W W W W", "W WWWW W W WWWW W WWWW WWWW W W WWWW WWWW W WWWW W", "W W W W W W W W W", "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW",   ]  level3 = [   "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", "W W W W W W W W W", "WWWWWWW W W WWWW WWWW W W W W W WWWWWWWWWWWWWWWWWWWWWW WWWW", "W W W W W W W W W W W W W W", "W W W W W WWWWWWW WWWWWWW W WWWWWWW W W WWWWWWW W WWWW W", "W W W W W W W W W W", "WWWW WWWW WWWW W WWWWWWW W WWWWWWWWWWWWW W WWWWWWW W WWWW W", "W W W W W W W W W W W W W W W W", "W WWWW WWWW WWWWWWW W WWWWWWWWWW WWWWWWW WWWW W W WWWW W W", "W W W W W W W W W", "W WWWWWWW WWWWWWWWWWWWW W WWWWWWWWWWWWW WWWWWWW W WWWW WWWW W", "W W W W W W W W W W W", "W WWWWWWWWWWWWWWWW WWWW WWWW W WWWW WWWW W WWWWWWW WWWW WWWW", "W W W W W W W W W W W W", "W WWWWWWW W WWWW W W WWWWWWWWWW W WWWW W WWWWWWWWWW W W W", "W W W W W W W W W W W W W", "W W WWWW W W WWWW WWWW WWWW WWWW W WWWW W WWWW W WWWW W", "W W W W W W W W W W W W W W W W", "W W WWWWWWW W WWWWWWWWWW W W W WWWWWWWWWW WWWW W WWWW WWWW", "W W W W W W W W W W W W W W W W W", "W W W W WWWWWWW WWWW W WWWWWWW WWWW WWWW W W W W W W W", "W W W W W W W W W W W W", "WWWWWWW W WWWW W W WWWWWWW W W WWWW W W W W WWWW WWWW W", "W W W W W W W W W W W W W W", "WWWW W W WWWWWWWWWW WWWWWWWWWW WWWW W W WWWWWWW W W W WWWW", "W W W W W W W W W W W W W", "W WWWW W W W WWWWWWW WWWWWWW W WWWW WWWWWWW W W WWWWWWW W", "W W W W W W W W W W W W W W W W", "W WWWWWWW WWWWWWW W W W W WWWW WWWWWWWWWW WWWWWWW WWWWWWW W", "W W W W W W W W", "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW",   ]      f1()  

Ответ №1:

Вам нужно только сбросить все ваши глобальные переменные и классы в вашем лабиринте : вы можете сделать это с помощью функции перезапуска, которая закрывает предыдущее окно и сбрасывает переменные.

Вот пример :

 def restart():  global walls,player,labyrinthe,clock  pygame.quit()  pygame.init()    pygame.display.set_caption("Va au carre rouge!")   clock = pygame.time.Clock()  walls = []  player = Player()  labyrinthe = labyrinthe_aleatoire()  

Вам не нужно перезапускать процесс tk f1, так как он выполняется в фоновом режиме

Комментарии:

1. Спасибо за ваши ответы, вы мне очень помогли!!