diff --git a/plateau.py b/plateau.py index 61c55886a612e0236567910ffe1e6ab423035ac6..91fa6fb07322170f6b81b548d63cec1d37ff8677 100644 --- a/plateau.py +++ b/plateau.py @@ -4,29 +4,36 @@ class Plateau(): """ à_remplacer_par_ce_que_fait_la_classe Exemple(s) : + $$$ GRILLE = [[" ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " "],[" ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " "]] + $$$ len(GRILLE) + 6 + $$$ GRILLE[0][2] + " " + $$$ p1 = Plateau() + $$$ p1.verifie_position_valide(2, 2, 2, "H") + True $$$ + False + $$$ p1.verifie_position_valide(2, 2, 6, "H") + False + $$$ p1.verifie_position_valide(2, 2, 6, "V") + False + $$$ p1.verifie_position_valide(2, 2, 5, "H") + False + $$$ p1.verifie_position_valide(2, 2, 1, "H") + True """ - def __init__(self, taille:int): + def __init__(self): """ initialiser les attributs Précondition : Exemple(s) : $$$ """ - self.taille = taille - self.GRILLE= [[' ']*taille for _ in range(taille)] + self.vehicules = [] + self.GRILLE= [[" ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " "],[" ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " "]] - def cree_grille_vide(taille: int) -> list[list]: - """ Crée une grille vide de la taille donnée - - Précondition : - Exemple(s) : - $$$ - """ - return [[' ']*taille for _ in range(taille)] - - def afficher_grille(self)->list[list]: """ me permet d'afficher une grille de facon lisible @@ -34,7 +41,7 @@ class Plateau(): Exemple(s) : $$$ """ - separateur = "+___" * self.taille + "+" + separateur = "+___" *6 + "+" for ligne in self.GRILLE: print(separateur) ligne_formate = "| " + " | ".join(ligne) + " |" @@ -48,14 +55,18 @@ class Plateau(): Exemple(s) : $$$ """ + if ligne not in range(0, 7) : + return False + if colone not in range(0, 7): + return False if orientation == "H": # si l'orientation est horizontale ?? - if taille + colone > self.taille: # verifie si la taille ne depasse pas la taille de la grille + if taille + colone > 6: # verifie si la taille ne depasse pas la taille de la grille return False # on arrete de vouloir ajouter la voiture for i in range(taille): # pour chaque indice de taille if self.GRILLE[ligne][colone + i] != ' ':# si la case n'est pas vide return False # on arrete elif orientation == "V": # verticalement - if taille + ligne > self.taille:# verifie si la taille ne depasse pas la taille de la grille + if taille + ligne > 6:# verifie si la taille ne depasse pas la taille de la grille return False for i in range(taille): if self.GRILLE[ligne+i][colone] != ' ': # si la case n'est pas vide @@ -71,22 +82,19 @@ class Plateau(): """ ligne, colone = voiture.position if not self.verifie_position_valide(ligne, colone, voiture.taille, voiture.orientation): # verifie si l'emplacement est valide - print(f"place invalide la voiture de couleur {voiture.couleur} ne peut pas etre ajouter ") + print(f"position invalide pour la vooiture {voiture.couleur}") if voiture.orientation == "H": - - for i in range(voiture.taille): - if colone+i < self.taille: # verifiller si la taille de la voiture ne depasse pas la taille de la grille - self.GRILLE[ligne][colone+i] = voiture.couleur[0] # si c'est horizontal on prend la premiere lettre du nom de la voiture - else: - print(f"Erreur : La voiture dépasse à droite à partir de la position {voiture.position}") + if colone+voiture.taille <= 6: # verifiller si la taille de la voiture ne depasse pas la taille de la grille + self.vehicules.append(voiture) # si la position est valide on l'ajoute a ma liste de vehicule qui peuvent etre ajouter + else: + print(f"position invalide pour la vooiture {voiture.couleur} ") elif voiture.orientation == "V" : - for i in range(voiture.taille): - if ligne+i < self.taille: # verifiller si la taille de la voiture ne depasse pas la taille de la grille - self.GRILLE[ligne+i][colone] = voiture.couleur[0] # si c'est verticale on prend la premiere lettre du nom de la voiture - else: - print(f"Erreur : La voiture dépasse vers le bas à partir de la position {voiture.position}") + if ligne+voiture.taille <= 6 : # verifiller si la taille de la voiture ne depasse pas la taille de la grille + self.vehicules.append(voiture) + else: + print(f"position invalide pour la vooiture {voiture.couleur} ") - def remplir_grille(self): + def remplir_grille(self): # me permet de remplire la grille sous un configuration 1 du jeu """ me donne une grille pre remplis selon comment je le desire @@ -94,47 +102,125 @@ class Plateau(): Exemple(s) : $$$ """ - # cree des voiture - voiture_rouge = Voiture("Rouge", 2, (2, 0), "H") - voiture_bleue = Voiture("Bleue", 3, (2, 2), "V") - voiture_verte = Voiture("Verte", 2, (5, 1), "H") - voiture_noire = Voiture("Noire", 3, (4, 3), "H") - voiture_cendre = Voiture("Cendre", 2, (3, 3), "V") - voiture_orange = Voiture("Orange", 2, (5, 3), "V") - - - # Ajouter les voitures au plateau - self.ajouter_voiture(voiture_rouge) - self.ajouter_voiture(voiture_bleue) - self.ajouter_voiture(voiture_verte) - self.ajouter_voiture(voiture_noire) - self.ajouter_voiture(voiture_cendre) - self.ajouter_voiture(voiture_orange) - - def deplaement_des_voitures(self, voiture:Voiture, direction:str, nb_case_pour_bouger:int)->bool: - """ me permet de gerer les deplacement des voitures + for voiture in self.vehicules: # on parcour toutes les voitures de la liste vhicules + ligne, colone = voiture.position + for i in range(voiture.taille) : + if voiture.orientation == "H": + self.GRILLE[ligne][colone+i] = voiture.couleur[0] + else: + self.GRILLE[ligne+i][colone] = voiture.couleur[0] + print(self.GRILLE) + def deplacement(self, couleur: str): + """ à_remplacer_par_ce_que_fait_la_fonction Précondition : Exemple(s) : $$$ """ - if direction == "H": - if colone+nb_case_pour_bouger> self.taille: - return False - for i in range(nb_case_pour_bouger): - if self.GRILLE[colone+i][ligne] != " ": - return False - elif voiture.direction == "V": - if ligne + nb_case_pour_bouger > self.taille: - return False - for i in range(nb_case_pour_bouger): - if self.GRILLE[colone][ligne+1] != " ": - return False - return True - - - - - - + + + for voiture in self.vehicules: + if voiture.couleur.lower() == couleur.lower(): + ligne, colonne = voiture.position + print(f"🔴 Voiture {voiture.couleur} trouvée à ({ligne}, {colonne})") + + # ✅ Effacer la voiture de l'ancienne position + if voiture.orientation == "H": + for i in range(voiture.taille): + self.GRILLE[ligne][colonne + i] = " " + else: + for i in range(voiture.taille): + self.GRILLE[ligne + i][colonne] = " " + print("🧹 Grille après suppression :") + self.afficher_grille() + + # ✅ Vérifier où elle peut aller + n_ligne, n_colonne = ligne, colonne # Copie de la position actuelle + print(f"🔍 Déplacement en cours pour {voiture.couleur}...") + + if voiture.orientation == "H": + # Tester si elle peut avancer vers la droite + while n_colonne + voiture.taille < 6 and self.GRILLE[ligne][n_colonne + voiture.taille] == " ": + n_colonne += 1 + print(f"➡️ Avance à droite : ({ligne}, {n_colonne})") + + # Tester si elle peut reculer à gauche + if n_colonne == colonne: # Si elle n'a pas avancé + while n_colonne > 0 and self.GRILLE[ligne][n_colonne - 1] == " ": + n_colonne -= 1 + print(f"⬅️ Recule à gauche : ({ligne}, {n_colonne})") + + voiture.position = (ligne, n_colonne) + elif voiture.orientation == "V": + # Tester si elle peut descendre + while n_ligne + voiture.taille < 6 and self.GRILLE[n_ligne + voiture.taille][colonne] == " ": + n_ligne += 1 + print(f"⬇️ Descend : ({n_ligne}, {colonne})") + + # Tester si elle peut monter + if n_ligne == ligne: # Si elle n'a pas descendu + while n_ligne > 0 and self.GRILLE[n_ligne - 1][colonne] == " ": + n_ligne -= 1 + print(f"⬆️ Monte : ({n_ligne}, {colonne})") + + voiture.position = (n_ligne, colonne) + + print(f"🚗 Nouvelle position de {voiture.couleur} : ({voiture.position[0]}, {voiture.position[1]})") + + # ✅ Mise à jour de la grille + self.remplir_grille() + print("🔄 Grille après mise à jour :") + self.afficher_grille() + + +# def deplacement(self, couleur:int): +# """ me permet de deplacer des voitures +# +# Précondition : +# Exemple(s) : +# $$$ +# """ +# +# for voiture in self.vehicules: # on parcour la liste des vehicules +# if voiture.couleur.lower() == couleur.lower():# on cherche la couleur sans se soucier de la casse de l'ecriture de la couleur +# ligne, colone = voiture.position +# n_colone = colone +# n_ligne = ligne +# # Effacer l'ancienne position avant de déplacer la voiture +# if voiture.orientation == "H": +# for i in range(voiture.taille): +# self.GRILLE[ligne][colone + i] = " " +# else: +# for i in range(voiture.taille): +# self.GRILLE[ligne + i][colone] = " " +# +# if voiture.orientation == "H": +# while n_colone + voiture.taille < 6 and self.GRILLE[ligne][n_colone + voiture.taille] == " ": # tanque la voiture peut rester dans les limites de la grille en ne depassant pas la colonne 5 et que +# # que la cas suivante est vide on continue la boucle +# n_colone+= 1 +# if n_colone == colone: # si le deplacement n'as pas eu lieu on essaie vers la gauche +# while n_colone > 0 and self.GRILLE[ligne][n_colone - 1] == " " : # tant que on ne depasse pas la limite de la grille et que la case a gauche est vide on continiue la boucle +# n_colone -= 1 +# voiture.position = (ligne, n_colone) # on reinitialise la position +# elif voiture.orientation == "V": +# while n_ligne + voiture.taille < 6 and self.GRILLE[n_ligne + voiture.taille][colone] == " ": # tanque la voiture peut rester dans les limites de la grille en ne depassant pas la loigne 5 et que +# # que la cas suivante est vide on continue la boucle +# +# n_ligne += 1 +# +# # Si bloqué en bas, essayer en haut +# if n_ligne == ligne: # si le placement n'a pas eu lieu on essaie vers le bas +# while n_ligne > 0 and self.GRILLE[n_ligne - 1][colone] == " ": # tant que on ne depasse pas la limite de la grille et que la case a gauche est vide on continiue la boucle +# n_ligne -= 1 # on reinitialise la ligne +# +# voiture.position = (n_ligne, colone) +# +# self.remplir_grille() +# +# +# + + + + \ No newline at end of file