import random import os import sys import time # Fonction qui stop le programme def quit(): sys.exit() # Définition de chaque carte par classe et de sa valeur class carte: def __init__(self, Suite, Valeur, Valeur_Carte): # Suite de carte comme Piques ou Coeur self.Suite = Suite # Représentation de la valeur de la carte comme A pour As ou R pour Roi self.Valeur = Valeur # Valeur des scores pour les cartes comme 10 pour le Roi self.Valeur_Carte = Valeur_Carte # Fonction qui nettoie le terminal en fonction du système d'exploitation (compatibilité) def clearConsole(): # Vérification si le système d'exploitation est Windows ou Linux et Mac OS if os.name == 'posix': _ = os.system('clear') else: # Else Operating System is Windows (os.name = nt) _ = os.system('cls') # Fonction qui dessine le deck obtenue par le joueur et le croupier dans la partie def Print_Cartes(Cartes, Caché): s = "" for Carte in Cartes: s = s + "\t ________________" if Caché: s += "\t ________________" print(s) s = "" for Carte in Cartes: s = s + "\t| |" if Caché: s += "\t| |" print(s) s = "" for Carte in Cartes: if Carte.Valeur == '10': s = s + "\t| {} |".format(Carte.Valeur) else: s = s + "\t| {} |".format(Carte.Valeur) if Caché: s += "\t| |" print(s) s = "" for Carte in Cartes: s = s + "\t| |" if Caché: s += "\t| * * |" print(s) s = "" for Carte in Cartes: s = s + "\t| |" if Caché: s += "\t| * * |" print(s) s = "" for Carte in Cartes: s = s + "\t| |" if Caché: s += "\t| * * |" print(s) s = "" for Carte in Cartes: s = s + "\t| |" if Caché: s += "\t| * * |" print(s) s = "" for Carte in Cartes: s = s + "\t| {} |".format(Carte.Suite) if Caché: s += "\t| * |" print(s) s = "" for Carte in Cartes: s = s + "\t| |" if Caché: s += "\t| * |" print(s) s = "" for Carte in Cartes: s = s + "\t| |" if Caché: s += "\t| * |" print(s) s = "" for Carte in Cartes: s = s + "\t| |" if Caché: s += "\t| |" print(s) s = "" for Carte in Cartes: s = s + "\t| |" if Caché: s += "\t| |" print(s) s = "" for Carte in Cartes: if Carte.Valeur == '10': s = s + "\t| {} |".format(Carte.Valeur) else: s = s + "\t| {} |".format(Carte.Valeur) if Caché: s += "\t| * |" print(s) s = "" for Carte in Cartes: s = s + "\t|________________|" if Caché: s += "\t|________________|" print(s) print() # Fonction donnant le choix de relancer une partie ou non au joueur def Jouer_Encore(): Encore = input("Une autre partie de Blackjack ? (O/N): ") if (Encore.upper() != "O" and Encore.upper() != "N"): print("Erreur !! Essaye encore") Jouer_Encore() if Encore.upper() == "O": print("Relancement d'une partie",end='') # Donner un effet de chargement time.sleep(1) print(".",end='') time.sleep(1) print(".",end='') time.sleep(1) print(".",end='') time.sleep(1) Blackjack_Jeu(Deck) if Encore.upper() == "N": print("|---------------Fin du jeu---------------|") quit() # Fonction pour une partie de Blackjack def Blackjack_Jeu(Deck): #Nettoyage de la console avec 1 seconde de latence car commande trop lente clearConsole() time.sleep(1) print() print("|---------------Début de la partie---------------|") time.sleep(1) # Création de liste ou stocker les cartes pour le croupier et le joueur Cartes_Joueur = [] Cartes_Croupier = [] # Création de variable contenant le score du croupier et le joueur Score_Joueur = 0 Score_Croupier = 0 # Distribution initiale pour le joueur et le croupier while len(Cartes_Joueur) < 2: print() print("Distribution initial des cartes: ") # Distribuer une carte au hasard Carte_Joueur = random.choice(Deck) Cartes_Joueur.append(Carte_Joueur) Deck.remove(Carte_Joueur) # Mise à jour du score du joueur Score_Joueur += Carte_Joueur.Valeur_Carte # Dans le cas où les deux cartes sont des As, le premier as ait la valeur 1 if len(Cartes_Joueur) == 2: if Cartes_Joueur[0].Valeur_Carte == 11 and Cartes_Joueur[1].Valeur_Carte == 11: Cartes_Joueur[0].Valeur_Carte = 1 Score_Joueur -= 10 # Affichage des cartes et du score du Joueur print() print("Vos cartes sont: ") Print_Cartes(Cartes_Joueur, False) print("Votre score est de ", Score_Joueur) # Indication au joueur pour passer les étapes time.sleep(2) print("Appuyez sur la touche 'Entrée' pour continuer.") input() # Distribuer une carte au hasard Carte_Croupier = random.choice(Deck) Cartes_Croupier.append(Carte_Croupier) Deck.remove(Carte_Croupier) # Mise à jour du score du croupier Score_Croupier += Carte_Croupier.Valeur_Carte # Affichage des cartes et du score du croupier, en masquant la deuxième carte et le score print("Cartes du croupier: ") if len(Cartes_Croupier) == 1: Print_Cartes(Cartes_Croupier, False) print("Score du croupier = ", Score_Croupier) else: Print_Cartes(Cartes_Croupier[:-1], True) print("Score du croupier = ", Score_Croupier - Cartes_Croupier[-1].Valeur_Carte,"+ ?") # Dans le cas où les deux cartes sont des As, le premier as ait la valeur 1 if len(Cartes_Croupier) == 2: if Cartes_Croupier[0].Valeur_Carte == 11 and Cartes_Croupier[1].Valeur_Carte == 11: Cartes_Croupier[1].Valeur_Carte = 1 Score_Croupier -= 10 time.sleep(2) print("Appuyez sur la touche 'Entrée' pour continuer.") input() clearConsole() time.sleep(1) # Le joueur à un blackjack dès le début if Score_Joueur == 21: clearConsole() time.sleep(1) # Affichage des cartes et du score du Joueur et du croupier print("Vos cartes sont: ") Print_Cartes(Cartes_Joueur, False) print("Votre score est de ", Score_Joueur) time.sleep(1) print("Cartes du croupier: ") Print_Cartes(Cartes_Croupier, False) print("Score du croupier = ", Score_Croupier) time.sleep(1) # Informe la victoire du joueur print() print("VOUS AVEZ OBTENU UN BLACKJACK !!") print("Vous remportez la victoire !!") time.sleep(2) print("|---------------Fin de la partie---------------|") Jouer_Encore() # Affichage des cartes du joueur et du croupier en nettoyant la console avant clearConsole() time.sleep(1) print() print("Cartes du croupier: ") Print_Cartes(Cartes_Croupier[:-1], True) print("Score du croupier = ", Score_Croupier - Cartes_Croupier[-1].Valeur_Carte,"+ ?") print() time.sleep(1) print("Vos cartes sont: ") Print_Cartes(Cartes_Joueur, False) print("Votre score est de ", Score_Joueur) # Management du choix du joueur (Piocher ou Arrêter) while Score_Joueur < 21: time.sleep(1) print("Voulez-vous pioché",end='') time.sleep(1) print(".",end='') time.sleep(1) print(".",end='') time.sleep(1) print("?",end='') Choix = input(" (O/N): ") # Contrôle du choix du joueur if len(Choix) != 1 or (Choix.upper() != 'O' and Choix.upper() != 'N'): print("Erreur !! Essaye encore") # Si le joueur décide de piocher if Choix.upper() == 'O': # Distribution d'une nouvelle carte Carte_Joueur = random.choice(Deck) Cartes_Joueur.append(Carte_Joueur) Deck.remove(Carte_Joueur) # Mise à jour du score du joueur Score_Joueur += Carte_Joueur.Valeur_Carte # Mise à jour du score du joueur au cas où la carte du joueur serait un as c = 0 while Score_Joueur > 21 and c < len(Cartes_Joueur): if Cartes_Joueur[c].Valeur_Carte == 11: Cartes_Joueur[c].Valeur_Carte = 1 Score_Joueur -= 10 c += 1 else: c += 1 # Affichage des cartes du joueur et du croupier avec nettoyage de la console avant clearConsole() time.sleep(1) print() print("Cartes du croupier: ") Print_Cartes(Cartes_Croupier[:-1], True) print("Score du croupier = ", Score_Croupier - Cartes_Croupier[-1].Valeur_Carte,"+ ?") print() print("Vos cartes sont: ") Print_Cartes(Cartes_Joueur, False) print("Votre score est de ", Score_Joueur) # Si le joueur décide d'arrêter if Choix.upper() == 'N': clearConsole() time.sleep(1) break # Affichage des cartes du croupier print() print("Le croupier révèle ses cartes",end='') time.sleep(1) print(".",end='') time.sleep(1) print(".",end='') time.sleep(1) print(".") time.sleep(1) print("Cartes du croupier: ") Print_Cartes(Cartes_Croupier, False) print("Score du croupier = ", Score_Croupier) time.sleep(1) print("Appuyez sur la touche 'Entrée' pour continuer.") input() # Vérification si le joueur a un Blackjack, si oui, termine la partie if Score_Joueur == 21: clearConsole() time.sleep(1) print("Cartes du croupier: ") Print_Cartes(Cartes_Croupier, False) print("Score du croupier = ", Score_Croupier) time.sleep(1) print() print("Vos cartes sont: ") Print_Cartes(Cartes_Joueur, False) print("Votre score est de ", Score_Joueur) time.sleep(1) print("VOUS AVEZ OBTENU UN BLACKJACK !!") print("Vous remportez la victoire !!") time.sleep(1) print("|---------------Fin de la partie---------------|") Jouer_Encore() # Vérification si le joueur dépasse 21, si oui, termine la partie if Score_Joueur > 21: clearConsole() time.sleep(2) print("Cartes du croupier: ") Print_Cartes(Cartes_Croupier, False) print("Score du croupier = ", Score_Croupier) time.sleep(2) print() print("Vos cartes sont: ") Print_Cartes(Cartes_Joueur, False) print("Votre score est de ", Score_Joueur) time.sleep(2) print("Votre score dépasse 21 !(Votre score:",Score_Joueur,") Vous êtes donc disqualifié ! Victoire du croupier !") time.sleep(1) print("|---------------Fin de la partie---------------|") Jouer_Encore() # Management du choix du croupier while Score_Croupier < 17: clearConsole() time.sleep(1) print() print("Le croupier décide de piocher",end='') time.sleep(1) print(".",end='') time.sleep(1) print(".",end='') time.sleep(1) print(".") time.sleep(1) # Distribution d'une nouvelle carte Carte_Croupier = random.choice(Deck) Cartes_Croupier.append(Carte_Croupier) Deck.remove(Carte_Croupier) # Mise à jour du score du croupier Score_Croupier += Carte_Croupier.Valeur_Carte # Mise à jour du score du croupier au cas où la carte du joueur serait un as c = 0 while Score_Croupier > 21 and c < len(Cartes_Croupier): if Cartes_Croupier[c].Valeur_Carte == 11: Cartes_Croupier[c].Valeur_Carte = 1 Score_Croupier -= 10 c += 1 else: c += 1 # Affichage des cartes du croupier print("Cartes du croupier: ") Print_Cartes(Cartes_Croupier, False) print("Score du croupier = ", Score_Croupier) time.sleep(2) print("Appuyez sur la touche 'Entrée' pour continuer.") input() # Cas ou le croupier dépasse 21 if Score_Croupier > 21: print("Vos cartes sont: ") Print_Cartes(Cartes_Joueur, False) print("Votre score est de ", Score_Joueur) time.sleep(1) print("Le score du croupier dépasse 21 !(Score du croupier:",Score_Croupier,") Il est donc disqualifié ! Vous remportez donc la victoire !") time.sleep(1) print("|---------------Fin de la partie---------------|") Jouer_Encore() # Cas ou le croupier a un Blackjack if Score_Croupier == 21: print("Vos cartes sont: ") Print_Cartes(Cartes_Joueur, False) print("Votre score est de ", Score_Joueur) time.sleep(1) print("LE CROUPIER A OBTENU UN BLACKJACK !!! Le croupier remporte la victoire !") time.sleep(1) print("|---------------Fin de la partie---------------|") Jouer_Encore() # Cas ou il y a égalité if Score_Croupier == Score_Joueur: time.sleep(1) print("Vos cartes sont: ") Print_Cartes(Cartes_Joueur, False) print("Votre score est de ", Score_Joueur) time.sleep(1) print("EGALITE ! (",Score_Joueur,"=",Score_Croupier,")") time.sleep(1) print("|---------------Fin de la partie---------------|") Jouer_Encore() # Cas ou le joueur gagne car le plus proche du 21 elif Score_Joueur > Score_Croupier: time.sleep(1) print("Vos cartes sont: ") Print_Cartes(Cartes_Joueur, False) print("Votre score est de ", Score_Joueur) time.sleep(1) print("Votre score est le plus proche du 21 (",Score_Joueur,">",Score_Croupier,"), vous remportez donc la victoire !") time.sleep(1) print("|---------------Fin de la partie---------------|") Jouer_Encore() # Cas ou le croupier gagne car le plus proche du 21 else: time.sleep(1) print("Vos cartes sont: ") Print_Cartes(Cartes_Joueur, False) print("Votre score est de ", Score_Joueur) time.sleep(1) print("Le score du croupier est le plus proche du 21 (",Score_Croupier,">",Score_Joueur,"), Le croupier remporte donc la victoire !") time.sleep(1) print("|---------------Fin de la partie---------------|") Jouer_Encore() # Attribution des suites et des valeurs des cartes if __name__ == '__main__': # Création des types de suite Suites = ["Piques", "Coeurs", "Trèfles", "Carreaux"] # Création des valeurs de suite Valeurs_Suites = {"Piques":"\u2664", "Coeurs":"\u2661", "Trèfles": "\u2667", "Carreaux": "\u2662"} # Création du type de carte Cartes = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "D", "R"] # Définition des valeurs des cartes Valeurs_Cartes = {"A": 11, "2":2, "3":3, "4":4, "5":5, "6":6, "7":7, "8":8, "9":9, "10":10, "J":10, "D":10, "R":10} # Création du deck de carte Deck = [] # Boucle pour chaque type de suite for Suite in Suites: # Boucle pour chaque type de carte dans une suite for Carte in Cartes: # Ajout d'une carte au deck Deck.append(carte(Valeurs_Suites[Suite], Carte, Valeurs_Cartes[Carte])) # Lancement d'une partie de Blackjack Blackjack_Jeu(Deck)