mirror of
https://github.com/Fare-spec/cours.git
synced 2025-12-07 02:40:38 +00:00
qdj
This commit is contained in:
263
file/old/LSC.py
263
file/old/LSC.py
@@ -1,263 +0,0 @@
|
||||
"""
|
||||
Librairie des Listes Simplement Chaînées.
|
||||
|
||||
Elle met à distribution cette structure de données et son interface.
|
||||
|
||||
@author: L. JOANNIC
|
||||
"""
|
||||
|
||||
# ############################################################################
|
||||
|
||||
|
||||
class Liste_Simplement_Chainee(object):
|
||||
"""
|
||||
Classe des Listes Simplement Chainees.
|
||||
|
||||
Attributs
|
||||
- _tete : None si vide, Maillon sinon.
|
||||
|
||||
Méthodes
|
||||
- est_vide
|
||||
- ajouter_en_tete
|
||||
- tete
|
||||
- queue
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
"""
|
||||
Construire une instance de Liste Simplement Chainee.
|
||||
|
||||
Returns
|
||||
-------
|
||||
None.
|
||||
|
||||
"""
|
||||
self._tete = None
|
||||
return None
|
||||
|
||||
def est_vide(self):
|
||||
"""
|
||||
Tester si l'instance est vide.
|
||||
|
||||
Returns
|
||||
-------
|
||||
bool
|
||||
Vrai ssi la liste est vide.
|
||||
|
||||
"""
|
||||
return self._tete is None
|
||||
|
||||
def ajouter_en_tete(self, element):
|
||||
"""
|
||||
Ajouter l'élément en tête de liste.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
element : type de donnee
|
||||
Donnnée à ajouter à la liste.
|
||||
|
||||
Returns
|
||||
-------
|
||||
resultat : Liste_Simplement_Chainee
|
||||
La liste à abonder.
|
||||
|
||||
"""
|
||||
resultat = Liste_Simplement_Chainee()
|
||||
resultat._tete = Maillon(element, self)
|
||||
return resultat
|
||||
|
||||
def tete(self):
|
||||
"""
|
||||
Renvoyer la donnée stockée en tête de liste.
|
||||
|
||||
Returns
|
||||
-------
|
||||
type de donnee quelconque
|
||||
donnee en tete.
|
||||
|
||||
"""
|
||||
assert not (self.est_vide()), "Liste Vide"
|
||||
return self._tete.donnee
|
||||
|
||||
def queue(self):
|
||||
"""
|
||||
Renvoyer la sous-liste suivant le maillon de tete.
|
||||
|
||||
Returns
|
||||
-------
|
||||
Liste_Simplement_Chainee
|
||||
Queue de la liste.
|
||||
|
||||
"""
|
||||
assert not (self.est_vide()), "Liste Vide"
|
||||
return self._tete.suite
|
||||
|
||||
|
||||
# ############################################################################
|
||||
|
||||
|
||||
def creer_liste_vide():
|
||||
"""
|
||||
Créer une liste simplement chainee vide.
|
||||
|
||||
Returns
|
||||
-------
|
||||
Liste_Simplement_Chainee
|
||||
Liste vide.
|
||||
|
||||
Effets de bord
|
||||
--------------
|
||||
Aucun
|
||||
"""
|
||||
return Liste_Simplement_Chainee()
|
||||
|
||||
|
||||
def est_vide(liste):
|
||||
"""
|
||||
Tester si la liste simplement chainee est vide.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
liste : Liste Simplement Chainee
|
||||
Liste à tester.
|
||||
|
||||
Returns
|
||||
-------
|
||||
bool
|
||||
Vrai ssi la liste est vide.
|
||||
|
||||
Effets de bord
|
||||
--------------
|
||||
Aucun
|
||||
"""
|
||||
return liste.est_vide()
|
||||
|
||||
|
||||
def ajouter_en_tete(liste, element):
|
||||
"""
|
||||
Inserer un element en tete de liste simplemeent chainee.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
liste : LSC
|
||||
Liste à abonder.
|
||||
element : type de donnee
|
||||
Donnee à aouter.
|
||||
|
||||
Returns
|
||||
-------
|
||||
LSC, copie de liste à laquelle element a été ajouté en tete.
|
||||
|
||||
Effets de bord
|
||||
--------------
|
||||
Aucun
|
||||
"""
|
||||
return liste.ajouter_en_tete(element)
|
||||
|
||||
|
||||
def tete(liste):
|
||||
"""
|
||||
Consulter la tete de liste.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
liste : LSC
|
||||
Liste à consulter.
|
||||
|
||||
Returns
|
||||
-------
|
||||
type de donnée
|
||||
valeur de la tete de liste.
|
||||
|
||||
Effets de bord
|
||||
--------------
|
||||
Aucun
|
||||
"""
|
||||
return liste.tete()
|
||||
|
||||
|
||||
def queue(liste):
|
||||
"""
|
||||
Renvoyer la liste sans sa tete.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
liste : LSC
|
||||
Liste à étêter.
|
||||
|
||||
Returns
|
||||
-------
|
||||
LSC
|
||||
Liste sans son maillon de tête.
|
||||
|
||||
Effets de bord
|
||||
--------------
|
||||
Aucun
|
||||
"""
|
||||
return liste.queue()
|
||||
|
||||
|
||||
def afficher_liste(liste, taille=-1):
|
||||
"""
|
||||
Afficher la liste en format de présentation.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
liste : LSC
|
||||
Liste à énumérer.
|
||||
|
||||
Returns
|
||||
-------
|
||||
None.
|
||||
|
||||
Effets de bord
|
||||
--------------
|
||||
Affichage à l'écran.
|
||||
|
||||
"""
|
||||
reste = liste
|
||||
compteur = 0
|
||||
print("+-----\n|")
|
||||
while not (est_vide(reste)) and (taille == -1 or compteur < taille):
|
||||
print("+- {}\n|".format(str(tete(reste))))
|
||||
reste = queue(reste)
|
||||
compteur += 1
|
||||
print("+-----")
|
||||
return None
|
||||
|
||||
|
||||
# ############################################################################
|
||||
|
||||
|
||||
class Maillon(object):
|
||||
"""
|
||||
Classe des Maillons d'une Liste Simplement Chainee.
|
||||
|
||||
Attributs
|
||||
- donnee : donnee stockee dans le maillon
|
||||
- suite : liste simplemement chainee suivant le maillon
|
||||
"""
|
||||
|
||||
def __init__(self, donnee=None, suite=Liste_Simplement_Chainee()):
|
||||
"""
|
||||
Construire une instance de la classe des Maillons.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
donnee : type de donnee, optional
|
||||
Donnee initiale dans le Maillon. The default is None.
|
||||
suite : LSC, optional
|
||||
Sous-liste suivant le Maillon courant.
|
||||
The default is Liste_Simplement_Chainee().
|
||||
|
||||
Returns
|
||||
-------
|
||||
None.
|
||||
|
||||
"""
|
||||
self.donnee = donnee
|
||||
self.suite = suite
|
||||
return None
|
||||
|
||||
|
||||
# ############################################################################
|
||||
@@ -1,61 +0,0 @@
|
||||
def creer_file_vide():
|
||||
"""
|
||||
Crée une nouvelle file vide.
|
||||
|
||||
Returns:
|
||||
list: Une liste vide représentant la file.
|
||||
"""
|
||||
return []
|
||||
|
||||
|
||||
def est_vide(file):
|
||||
"""
|
||||
Vérifie si une file est vide.
|
||||
|
||||
Args:
|
||||
file (list): La file à vérifier.
|
||||
|
||||
Returns:
|
||||
bool: `True` si la file est vide, `False` sinon.
|
||||
"""
|
||||
return len(file) == 0
|
||||
|
||||
|
||||
def enfiler(file, elt):
|
||||
"""
|
||||
Ajoute un élément à la fin de la file.
|
||||
|
||||
Args:
|
||||
file (list): La file à laquelle ajouter l'élément.
|
||||
elt: L'élément à ajouter.
|
||||
|
||||
Returns:
|
||||
None
|
||||
"""
|
||||
return file.append(elt)
|
||||
|
||||
|
||||
def defiler(file: list):
|
||||
"""
|
||||
Retire et renvoie le premier élément de la file.
|
||||
|
||||
Args:
|
||||
file (list): La file dont l'élément de tête doit être retiré.
|
||||
|
||||
Returns:
|
||||
list: La file sans le premier élément.
|
||||
"""
|
||||
return file[1:]
|
||||
|
||||
|
||||
def peak(file: list):
|
||||
"""
|
||||
Renvoie l'élément en tête de la file sans le retirer.
|
||||
|
||||
Args:
|
||||
file (list): La file dont on veut consulter le premier élément.
|
||||
|
||||
Returns:
|
||||
L'élément en tête de la file.
|
||||
"""
|
||||
return file[0]
|
||||
@@ -1,5 +0,0 @@
|
||||
import LSC as lifo
|
||||
|
||||
|
||||
def creer_liste_vide():
|
||||
return lifo.cr
|
||||
@@ -1,23 +0,0 @@
|
||||
def creer_file_vide():
|
||||
return ()
|
||||
|
||||
def est_vide(file: tuple)-> bool:
|
||||
return () == file
|
||||
|
||||
def tete(file: tuple):
|
||||
assert not(est_vide(file)), "file vide"
|
||||
element, reste = file
|
||||
|
||||
return element
|
||||
|
||||
def queue(file):
|
||||
element,reste = liste
|
||||
return reste
|
||||
|
||||
def inserer_tete(file,elt):
|
||||
return (elt,file)
|
||||
|
||||
def inserer_queue(file,elt):
|
||||
if est_vide(file):
|
||||
return inserer_tete(file,elt)
|
||||
return inserer_tete(inserer_queu(queue(file),elt)tete(file))
|
||||
@@ -1,40 +0,0 @@
|
||||
def insertion_sort(liste, ordre):
|
||||
for i in range(1, len(liste)):
|
||||
key = liste[i]
|
||||
j = i - 1
|
||||
while j >= 0 and ordre(liste[j], key) == -1:
|
||||
liste[j + 1] = liste[j]
|
||||
j -= 1
|
||||
liste[j + 1] = key
|
||||
return liste
|
||||
|
||||
def ordre(a,b):
|
||||
if a>b:
|
||||
return -1
|
||||
elif a<b:
|
||||
return 1
|
||||
else:
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
l1 = [2,1,6,5,4,7,6,3,2]
|
||||
insertion_sort(l1,ordre=None)
|
||||
print(l1)
|
||||
|
||||
def dichotomie(liste,ordre,element):
|
||||
gauche = 0
|
||||
droite = len(liste)
|
||||
while (droite - gauche)-1:
|
||||
millieu = (gauche + droite) //2
|
||||
if ordre(liste[millieu],element)//2 ==0:
|
||||
gauche, droite = millieu, milleu +1
|
||||
elif ordre(liste[millieu],element) == -1:
|
||||
droite = millieu
|
||||
else:
|
||||
gauche = millieu+1
|
||||
if gauche-droite > 0 and liste[gauche] = element:
|
||||
return gauche
|
||||
else:
|
||||
return -1
|
||||
|
||||
@@ -126,9 +126,7 @@ def sac_a_dos_dynamique(videos, capacite):
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Conversion du dictionnaire des vidéos en liste
|
||||
liste_videos = dico_vers_liste(Videos)
|
||||
# Affichage de contrôle
|
||||
for video in liste_videos:
|
||||
print(video)
|
||||
opt_brut, dur_brut, taille_brut = sac_a_dos_force_brute(liste_videos, 5.0)
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
import pygame
|
||||
from constantes import *
|
||||
import raquette
|
||||
from math import *
|
||||
|
||||
|
||||
class Balle(object):
|
||||
|
||||
def __init__(self):
|
||||
self.rayon = 10
|
||||
self.xpos = LARGEUR_ECRAN / 2
|
||||
self.ypos = HAUTEUR_ECRAN / 2
|
||||
self.xvit = 4.5
|
||||
self.yvit = 3.0
|
||||
|
||||
def deplace(self, raquette):
|
||||
self.xpos += self.xvit
|
||||
self.ypos += self.yvit
|
||||
self.rebonds(raquette)
|
||||
|
||||
def affiche(self, ecran):
|
||||
pygame.draw.circle(
|
||||
ecran, (0, 0, 0), (int(self.xpos), int(self.ypos)), self.rayon
|
||||
)
|
||||
|
||||
def rebonds(self, raquette):
|
||||
if self.xpos + self.rayon > LARGEUR_ECRAN or self.xpos - self.rayon < 0:
|
||||
self.xvit = -self.xvit
|
||||
if self.ypos + self.rayon > HAUTEUR_ECRAN or self.ypos - self.rayon < 0:
|
||||
self.yvit = -self.yvit
|
||||
|
||||
if self.ypos >= HAUTEUR_ECRAN - 20:
|
||||
if self.xpos >= raquette.xpos:
|
||||
if self.xpos <= raquette.xpos + raquette.largeur:
|
||||
self.yvit = -self.yvit
|
||||
if (
|
||||
self.xpos
|
||||
>= raquette.xpos + raquette.largeur - raquette.largeur / 10
|
||||
):
|
||||
self.xvit = 4.0
|
||||
self.yvit = 6.0
|
||||
|
||||
if self.xpos <= raquette.xpos + raquette.largeur / 20:
|
||||
self.xvit = -4.0
|
||||
self.yvit = 6.0
|
||||
@@ -1,42 +0,0 @@
|
||||
import sys, pygame
|
||||
import balle
|
||||
from constantes import *
|
||||
|
||||
pygame.init() # initialisation des modules de pygame
|
||||
|
||||
# Creation de la fenetre
|
||||
ecran = pygame.display.set_mode((LARGEUR_ECRAN, HAUTEUR_ECRAN))
|
||||
ecran.fill(BLANC)
|
||||
|
||||
pygame.display.set_caption("Balle rebondissante")
|
||||
|
||||
clock = pygame.time.Clock()
|
||||
|
||||
b1 = balle.Balle()
|
||||
|
||||
bouge = False
|
||||
|
||||
while True: # Demarrage de la boucle infinie
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT: # Evt de sortie de boucle
|
||||
sys.exit()
|
||||
elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
|
||||
bouge = not bouge
|
||||
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
|
||||
bouge = not bouge
|
||||
ecran.fill(BLANC)
|
||||
|
||||
b1.deplace()
|
||||
b1.affiche(ecran)
|
||||
pygame.display.update()
|
||||
|
||||
ecran.fill(BLANC)
|
||||
if bouge:
|
||||
b1.deplace()
|
||||
b1.affiche(ecran)
|
||||
|
||||
pygame.display.update() # rafraichissement
|
||||
clock.tick(60)
|
||||
|
||||
if __name__ == "__main__":
|
||||
b1 = balle.Balle()
|
||||
@@ -1,43 +0,0 @@
|
||||
import sys, pygame
|
||||
import balle
|
||||
import raquette
|
||||
from constantes import *
|
||||
|
||||
pygame.init()
|
||||
|
||||
# Creation de la fenetre
|
||||
ecran = pygame.display.set_mode((LARGEUR_ECRAN, HAUTEUR_ECRAN))
|
||||
|
||||
# Titre de la fenetre
|
||||
pygame.display.set_caption("Casse_Brique")
|
||||
|
||||
clock = pygame.time.Clock()
|
||||
|
||||
b1 = balle.Balle()
|
||||
r1 = raquette.Raquette()
|
||||
bouge = False
|
||||
bouge_gauche_raquette = False
|
||||
bouge_droite_raquette = False
|
||||
|
||||
while True:
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
sys.exit()
|
||||
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
|
||||
bouge = not bouge
|
||||
|
||||
if pygame.key.get_pressed()[pygame.K_q]:
|
||||
r1.deplaceGauche()
|
||||
if pygame.key.get_pressed()[pygame.K_d]:
|
||||
r1.deplaceDroite()
|
||||
|
||||
ecran.fill(BLANC)
|
||||
|
||||
if bouge:
|
||||
b1.deplace(r1)
|
||||
|
||||
b1.deplace(r1)
|
||||
b1.affiche(ecran)
|
||||
r1.affiche(ecran)
|
||||
pygame.display.update()
|
||||
clock.tick(60)
|
||||
@@ -1,7 +0,0 @@
|
||||
##########Definitions des constantes
|
||||
# Taille de la fenetre
|
||||
LARGEUR_ECRAN = 600
|
||||
HAUTEUR_ECRAN = 800
|
||||
# Couleur
|
||||
BLANC = (255, 255, 255)
|
||||
NOIR = (0, 0, 0)
|
||||
@@ -1,59 +0,0 @@
|
||||
import pygame
|
||||
from constantes import *
|
||||
|
||||
|
||||
class Raquette:
|
||||
"""
|
||||
Definie une raquette qui se deplace horizontalement
|
||||
dans le bas de la fenetre ecran
|
||||
Attributs : largeur (int defaut 100),
|
||||
xpos (int defaut LARGEUR_ECRAN//2 - self.largeur//2),
|
||||
vit (int defaut 6)
|
||||
L'épaisseur de la raquette est de 10
|
||||
Methodes : deplaceGauche, deplaceDroite, affiche
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.largeur = 100
|
||||
self.xpos = LARGEUR_ECRAN // 2 - self.largeur // 2
|
||||
self.vit = 6
|
||||
|
||||
def deplaceGauche(self):
|
||||
"""
|
||||
Deplace la raquette de vit vers la gauche
|
||||
Parametres :
|
||||
self : Raquette
|
||||
Return :
|
||||
None
|
||||
Effet de bord :
|
||||
Modifie l'attribut xpos en lui enlevant,
|
||||
si c'est possible la valeur de vit (et met xpos à 0 sinon)
|
||||
"""
|
||||
self.xpos -= self.vit
|
||||
if self.xpos < 0:
|
||||
self.xpos = 0
|
||||
|
||||
def deplaceDroite(self):
|
||||
"""
|
||||
Deplace la raquette de vit vers la droite
|
||||
Parametres :
|
||||
self : Raquette
|
||||
Return :
|
||||
None
|
||||
Effet de bord :
|
||||
Modifie l'attribut xpos en lui ajoutant,
|
||||
si c'est possible la valeur de vit (et met xpos à
|
||||
600-self.largeur sinon sinon)
|
||||
"""
|
||||
self.xpos += self.vit
|
||||
if self.xpos > LARGEUR_ECRAN - self.largeur:
|
||||
self.xpos = LARGEUR_ECRAN - self.largeur
|
||||
|
||||
def affiche(self, ecran):
|
||||
pygame.draw.rect(
|
||||
ecran, (0, 0, 255), (int(self.xpos), HAUTEUR_ECRAN - 20, self.largeur, 10)
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pass
|
||||
@@ -1,41 +0,0 @@
|
||||
import sys, pygame
|
||||
import balle
|
||||
|
||||
##########Definitions des constantes
|
||||
# Taille de la fenetre
|
||||
LARGEUR_ECRAN = 600
|
||||
HAUTEUR_ECRAN = 800
|
||||
# Couleur
|
||||
BLANC = (255, 255, 255)
|
||||
NOIR = (0, 0, 0)
|
||||
|
||||
pygame.init() # initialisation des modules de pygame
|
||||
|
||||
# Creation de la fenetre
|
||||
ecran = pygame.display.set_mode((LARGEUR_ECRAN, HAUTEUR_ECRAN))
|
||||
ecran.fill(BLANC)
|
||||
|
||||
pygame.display.set_caption("Balle rebondissante")
|
||||
|
||||
clock = pygame.time.Clock()
|
||||
|
||||
b1 = balle.Balle()
|
||||
|
||||
bouge = False
|
||||
|
||||
while True: # Demarrage de la boucle infinie
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT: # Evt de sortie de boucle
|
||||
sys.exit()
|
||||
elif event.type == pygame.MOUSEBUTTONDOWN:
|
||||
bouge = not bouge
|
||||
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
|
||||
bouge = not bouge
|
||||
|
||||
ecran.fill(BLANC)
|
||||
if bouge:
|
||||
b1.deplace()
|
||||
b1.affiche(ecran)
|
||||
|
||||
pygame.display.update() # rafraichissement
|
||||
clock.tick(60)
|
||||
@@ -1,24 +0,0 @@
|
||||
import pygame
|
||||
|
||||
|
||||
class Balle:
|
||||
"""
|
||||
Definie une balle qui se deplace dans la fenetre ecran
|
||||
Attributs : rayon , xpos , ypos , xvit , yvit
|
||||
Methodes : deplace , affiche
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.rayon = 10
|
||||
self.xpos = 300.0
|
||||
self.ypos = 400.0
|
||||
self.xvit = 4.5
|
||||
self.yvit = 3.0
|
||||
|
||||
def deplace(self):
|
||||
self.xpos += self.xvit
|
||||
self.ypos += self.yvit
|
||||
if self.xpos + self.rayon > 600 or self.xpos - self.rayon < 0:
|
||||
self.xvit = -self.xvit
|
||||
elif self.ypos + self.rayon > 800 or self.ypos - self.rayon < 0:
|
||||
self.yvit = -self.yvit
|
||||
@@ -1,4 +0,0 @@
|
||||
LARGEUR_ECRAN = 600
|
||||
HAUTEUR_ECRAN = 800
|
||||
|
||||
BLANC = (255, 255, 255)
|
||||
@@ -1,53 +0,0 @@
|
||||
[38;5;238m───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[0m
|
||||
[38;5;238m│ [0mFile: [1mraquette.py[0m
|
||||
[38;5;238m───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[0m
|
||||
[38;5;238m 1[0m [38;5;238m│[0m [38;2;249;38;114mimport[0m[38;2;248;248;242m [0m[38;2;248;248;242msys[0m
|
||||
[38;5;238m 2[0m [38;5;238m│[0m [38;2;249;38;114mimport[0m[38;2;248;248;242m [0m[38;2;248;248;242mpygame[0m
|
||||
[38;5;238m 3[0m [38;5;238m│[0m [38;2;249;38;114mfrom[0m[38;2;248;248;242m [0m[38;2;248;248;242mballe[0m[38;2;248;248;242m [0m[38;2;249;38;114mimport[0m[38;2;248;248;242m [0m[38;2;248;248;242mBalle[0m
|
||||
[38;5;238m 4[0m [38;5;238m│[0m [38;2;249;38;114mfrom[0m[38;2;248;248;242m [0m[38;2;248;248;242mraquette[0m[38;2;248;248;242m [0m[38;2;249;38;114mimport[0m[38;2;248;248;242m [0m[38;2;248;248;242mRaquette[0m
|
||||
[38;5;238m 5[0m [38;5;238m│[0m [38;2;249;38;114mfrom[0m[38;2;248;248;242m [0m[38;2;248;248;242mconstantes[0m[38;2;248;248;242m [0m[38;2;249;38;114mimport[0m[38;2;248;248;242m [0m[38;2;190;132;255m*[0m
|
||||
[38;5;238m 6[0m [38;5;238m│[0m
|
||||
[38;5;238m 7[0m [38;5;238m│[0m [38;2;248;248;242mpygame[0m[38;2;248;248;242m.[0m[38;2;248;248;242minit[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m
|
||||
[38;5;238m 8[0m [38;5;238m│[0m
|
||||
[38;5;238m 9[0m [38;5;238m│[0m [38;2;117;113;94m#[0m[38;2;117;113;94m Création de la fenêtre[0m
|
||||
[38;5;238m 10[0m [38;5;238m│[0m [38;2;248;248;242mecran[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;248;248;242mpygame[0m[38;2;248;248;242m.[0m[38;2;248;248;242mdisplay[0m[38;2;248;248;242m.[0m[38;2;248;248;242mset_mode[0m[38;2;248;248;242m([0m[38;2;248;248;242m([0m[38;2;255;255;255mLARGEUR_ECRAN[0m[38;2;248;248;242m,[0m[38;2;248;248;242m [0m[38;2;255;255;255mHAUTEUR_ECRAN[0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m
|
||||
[38;5;238m 11[0m [38;5;238m│[0m [38;2;248;248;242mecran[0m[38;2;248;248;242m.[0m[38;2;248;248;242mfill[0m[38;2;248;248;242m([0m[38;2;255;255;255mBLANC[0m[38;2;248;248;242m)[0m
|
||||
[38;5;238m 12[0m [38;5;238m│[0m [38;2;248;248;242mpygame[0m[38;2;248;248;242m.[0m[38;2;248;248;242mdisplay[0m[38;2;248;248;242m.[0m[38;2;248;248;242mset_caption[0m[38;2;248;248;242m([0m[38;2;230;219;116m'[0m[38;2;230;219;116mBalle rebondissante avec raquette[0m[38;2;230;219;116m'[0m[38;2;248;248;242m)[0m
|
||||
[38;5;238m 13[0m [38;5;238m│[0m
|
||||
[38;5;238m 14[0m [38;5;238m│[0m [38;2;248;248;242mclock[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;248;248;242mpygame[0m[38;2;248;248;242m.[0m[38;2;248;248;242mtime[0m[38;2;248;248;242m.[0m[38;2;248;248;242mClock[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m
|
||||
[38;5;238m 15[0m [38;5;238m│[0m
|
||||
[38;5;238m 16[0m [38;5;238m│[0m [38;2;117;113;94m#[0m[38;2;117;113;94m Initialisation des objets[0m
|
||||
[38;5;238m 17[0m [38;5;238m│[0m [38;2;248;248;242mballe[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;248;248;242mBalle[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m
|
||||
[38;5;238m 18[0m [38;5;238m│[0m [38;2;248;248;242mraquette[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;248;248;242mRaquette[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m
|
||||
[38;5;238m 19[0m [38;5;238m│[0m
|
||||
[38;5;238m 20[0m [38;5;238m│[0m [38;2;248;248;242mbouge[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;190;132;255mFalse[0m
|
||||
[38;5;238m 21[0m [38;5;238m│[0m
|
||||
[38;5;238m 22[0m [38;5;238m│[0m [38;2;249;38;114mwhile[0m[38;2;248;248;242m [0m[38;2;190;132;255mTrue[0m[38;2;248;248;242m:[0m[38;2;248;248;242m [0m[38;2;117;113;94m#[0m[38;2;117;113;94m Boucle principale[0m
|
||||
[38;5;238m 23[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;249;38;114mfor[0m[38;2;248;248;242m [0m[38;2;248;248;242mevent[0m[38;2;248;248;242m [0m[38;2;249;38;114min[0m[38;2;248;248;242m [0m[38;2;248;248;242mpygame[0m[38;2;248;248;242m.[0m[38;2;248;248;242mevent[0m[38;2;248;248;242m.[0m[38;2;248;248;242mget[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m:[0m
|
||||
[38;5;238m 24[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m [0m[38;2;248;248;242mevent[0m[38;2;248;248;242m.[0m[38;2;248;248;242mtype[0m[38;2;248;248;242m [0m[38;2;249;38;114m==[0m[38;2;248;248;242m [0m[38;2;248;248;242mpygame[0m[38;2;248;248;242m.[0m[38;2;255;255;255mQUIT[0m[38;2;248;248;242m:[0m
|
||||
[38;5;238m 25[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;248;248;242msys[0m[38;2;248;248;242m.[0m[38;2;248;248;242mexit[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m
|
||||
[38;5;238m 26[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;249;38;114melif[0m[38;2;248;248;242m [0m[38;2;248;248;242mevent[0m[38;2;248;248;242m.[0m[38;2;248;248;242mtype[0m[38;2;248;248;242m [0m[38;2;249;38;114m==[0m[38;2;248;248;242m [0m[38;2;248;248;242mpygame[0m[38;2;248;248;242m.[0m[38;2;255;255;255mKEYDOWN[0m[38;2;248;248;242m:[0m
|
||||
[38;5;238m 27[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m [0m[38;2;248;248;242mevent[0m[38;2;248;248;242m.[0m[38;2;248;248;242mkey[0m[38;2;248;248;242m [0m[38;2;249;38;114m==[0m[38;2;248;248;242m [0m[38;2;248;248;242mpygame[0m[38;2;248;248;242m.[0m[38;2;255;255;255mK_SPACE[0m[38;2;248;248;242m:[0m
|
||||
[38;5;238m 28[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;248;248;242mbouge[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;249;38;114mnot[0m[38;2;248;248;242m [0m[38;2;248;248;242mbouge[0m
|
||||
[38;5;238m 29[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;249;38;114melif[0m[38;2;248;248;242m [0m[38;2;248;248;242mevent[0m[38;2;248;248;242m.[0m[38;2;248;248;242mkey[0m[38;2;248;248;242m [0m[38;2;249;38;114m==[0m[38;2;248;248;242m [0m[38;2;248;248;242mpygame[0m[38;2;248;248;242m.[0m[38;2;255;255;255mK_LEFT[0m[38;2;248;248;242m:[0m
|
||||
[38;5;238m 30[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;248;248;242mraquette[0m[38;2;248;248;242m.[0m[38;2;248;248;242mdeplaceGauche[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m
|
||||
[38;5;238m 31[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;249;38;114melif[0m[38;2;248;248;242m [0m[38;2;248;248;242mevent[0m[38;2;248;248;242m.[0m[38;2;248;248;242mkey[0m[38;2;248;248;242m [0m[38;2;249;38;114m==[0m[38;2;248;248;242m [0m[38;2;248;248;242mpygame[0m[38;2;248;248;242m.[0m[38;2;255;255;255mK_RIGHT[0m[38;2;248;248;242m:[0m
|
||||
[38;5;238m 32[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;248;248;242mraquette[0m[38;2;248;248;242m.[0m[38;2;248;248;242mdeplaceDroite[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m
|
||||
[38;5;238m 33[0m [38;5;238m│[0m
|
||||
[38;5;238m 34[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;248;248;242mecran[0m[38;2;248;248;242m.[0m[38;2;248;248;242mfill[0m[38;2;248;248;242m([0m[38;2;255;255;255mBLANC[0m[38;2;248;248;242m)[0m
|
||||
[38;5;238m 35[0m [38;5;238m│[0m
|
||||
[38;5;238m 36[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m [0m[38;2;248;248;242mbouge[0m[38;2;248;248;242m:[0m
|
||||
[38;5;238m 37[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;248;248;242mballe[0m[38;2;248;248;242m.[0m[38;2;248;248;242mdeplace[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m
|
||||
[38;5;238m 38[0m [38;5;238m│[0m
|
||||
[38;5;238m 39[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;117;113;94m#[0m[38;2;117;113;94m Collision balle-raquette[0m
|
||||
[38;5;238m 40[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;248;248;242mballe[0m[38;2;248;248;242m.[0m[38;2;248;248;242mypos[0m[38;2;248;248;242m [0m[38;2;249;38;114m+[0m[38;2;248;248;242m [0m[38;2;248;248;242mballe[0m[38;2;248;248;242m.[0m[38;2;248;248;242mrayon[0m[38;2;248;248;242m [0m[38;2;249;38;114m>=[0m[38;2;248;248;242m [0m[38;2;255;255;255mHAUTEUR_ECRAN[0m[38;2;248;248;242m [0m[38;2;249;38;114m-[0m[38;2;248;248;242m [0m[38;2;190;132;255m20[0m[38;2;248;248;242m [0m[38;2;249;38;114mand[0m
|
||||
[38;5;238m 41[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;248;248;242mraquette[0m[38;2;248;248;242m.[0m[38;2;248;248;242mxpos[0m[38;2;248;248;242m [0m[38;2;249;38;114m<=[0m[38;2;248;248;242m [0m[38;2;248;248;242mballe[0m[38;2;248;248;242m.[0m[38;2;248;248;242mxpos[0m[38;2;248;248;242m [0m[38;2;249;38;114m<=[0m[38;2;248;248;242m [0m[38;2;248;248;242mraquette[0m[38;2;248;248;242m.[0m[38;2;248;248;242mxpos[0m[38;2;248;248;242m [0m[38;2;249;38;114m+[0m[38;2;248;248;242m [0m[38;2;248;248;242mraquette[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlargeur[0m[38;2;248;248;242m)[0m[38;2;248;248;242m:[0m
|
||||
[38;5;238m 42[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;248;248;242mballe[0m[38;2;248;248;242m.[0m[38;2;248;248;242myvit[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;249;38;114m-[0m[38;2;248;248;242mballe[0m[38;2;248;248;242m.[0m[38;2;248;248;242myvit[0m
|
||||
[38;5;238m 43[0m [38;5;238m│[0m
|
||||
[38;5;238m 44[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;248;248;242mballe[0m[38;2;248;248;242m.[0m[38;2;248;248;242maffiche[0m[38;2;248;248;242m([0m[38;2;248;248;242mecran[0m[38;2;248;248;242m)[0m
|
||||
[38;5;238m 45[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;248;248;242mraquette[0m[38;2;248;248;242m.[0m[38;2;248;248;242maffiche[0m[38;2;248;248;242m([0m[38;2;248;248;242mecran[0m[38;2;248;248;242m)[0m
|
||||
[38;5;238m 46[0m [38;5;238m│[0m
|
||||
[38;5;238m 47[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;248;248;242mpygame[0m[38;2;248;248;242m.[0m[38;2;248;248;242mdisplay[0m[38;2;248;248;242m.[0m[38;2;248;248;242mupdate[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m
|
||||
[38;5;238m 48[0m [38;5;238m│[0m [38;2;248;248;242m [0m[38;2;248;248;242mclock[0m[38;2;248;248;242m.[0m[38;2;248;248;242mtick[0m[38;2;248;248;242m([0m[38;2;190;132;255m60[0m[38;2;248;248;242m)[0m
|
||||
[38;5;238m 49[0m [38;5;238m│[0m
|
||||
[38;5;238m───────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[0m
|
||||
@@ -1,50 +0,0 @@
|
||||
import sys
|
||||
import pygame
|
||||
from balle import Balle
|
||||
from raquette import Raquette
|
||||
from constantes import *
|
||||
|
||||
pygame.init()
|
||||
|
||||
# Création de la fenêtre
|
||||
ecran = pygame.display.set_mode((LARGEUR_ECRAN, HAUTEUR_ECRAN))
|
||||
ecran.fill(BLANC)
|
||||
pygame.display.set_caption("Balle rebondissante avec raquette")
|
||||
|
||||
clock = pygame.time.Clock()
|
||||
|
||||
# Initialisation des objets
|
||||
balle = Balle()
|
||||
raquette = Raquette()
|
||||
|
||||
bouge = False
|
||||
|
||||
while True: # Boucle principale
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
sys.exit()
|
||||
elif event.type == pygame.KEYDOWN:
|
||||
if event.key == pygame.K_SPACE:
|
||||
bouge = not bouge
|
||||
elif event.key == pygame.K_LEFT:
|
||||
raquette.deplaceGauche()
|
||||
elif event.key == pygame.K_RIGHT:
|
||||
raquette.deplaceDroite()
|
||||
|
||||
ecran.fill(BLANC)
|
||||
|
||||
if bouge:
|
||||
balle.deplace()
|
||||
|
||||
# Collision balle-raquette
|
||||
if (
|
||||
balle.ypos + balle.rayon >= HAUTEUR_ECRAN - 20
|
||||
and raquette.xpos <= balle.xpos <= raquette.xpos + raquette.largeur
|
||||
):
|
||||
balle.yvit = -balle.yvit
|
||||
|
||||
balle.affiche(ecran)
|
||||
raquette.affiche(ecran)
|
||||
|
||||
pygame.display.update()
|
||||
clock.tick(60)
|
||||
@@ -1,41 +0,0 @@
|
||||
import sys, pygame
|
||||
import balle
|
||||
|
||||
##########Definitions des constantes
|
||||
# Taille de la fenetre
|
||||
LARGEUR_ECRAN = 600
|
||||
HAUTEUR_ECRAN = 800
|
||||
# Couleur
|
||||
BLANC = (255, 255, 255)
|
||||
NOIR = (0, 0, 0)
|
||||
|
||||
pygame.init() # initialisation des modules de pygame
|
||||
|
||||
# Creation de la fenetre
|
||||
ecran = pygame.display.set_mode((LARGEUR_ECRAN, HAUTEUR_ECRAN))
|
||||
ecran.fill(BLANC)
|
||||
|
||||
pygame.display.set_caption("Balle rebondissante")
|
||||
|
||||
clock = pygame.time.Clock()
|
||||
|
||||
b1 = balle.Balle()
|
||||
|
||||
bouge = False
|
||||
|
||||
while True: # Demarrage de la boucle infinie
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT: # Evt de sortie de boucle
|
||||
sys.exit()
|
||||
elif event.type == pygame.MOUSEBUTTONDOWN:
|
||||
bouge = not bouge
|
||||
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
|
||||
bouge = not bouge
|
||||
|
||||
ecran.fill(BLANC)
|
||||
if bouge:
|
||||
b1.deplace()
|
||||
b1.affiche(ecran)
|
||||
|
||||
pygame.display.update() # rafraichissement
|
||||
clock.tick(60)
|
||||
@@ -1,35 +0,0 @@
|
||||
import pygame
|
||||
import pygame
|
||||
|
||||
|
||||
class Balle:
|
||||
"""
|
||||
Definie une balle qui se deplace dans la fenetre ecran
|
||||
Attributs : rayon , xpos , ypos , xvit , yvit
|
||||
Methodes : deplace , affiche
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.rayon = 10
|
||||
self.xpos = 300.0
|
||||
self.ypos = 400.0
|
||||
self.xvit = 4.5
|
||||
self.yvit = 3.0
|
||||
|
||||
def deplace(self):
|
||||
self.xpos += self.xvit
|
||||
self.ypos += self.yvit
|
||||
if self.xpos + self.rayon > 600 or self.xpos - self.rayon < 0:
|
||||
self.xvit = -self.xvit
|
||||
if self.ypos + self.rayon > 800 or self.ypos - self.rayon < 0:
|
||||
self.yvit = -self.yvit
|
||||
|
||||
def affiche(self, ecran):
|
||||
"""
|
||||
Dessine la balle sur l'écran
|
||||
Paramètres :
|
||||
ecran : pygame.Surface - L'écran où dessiner la balle
|
||||
"""
|
||||
pygame.draw.circle(
|
||||
ecran, (255, 0, 0), (int(self.xpos), int(self.ypos)), self.rayon
|
||||
)
|
||||
@@ -1,50 +0,0 @@
|
||||
import sys
|
||||
import pygame
|
||||
from balle import Balle
|
||||
from raquette import Raquette
|
||||
from constantes import *
|
||||
|
||||
pygame.init()
|
||||
|
||||
# Création de la fenêtre
|
||||
ecran = pygame.display.set_mode((LARGEUR_ECRAN, HAUTEUR_ECRAN))
|
||||
ecran.fill(BLANC)
|
||||
pygame.display.set_caption("Balle rebondissante avec raquette")
|
||||
|
||||
clock = pygame.time.Clock()
|
||||
|
||||
# Initialisation des objets
|
||||
balle = Balle()
|
||||
raquette = Raquette()
|
||||
|
||||
bouge = False
|
||||
|
||||
while True: # Boucle principale
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
sys.exit()
|
||||
elif event.type == pygame.KEYDOWN:
|
||||
if event.key == pygame.K_SPACE:
|
||||
bouge = not bouge
|
||||
elif event.key == pygame.K_LEFT:
|
||||
raquette.deplaceGauche()
|
||||
elif event.key == pygame.K_RIGHT:
|
||||
raquette.deplaceDroite()
|
||||
|
||||
ecran.fill(BLANC)
|
||||
|
||||
if bouge:
|
||||
balle.deplace()
|
||||
|
||||
# Collision balle-raquette
|
||||
if (
|
||||
balle.ypos + balle.rayon >= HAUTEUR_ECRAN - 20
|
||||
and raquette.xpos <= balle.xpos <= raquette.xpos + raquette.largeur
|
||||
):
|
||||
balle.yvit = -balle.yvit
|
||||
|
||||
balle.affiche(ecran)
|
||||
raquette.affiche(ecran)
|
||||
|
||||
pygame.display.update()
|
||||
clock.tick(60)
|
||||
@@ -1,4 +0,0 @@
|
||||
LARGEUR_ECRAN = 600
|
||||
HAUTEUR_ECRAN = 800
|
||||
|
||||
BLANC = (255, 255, 255)
|
||||
@@ -1,43 +0,0 @@
|
||||
import pygame
|
||||
from constantes import *
|
||||
|
||||
|
||||
class Raquette:
|
||||
"""
|
||||
Définit une raquette qui se déplace horizontalement
|
||||
dans le bas de la fenêtre écran.
|
||||
Attributs : largeur (int, par défaut 100),
|
||||
xpos (int, par défaut LARGEUR_ECRAN//2 - largeur//2),
|
||||
vit (int, par défaut 6)
|
||||
L'épaisseur de la raquette est de 10.
|
||||
Méthodes : deplaceGauche, deplaceDroite, affiche
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.largeur = 100
|
||||
self.xpos = LARGEUR_ECRAN // 2 - self.largeur // 2
|
||||
self.vit = 6
|
||||
|
||||
def deplaceGauche(self):
|
||||
"""
|
||||
Déplace la raquette vers la gauche si possible.
|
||||
"""
|
||||
self.xpos = max(0, self.xpos - self.vit)
|
||||
|
||||
def deplaceDroite(self):
|
||||
"""
|
||||
Déplace la raquette vers la droite si possible.
|
||||
"""
|
||||
self.xpos = min(LARGEUR_ECRAN - self.largeur, self.xpos + self.vit)
|
||||
|
||||
def affiche(self, ecran):
|
||||
"""
|
||||
Dessine la raquette sur l'écran.
|
||||
"""
|
||||
pygame.draw.rect(
|
||||
ecran, (0, 0, 255), (int(self.xpos), HAUTEUR_ECRAN - 20, self.largeur, 10)
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pass
|
||||
@@ -1,27 +0,0 @@
|
||||
from pygame.jeu import niveau
|
||||
|
||||
|
||||
class Jeu:
|
||||
def __init__(self) -> None:
|
||||
self.niveau = niveau.Niveau()
|
||||
self.vie = 3
|
||||
self.bouge = False
|
||||
self.etat = 1
|
||||
|
||||
def gereJeu(self,ecran):
|
||||
if self.etat == 1:
|
||||
pass
|
||||
elif self.etat == 2:
|
||||
for event in pygame.event.get():
|
||||
if event.type() == pygame.QUIT:
|
||||
sys.exit
|
||||
elif event.type == pygame.MOUSEBUTTONDOWN:
|
||||
self.bouge = True
|
||||
else:
|
||||
self.bouge = True
|
||||
niveau.affiche(ecran)
|
||||
if self.bouge:
|
||||
self.etat = 1
|
||||
return 1
|
||||
elif self.etat == 2:
|
||||
self.etat = niveau.
|
||||
@@ -1,14 +0,0 @@
|
||||
class Niveau:
|
||||
def __init__(self) -> None:
|
||||
self.b1 = balle.Balle()
|
||||
self.r1 = raquette.Raquette()
|
||||
self.m1 = murdebrique.Wall()
|
||||
|
||||
def affiche(self,ecran):
|
||||
ecran.fill(BLANC)
|
||||
self.b1.affiche(ecran)
|
||||
self.r1.affiche(ecran)
|
||||
self.m1.affiche(ecran)
|
||||
|
||||
def levelmanager():
|
||||
for event in pygame.
|
||||
@@ -1,163 +0,0 @@
|
||||
import pygame
|
||||
import random
|
||||
import sys
|
||||
|
||||
# Paramètres de la grille
|
||||
CELL_SIZE = 20 # Taille d'une cellule en pixels
|
||||
COLS = 30 # Nombre de colonnes
|
||||
ROWS = 30 # Nombre de lignes
|
||||
WIDTH = COLS * CELL_SIZE
|
||||
HEIGHT = ROWS * CELL_SIZE
|
||||
|
||||
# Couleurs
|
||||
BLACK = (0, 0, 0)
|
||||
WHITE = (255, 255, 255)
|
||||
GRAY = (100, 100, 100)
|
||||
GREEN = (0, 255, 0)
|
||||
|
||||
|
||||
class Cell:
|
||||
def __init__(self, i, j):
|
||||
self.i = i # Numéro de la colonne
|
||||
self.j = j # Numéro de la ligne
|
||||
# Chaque cellule possède 4 murs, tous présents initialement
|
||||
self.walls = {"top": True, "right": True, "bottom": True, "left": True}
|
||||
self.visited = False
|
||||
|
||||
def draw(self, surface):
|
||||
"""Dessine la cellule et ses murs sur la surface donnée."""
|
||||
x = self.i * CELL_SIZE
|
||||
y = self.j * CELL_SIZE
|
||||
|
||||
# Remplir la cellule (si visitée) AVANT de dessiner les murs
|
||||
if self.visited:
|
||||
pygame.draw.rect(surface, GRAY, (x, y, CELL_SIZE, CELL_SIZE))
|
||||
|
||||
# Dessiner les murs par-dessus la couleur de fond
|
||||
if self.walls["top"]:
|
||||
pygame.draw.line(surface, WHITE, (x, y), (x + CELL_SIZE, y))
|
||||
if self.walls["right"]:
|
||||
pygame.draw.line(
|
||||
surface, WHITE, (x + CELL_SIZE, y), (x + CELL_SIZE, y + CELL_SIZE)
|
||||
)
|
||||
if self.walls["bottom"]:
|
||||
pygame.draw.line(
|
||||
surface, WHITE, (x + CELL_SIZE, y + CELL_SIZE), (x, y + CELL_SIZE)
|
||||
)
|
||||
if self.walls["left"]:
|
||||
pygame.draw.line(surface, WHITE, (x, y + CELL_SIZE), (x, y))
|
||||
|
||||
|
||||
def get_cell(i, j):
|
||||
"""Retourne la cellule aux coordonnées (i, j) si elle existe."""
|
||||
if 0 <= i < COLS and 0 <= j < ROWS:
|
||||
return grid[i][j]
|
||||
return None
|
||||
|
||||
|
||||
def get_unvisited_neighbors(cell):
|
||||
"""Retourne la liste des voisins non visités de la cellule donnée."""
|
||||
neighbors = []
|
||||
i, j = cell.i, cell.j
|
||||
# Voisin du haut
|
||||
top = get_cell(i, j - 1)
|
||||
if top and not top.visited:
|
||||
neighbors.append(top)
|
||||
# Voisin de droite
|
||||
right = get_cell(i + 1, j)
|
||||
if right and not right.visited:
|
||||
neighbors.append(right)
|
||||
# Voisin du bas
|
||||
bottom = get_cell(i, j + 1)
|
||||
if bottom and not bottom.visited:
|
||||
neighbors.append(bottom)
|
||||
# Voisin de gauche
|
||||
left = get_cell(i - 1, j)
|
||||
if left and not left.visited:
|
||||
neighbors.append(left)
|
||||
|
||||
return neighbors
|
||||
|
||||
|
||||
def remove_walls(current, next_cell):
|
||||
"""
|
||||
Enlève les murs entre la cellule courante et le voisin sélectionné.
|
||||
"""
|
||||
dx = next_cell.i - current.i
|
||||
dy = next_cell.j - current.j
|
||||
if dx == 1: # Voisin à droite
|
||||
current.walls["right"] = False
|
||||
next_cell.walls["left"] = False
|
||||
elif dx == -1: # Voisin à gauche
|
||||
current.walls["left"] = False
|
||||
next_cell.walls["right"] = False
|
||||
elif dy == 1: # Voisin en bas
|
||||
current.walls["bottom"] = False
|
||||
next_cell.walls["top"] = False
|
||||
elif dy == -1: # Voisin en haut
|
||||
current.walls["top"] = False
|
||||
next_cell.walls["bottom"] = False
|
||||
|
||||
|
||||
def main():
|
||||
global grid
|
||||
pygame.init()
|
||||
screen = pygame.display.set_mode((WIDTH, HEIGHT))
|
||||
pygame.display.set_caption("Labyrinthe généré par DFS")
|
||||
clock = pygame.time.Clock()
|
||||
|
||||
# Création de la grille : une matrice de cellules
|
||||
grid = [[Cell(i, j) for j in range(ROWS)] for i in range(COLS)]
|
||||
|
||||
# Initialisation de l'algorithme DFS
|
||||
current = grid[0][0] # Départ en haut à gauche
|
||||
current.visited = True
|
||||
stack = []
|
||||
|
||||
running = True
|
||||
finished = False # Indique si la génération est terminée
|
||||
|
||||
while running:
|
||||
clock.tick(60) # Limite à 60 images par seconde
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT:
|
||||
running = False
|
||||
|
||||
# Exécution de l'algorithme DFS tant que la génération n'est pas terminée
|
||||
if not finished:
|
||||
neighbors = get_unvisited_neighbors(current)
|
||||
if neighbors:
|
||||
# Choix aléatoire d'un voisin non visité
|
||||
next_cell = random.choice(neighbors)
|
||||
stack.append(current)
|
||||
remove_walls(current, next_cell)
|
||||
current = next_cell
|
||||
current.visited = True
|
||||
elif stack:
|
||||
# Revenir en arrière si aucun voisin n'est disponible
|
||||
current = stack.pop()
|
||||
else:
|
||||
# Génération terminée
|
||||
finished = True
|
||||
|
||||
# Affichage
|
||||
screen.fill(BLACK)
|
||||
# Dessiner toutes les cellules de la grille
|
||||
for i in range(COLS):
|
||||
for j in range(ROWS):
|
||||
grid[i][j].draw(screen)
|
||||
|
||||
# Mettre en évidence la cellule courante (seulement si la génération est en cours)
|
||||
if not finished:
|
||||
x = current.i * CELL_SIZE
|
||||
y = current.j * CELL_SIZE
|
||||
pygame.draw.rect(screen, GREEN, (x, y, CELL_SIZE, CELL_SIZE))
|
||||
|
||||
pygame.display.flip()
|
||||
|
||||
pygame.quit()
|
||||
sys.exit()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
26
question_du_jour/pro_dynamique.py
Normal file
26
question_du_jour/pro_dynamique.py
Normal file
@@ -0,0 +1,26 @@
|
||||
pyramide = [["x"], ["y", "z"], ["a", "b", "c"]]
|
||||
# tableau triangulaire meilleur rendement avec un double boucle
|
||||
# exemple:
|
||||
# [1],[4,2],[9,7,3],[10,6,100,1]
|
||||
# meilleur chemin 100, 7, 4, 1 (on ne peut pas faire 100 9 4 1 car 100 et 9 sont eloigner d'une distance > 1 au niveau de l'abcisse dans les étages)
|
||||
|
||||
|
||||
def meilleur_rendement(pyramide: list[list[int]]):
|
||||
copie_l = [ligne for ligne in pyramide[::-1]]
|
||||
pyramide = pyramide[::-1]
|
||||
for i in range(1, len(pyramide)):
|
||||
for j in range(len(pyramide[i])):
|
||||
pyramide[i][j] += max(pyramide[i - 1][j], pyramide[i - 1][j + 1])
|
||||
return pyramide[-1][0]
|
||||
|
||||
|
||||
def print_pyramide(pyramide):
|
||||
for l in pyramide:
|
||||
print(f"{l}\n")
|
||||
return None
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
pyramide1 = [[1], [4, 2], [9, 7, 3], [10, 6, 100, 1]]
|
||||
print_pyramide(pyramide1[::-1])
|
||||
print(meilleur_rendement(pyramide1))
|
||||
@@ -1,54 +0,0 @@
|
||||
class Tableau:
|
||||
def __init__(self, gauche, droite):
|
||||
self.gauche = gauche
|
||||
self.droite = droite
|
||||
|
||||
def imin(self):
|
||||
return -len(self.gauche)
|
||||
|
||||
def imax(self):
|
||||
return len(self.droite) - 1
|
||||
|
||||
def append(self, elt):
|
||||
self.droite.append(elt)
|
||||
|
||||
def prepend(self, elt):
|
||||
self.gauche.append(elt)
|
||||
|
||||
def __getitem__(self, i):
|
||||
if i < 0:
|
||||
try:
|
||||
return self.gauche[i]
|
||||
except IndexError:
|
||||
print(f"erreur lors de l'index")
|
||||
else:
|
||||
try:
|
||||
return self.droite[i]
|
||||
except IndexError:
|
||||
print("error")
|
||||
|
||||
def __setitem__(self, i, v):
|
||||
if i < 0:
|
||||
try:
|
||||
self.gauche[i] = v
|
||||
except IndexError:
|
||||
print("error")
|
||||
else:
|
||||
try:
|
||||
self.droite[i] = v
|
||||
except IndexError:
|
||||
print("error")
|
||||
|
||||
def __str__(self) -> str:
|
||||
string = "|"
|
||||
for i in self.gauche:
|
||||
string += str(i) + "|"
|
||||
for i in self.droite:
|
||||
string += str(i) + "|"
|
||||
return string
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
tab = Tableau([1, 2], [3, 4])
|
||||
tab.prepend(5)
|
||||
print(tab.__str__())
|
||||
@@ -1,62 +0,0 @@
|
||||
class Tape:
|
||||
def __init__(self, input_str: str):
|
||||
self.tape = list(input_str)
|
||||
self.head = 0
|
||||
|
||||
def read(self):
|
||||
if self.head < 0:
|
||||
self.tape = ["•"] * (-self.head) + self.tape
|
||||
self.head = 0
|
||||
elif self.head >= len(self.tape):
|
||||
self.tape += ["•"] * (self.head - len(self.tape) + 1)
|
||||
return self.tape[self.head]
|
||||
|
||||
def write(self, symbol):
|
||||
self.tape[self.head] = symbol
|
||||
|
||||
def move(self, direction):
|
||||
if direction == "g":
|
||||
self.head -= 1
|
||||
elif direction == "d":
|
||||
self.head += 1
|
||||
|
||||
def __str__(self):
|
||||
tape_str = "".join(self.tape)
|
||||
pointer = " " * self.head + "^"
|
||||
return f"{tape_str}\n{pointer}"
|
||||
|
||||
|
||||
class TuringMachine:
|
||||
def __init__(self, transitions, initial_state, final_state):
|
||||
self.transitions = transitions
|
||||
self.state = initial_state
|
||||
self.final_state = final_state
|
||||
|
||||
def run(self, input_str):
|
||||
tape = Tape(input_str)
|
||||
steps = 0
|
||||
while self.state != self.final_state:
|
||||
current_symbol = tape.read()
|
||||
if (
|
||||
self.state not in self.transitions
|
||||
or current_symbol not in self.transitions[self.state]
|
||||
):
|
||||
print("No transition rule found. Halting.")
|
||||
break
|
||||
write_symbol, direction, next_state = self.transitions[self.state][
|
||||
current_symbol
|
||||
]
|
||||
tape.write(write_symbol)
|
||||
tape.move(direction)
|
||||
self.state = next_state
|
||||
steps += 1
|
||||
print(f"Étape {steps} - État: {self.state}")
|
||||
print(tape)
|
||||
print("Machine arrêtée.")
|
||||
|
||||
|
||||
transitions = {
|
||||
"init": {"1": ("1", "d", "init"), "0": ("0", "d", "init"), "•": ("1", "g", "end")}
|
||||
}
|
||||
tm = TuringMachine(transitions, initial_state="init", final_state="end")
|
||||
tm.run("1011")
|
||||
21
turing/mc.py
21
turing/mc.py
@@ -1,21 +0,0 @@
|
||||
import bitab as Tabidir
|
||||
import exemples
|
||||
class Configuration:
|
||||
def __init__(self, ruban,position, etat_courant):
|
||||
self.ruban = ruban
|
||||
self.position = position:wq
|
||||
|
||||
self.etat_courant = etat_courant
|
||||
|
||||
def _str__(self):
|
||||
chaine = ' '
|
||||
chaine = chaine +(self.position-ruban.imin())*2*' '+self.etat_courant
|
||||
chaine = chaine + ' '+ (self.position+ruban.imin()*2*' '+ '|'+'\n')
|
||||
chaine = chaine+self.ruban.__str__()
|
||||
return chaine
|
||||
|
||||
if __name__ == "__main__":
|
||||
ruban = Tabidir
|
||||
|
||||
|
||||
class Machine:
|
||||
Reference in New Issue
Block a user