commit c426b46ab49386f5cf84636199a8f7595abd15f6 Author: 7ka1 <7ka1@noreply.localhost> Date: Tue Feb 17 15:21:29 2026 +0000 Téléverser les fichiers vers "/" diff --git a/blackjack.py b/blackjack.py new file mode 100644 index 0000000..b96b026 --- /dev/null +++ b/blackjack.py @@ -0,0 +1,264 @@ +import random +import os +import time +import sys + +# --- CONFIGURATION & COULEURS --- +class Couleurs: + RESET = "\033[0m" + ROUGE = "\033[91m" # Pour Coeur/Carreau + NOIR = "\033[97m" # Blanc pour Pique/Trèfle (sur fond noir) + VERT = "\033[92m" # Tapis / Argent + JAUNE = "\033[93m" # Infos + CYAN = "\033[96m" # Titres + GRAS = "\033[1m" + +# Symboles des cartes +SUITS = { + 'Pique': '♠', + 'Coeur': '♥', + 'Carreau': '♦', + 'Trefle': '♣' +} + +# Valeurs faciales +RANKS = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'] +VALUES = {'2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, '10':10, 'J':10, 'Q':10, 'K':10, 'A':11} + +def cls(): + os.system('cls' if os.name == 'nt' else 'clear') + +# --- CLASSES --- + +class Carte: + def __init__(self, rank, suit): + self.rank = rank + self.suit = suit + self.symbol = SUITS[suit] + self.valeur = VALUES[rank] + # Couleur rouge pour coeur/carreau + self.couleur = Couleurs.ROUGE if suit in ['Coeur', 'Carreau'] else Couleurs.NOIR + + def visuel(self): + """Retourne une liste de chaînes représentant la carte ligne par ligne.""" + r = self.rank.ljust(2) + s = self.symbol + c = self.couleur + end = Couleurs.RESET + + # ASCII Art de la carte + return [ + f"{c}┌─────────┐{end}", + f"{c}│ {r} │{end}", + f"{c}│ │{end}", + f"{c}│ {s} │{end}", + f"{c}│ │{end}", + f"{c}│ {r} │{end}", + f"{c}└─────────┘{end}" + ] + +class Paquet: + def __init__(self): + self.cartes = [] + self.generer() + + def generer(self): + self.cartes = [Carte(r, s) for s in SUITS for r in RANKS] + random.shuffle(self.cartes) + + def tirer(self): + if not self.cartes: + self.generer() # Nouveau paquet si vide + return self.cartes.pop() + +class Main: + def __init__(self): + self.cartes = [] + self.valeur = 0 + self.aces = 0 + + def ajouter(self, carte): + self.cartes.append(carte) + self.calculer() + + def calculer(self): + self.valeur = 0 + self.aces = 0 + for carte in self.cartes: + self.valeur += carte.valeur + if carte.rank == 'A': + self.aces += 1 + + # Gestion des As (11 ou 1) + while self.valeur > 21 and self.aces: + self.valeur -= 10 + self.aces -= 1 + +def afficher_table(main_joueur, main_dealer, cache_dealer=True): + cls() + print(f"{Couleurs.VERT}╔══════════════════════════════════════════════════════════╗") + print(f"║ 🎰 CASINO PYTHON 🎰 ║") + print(f"╚══════════════════════════════════════════════════════════╝{Couleurs.RESET}\n") + + # --- CROUPIER --- + print(f"{Couleurs.JAUNE}🤠 CROUPIER{Couleurs.RESET}") + + lignes_dealer = [""] * 7 + for i, carte in enumerate(main_dealer.cartes): + # Si c'est la première carte et qu'on doit la cacher + if i == 0 and cache_dealer: + dos_carte = [ + "┌─────────┐", + "│░░░░░░░░░│", + "│░░░░░░░░░│", + "│░░PYTHON░│", + "│░░░░░░░░░│", + "│░░░░░░░░░│", + "└─────────┘" + ] + img = dos_carte + else: + img = carte.visuel() + + for idx, ligne in enumerate(img): + lignes_dealer[idx] += ligne + " " + + for ligne in lignes_dealer: + print(ligne) + + if cache_dealer: + print(f" Score : ?") + else: + print(f" Score : {main_dealer.valeur}") + + print("\n" + "-"*40 + "\n") + + # --- JOUEUR --- + print(f"{Couleurs.CYAN}👤 JOUEUR{Couleurs.RESET}") + lignes_joueur = [""] * 7 + for carte in main_joueur.cartes: + img = carte.visuel() + for idx, ligne in enumerate(img): + lignes_joueur[idx] += ligne + " " + + for ligne in lignes_joueur: + print(ligne) + + print(f" Score : {main_joueur.valeur}") + print("\n") + +# --- MOTEUR DE JEU --- + +def jeu(): + argent = 100 + paquet = Paquet() + + while True: + if argent <= 0: + cls() + print(f"{Couleurs.ROUGE}💸 Vous êtes ruiné ! Game Over.{Couleurs.RESET}") + break + + cls() + print(f"{Couleurs.VERT}💰 Votre solde : {argent} €{Couleurs.RESET}") + + # 1. Mise + mise = 0 + while True: + try: + entree = input("Placez votre mise (ou 'q' pour quitter) : ") + if entree.lower() == 'q': + sys.exit() + mise = int(entree) + if 0 < mise <= argent: + break + print("Mise invalide.") + except: + print("Entrez un nombre.") + + # 2. Distribution initiale + joueur = Main() + dealer = Main() + + joueur.ajouter(paquet.tirer()) + joueur.ajouter(paquet.tirer()) + dealer.ajouter(paquet.tirer()) + dealer.ajouter(paquet.tirer()) + + fin_tour = False + doubler = False + + # Vérification Blackjack naturel + if joueur.valeur == 21: + afficher_table(joueur, dealer, cache_dealer=False) + print(f"{Couleurs.JAUNE}✨ BLACKJACK ! ✨{Couleurs.RESET}") + argent += int(mise * 1.5) + fin_tour = True + time.sleep(2) + + # 3. Tour du Joueur + while not fin_tour: + afficher_table(joueur, dealer, cache_dealer=True) + + if joueur.valeur > 21: + print(f"{Couleurs.ROUGE}💥 BUST ! Vous avez dépassé 21.{Couleurs.RESET}") + argent -= mise + fin_tour = True + break + + print(f"Options : {Couleurs.GRAS}[T]irer{Couleurs.RESET} | {Couleurs.GRAS}[R]ester{Couleurs.RESET}", end="") + if len(joueur.cartes) == 2 and argent >= mise * 2: + print(f" | {Couleurs.GRAS}[D]oubler{Couleurs.RESET}", end="") + print() + + choix = input("Votre choix : ").lower() + + if choix == 't': + joueur.ajouter(paquet.tirer()) + elif choix == 'r': + break + elif choix == 'd' and len(joueur.cartes) == 2: + if argent >= mise * 2: + mise *= 2 + doubler = True + print(f"{Couleurs.JAUNE}Mise doublée ! ({mise}€){Couleurs.RESET}") + joueur.ajouter(paquet.tirer()) + if joueur.valeur > 21: + afficher_table(joueur, dealer, cache_dealer=True) + print(f"{Couleurs.ROUGE}💥 BUST !{Couleurs.RESET}") + argent -= mise + fin_tour = True + break # On double, on tire une carte, et c'est fini + else: + print("Pas assez d'argent pour doubler.") + time.sleep(1) + + # 4. Tour du Croupier + if not fin_tour: + # Révélation + afficher_table(joueur, dealer, cache_dealer=False) + time.sleep(1) + + while dealer.valeur < 17: + print("Le croupier tire...") + time.sleep(1) + dealer.ajouter(paquet.tirer()) + afficher_table(joueur, dealer, cache_dealer=False) + + # 5. Résultat + if dealer.valeur > 21: + print(f"{Couleurs.VERT}🎉 Le croupier saute ! Vous gagnez {mise} €.{Couleurs.RESET}") + argent += mise + elif dealer.valeur > joueur.valeur: + print(f"{Couleurs.ROUGE}❌ Le croupier gagne ({dealer.valeur} vs {joueur.valeur}).{Couleurs.RESET}") + argent -= mise + elif dealer.valeur < joueur.valeur: + print(f"{Couleurs.VERT}🎉 Vous gagnez ! ({joueur.valeur} vs {dealer.valeur}){Couleurs.RESET}") + argent += mise + else: + print(f"{Couleurs.JAUNE}🤝 Égalité (Push). Mise remboursée.{Couleurs.RESET}") + + input(f"\nAppuyez sur Entrée pour continuer...") + +if __name__ == "__main__": + jeu() \ No newline at end of file