Advertisement
Black_Albatros

power 4

May 28th, 2023
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 20.28 KB | Gaming | 0 0
  1. from colorama import Style, Fore
  2.  
  3. def affichage():
  4.         print(Style.NORMAL + Fore.GREEN +"\n――――――― MENU ―――――――\n")
  5.         print(Style.BRIGHT + Fore.MAGENTA +"1 ― Lancer une partie en mode simple")
  6.         print(Style.NORMAL + Fore.MAGENTA +"2 ― Lancer une partie en mode avancé")
  7.         print(Style.BRIGHT + Fore.RED + "3 - Lancer une partie simple contre l'ordinateur")
  8.         print(Style.NORMAL + Fore.RED + "4 - Lancer une partie avancée contre l'ordinateur")
  9.         print(Style.BRIGHT + Fore.CYAN +"5 ― Afficher les règles")
  10.         print((Style.BRIGHT + Fore.BLUE) +"6 ― Afficher les crédits")
  11.         print(Style.BRIGHT + Fore.GREEN +"7 ― Quitter\n")
  12.         print(Style.RESET_ALL)
  13.         choix = input("Entrez le numéro de votre choix : ")
  14.         return choix  
  15.  
  16.            
  17. def afficher_regles():
  18.     print(Style.NORMAL + Fore.CYAN +"\n――――――――――――――――――――――――― REGLES ―――――――――――――――――――――――――\n")
  19.     print(Style.RESET_ALL)
  20.     print("Le but du jeu est d'aligner 4 jetons de sa couleur (horizontalement, verticalement ou en diagonale) avant son adversaire.")
  21.     print("Chaque joueur joue à tour de rôle en plaçant un jeton dans une colonne.")
  22.     print("Le jeton tombe alors dans la case vide la plus basse de la colonne choisie.")
  23.     print("Si toutes les cases d'une colonne sont remplies, le joueur ne peut pas jouer dans cette colonne.")
  24.     print("Dans le mode simple, le premier joueur à aligner 4 jetons de sa couleur remporte la partie.")
  25.     print("Dans le mode avancé, le jeu continue jusqu'à ce que la grille soit pleine. Le joueur qui a fait le plus d'alignements remporte la partie.")
  26.     print("Vous pouvez également jouer en mode simple ou avancé contre l'ordinateur si vous n'avez pas de partenaire de jeu.")
  27.  
  28.        
  29. def afficher_credits():
  30.     print(Style.BRIGHT + Fore.BLUE +"\n―――――――――――――――――――― CREDITS ――――――――――――――――――――\n")
  31.     print(Style.RESET_ALL)
  32.     print("Développé par Lola Chenel, Sacha Frys et Sarah Labauge.")
  33.  
  34.        
  35. def formation(tab) :
  36.     print(Style.BRIGHT + Fore.MAGENTA +"―――――――― PUISSANCE 4 ――――――――\n")
  37.     print(Style.RESET_ALL)
  38.     l = len(tab)
  39.     c = len(tab[0])
  40.     print('----' * c)
  41.     for i in range(l):
  42.         print('| ', end='')
  43.         for j in range(c):
  44.             if tab[i][j] == 1:
  45.                 print(Style.BRIGHT + Fore.RED + "X"+ Style.RESET_ALL , end= ' | ')
  46.             elif tab[i][j] == 2:
  47.                 print(Style.BRIGHT + Fore.YELLOW + "O"+ Style.RESET_ALL, end=' | ')
  48.             else:
  49.                 print(" ", end=' | ')
  50.         print()
  51.     print('| 1 | 2 | 3 | 4 | 5 | 6 | 7 |')
  52.    
  53.        
  54. def jouer_mode_classique():
  55.     # code principal
  56.     from colorama import Style, Fore
  57.     joueur1 = input(Style.BRIGHT + Fore.RED + "Nom du joueur 1 : ")
  58.     print(Style.RESET_ALL)
  59.     joueur2 = input(Style.BRIGHT + Fore.YELLOW + "Nom du joueur 2 : ")
  60.     print(Style.RESET_ALL)
  61.     liste_joueur = [joueur1, joueur2]
  62.    
  63.     grille = []
  64.     for i in range(6):
  65.         ligne = []
  66.         for j in range(7):
  67.             ligne.append(0)
  68.         grille.append(ligne)
  69.     formation(grille)
  70.  
  71.     is_ended = False
  72.     tour = 0
  73.     while(not is_ended):
  74.         if tour < 42:
  75.             joueur = tour%2 + 1
  76.             col = input(liste_joueur[tour%2] + ", choisissez une colonne : " )
  77.             while not col.isnumeric() or int(col) < 1 or int(col) > 7:
  78.                 print("Colonne invalide. Veuillez choisir une colonne entre 1 et 7.")
  79.                 col = input(liste_joueur[tour%2] + ", choisissez une colonne : " )
  80.             col = int(col)
  81.         else :
  82.             is_ended = True
  83.             print ("La partie est terminée. Match nul.")
  84.    
  85.         # Obtenir la prochaine ligne disponible dans la colonne sélectionnée
  86.         row = 5
  87.         while row >= 0:
  88.             if grille[row][col-1] == 0:
  89.                 break
  90.             row -= 1
  91.    
  92.         # Vérifier si la colonne sélectionnée est pleine
  93.         if row < 0:
  94.             print("La colonne est pleine. Veuillez choisir une autre colonne.")
  95.         else:
  96.             # Placez la pièce du joueur sur la cellule sélectionnée
  97.             grille[row][col-1] = joueur
  98.             formation(grille)
  99.             tour = tour + 1
  100.    
  101.    
  102.     # Vérifier si un joueur a gagné
  103.         # Vérifier la victoire horizontale
  104.         for row in range(6):
  105.             for col in range(4):
  106.                 if grille[row][col] == grille[row][col+1] == grille[row][col+2] == grille[row][col+3] and grille[row][col] == joueur:
  107.                     print("Le joueur", liste_joueur[(tour+1)%2], "a gagné.")
  108.                     is_ended = True
  109.            
  110.         # Vérifier la victoire verticale
  111.         for col in range(7):
  112.             for row in range(3):
  113.                 if grille[row][col] == grille[row+1][col] == grille[row+2][col] == grille[row+3][col] and grille[row][col] == joueur:
  114.                     print("Le joueur", liste_joueur[(tour+1)%2], "a gagné.")
  115.                     is_ended = True    
  116.                          
  117.         # Vérifier la victoire diagonale à pente positive
  118.         for row in range(3):
  119.             for col in range(4):
  120.                 if grille[row][col] == grille[row+1][col+1] == grille[row+2][col+2] == grille[row+3][col+3] and grille[row][col] == joueur:
  121.                     print("Le joueur", liste_joueur[(tour+1)%2], "a gagné.")
  122.                     is_ended = True
  123.                        
  124.         # Vérifier la victoire diagonale à pente négative
  125.         for row in range(3):
  126.             for col in range(6, 2, -1):
  127.                 if grille[row][col] == grille[row+1][col-1] == grille[row+2][col-2] == grille[row+3][col-3] and grille[row][col] == joueur:
  128.                     print("Le joueur", liste_joueur[(tour+1)%2], "a gagné.")
  129.                     is_ended = True
  130.  
  131.                        
  132. def jouer_mode_avancé():
  133.     from colorama import Style, Fore
  134.     joueur1 = input(Style.BRIGHT + Fore.RED + "Nom du joueur 1 : ")
  135.     print(Style.RESET_ALL)
  136.     joueur2 = input(Style.BRIGHT + Fore.YELLOW + "Nom du joueur 2 : ")
  137.     print(Style.RESET_ALL)
  138.     liste_joueur = [joueur1, joueur2]
  139.    
  140.     grille = []
  141.     for i in range(6):
  142.         ligne = []
  143.         for j in range(7):
  144.             ligne.append(0)
  145.         grille.append(ligne)
  146.     formation(grille)
  147.  
  148.     is_ended = False
  149.     tour = 0
  150.     tableau = [0,0] #j'ajoute une liste
  151.     while(not is_ended):
  152.         if tour < 42:
  153.             joueur = tour%2 + 1
  154.             col = input(liste_joueur[tour%2] + ", choisissez une colonne : " )
  155.             while not col.isnumeric() or int(col) < 1 or int(col) > 7:
  156.                 print("Colonne invalide. Veuillez choisir une colonne entre 1 et 7.")
  157.                 col = input(liste_joueur[tour%2] + ", choisissez une colonne : " )
  158.             col = int(col)
  159.         else :
  160.             is_ended = True
  161.             if tableau == [0,0]:
  162.                 print ("La partie est terminée. Aucun alignement. Match nul.")
  163.             else:
  164.                 if tableau[0] == tableau[1]:
  165.                     print ("La partie est terminée. Même nombre d'alignements. Match nul.")
  166.                 elif tableau[0] > tableau[1]:
  167.                     print (joueur1 + " a gagné.")
  168.                 elif tableau[0] < tableau[1]:
  169.                     print (joueur2 + " a gagné.")
  170.    
  171.         # Obtenir la prochaine ligne disponible dans la colonne sélectionnée
  172.         row = 5
  173.         while row >= 0:
  174.             if grille[row][col-1] == 0:
  175.                 break
  176.             row -= 1
  177.    
  178.         # Vérifier si la colonne sélectionnée est pleine
  179.         if row < 0:
  180.             print("La colonne est pleine. Veuillez choisir une autre colonne.")
  181.         else:
  182.             # Placez la pièce du joueur sur la cellule sélectionnée
  183.             grille[row][col-1] = joueur
  184.             formation(grille)
  185.             tour = tour + 1
  186.    
  187.    
  188.     # Vérifier si un joueur a gagné
  189.         # Vérifier la victoire horizontale
  190.         for row in range(6):
  191.             for col in range(4):
  192.                 if grille[row][col] == grille[row][col+1] == grille[row][col+2] == grille[row][col+3] and grille[row][col] == joueur:
  193.                     print("Le joueur", liste_joueur[(tour+1)%2], "a fait un alignement.")
  194.                     tableau[(tour+1)%2] +=1
  195.            
  196.         # Vérifier la victoire verticale
  197.         for col in range(7):
  198.             for row in range(3):
  199.                 if grille[row][col] == grille[row+1][col] == grille[row+2][col] == grille[row+3][col] and grille[row][col] == joueur:
  200.                     print("Le joueur", liste_joueur[(tour+1)%2], "a fait un alignement.")
  201.                     tableau[(tour+1)%2] +=1
  202.                          
  203.         # Vérifier la victoire diagonale à pente positive
  204.         for row in range(3):
  205.             for col in range(4):
  206.                 if grille[row][col] == grille[row+1][col+1] == grille[row+2][col+2] == grille[row+3][col+3] and grille[row][col] == joueur:
  207.                     print("Le joueur", liste_joueur[(tour+1)%2], "a fait un alignement.")
  208.                     tableau[(tour+1)%2] +=1
  209.    
  210.         # Vérifier la victoire diagonale à pente négative
  211.         for row in range(3):
  212.             for col in range(6, 2, -1):
  213.                 if grille[row][col] == grille[row+1][col-1] == grille[row+2][col-2] == grille[row+3][col-3] and grille[row][col] == joueur:
  214.                     print("Le joueur", liste_joueur[(tour+1)%2], "a fait un alignement.")
  215.                     tableau[(tour+1)%2] +=1
  216.                    
  217.                    
  218.         # comment compter le nb d'alignements et annoncer gagnant à la fin?
  219.         print(f"Score joueur {liste_joueur[0]} : {tableau[0]} alignement(s)")
  220.         print(f"Score joueur {liste_joueur[1]} : {tableau[1]} alignement(s)")
  221.         tableau[tour%2] = 0
  222.        
  223.  
  224. import random
  225. def jouer_mode_simple_ordi():
  226.     # code principal
  227.     from colorama import Style, Fore
  228.     joueur = input(Style.BRIGHT + Fore.RED + "Nom du joueur 1 : ")
  229.     print(Style.BRIGHT + Fore.CYAN + " VS ")
  230.     print(Style.BRIGHT + Fore.YELLOW + "Ordinateur !")
  231.     print(Style.RESET_ALL)
  232.     liste_joueur = [joueur, "Ordinateur"]
  233.    
  234.     grille = []
  235.     for i in range(6):
  236.         ligne = []
  237.         for j in range(7):
  238.             ligne.append(0)
  239.         grille.append(ligne)
  240.     formation(grille)
  241.  
  242.     is_ended = False
  243.     tour = 0
  244.     while(not is_ended):
  245.         if tour < 42:
  246.             joueur = tour%2 + 1 # c'est ici qui doit etre cette ligne de code
  247.             if tour%2 == 0:
  248.                 col = input(liste_joueur[tour%2] + ", choisissez une colonne : " )
  249.                 while not col.isnumeric() or int(col) < 1 or int(col) > 7:
  250.                     print("Colonne invalide. Veuillez choisir une colonne entre 1 et 7.")
  251.                     col = input(liste_joueur[tour%2] + ", choisissez une colonne : " )
  252.                 col = int(col)
  253.             else:
  254.             # ordi
  255.                 col = random.randint(1,7)
  256.         else :
  257.             is_ended = True
  258.             print ("La partie est terminée. Match nul.")
  259.    
  260.         # Obtenir la prochaine ligne disponible dans la colonne sélectionnée
  261.         row = 5
  262.         while row >= 0:
  263.             if grille[row][col-1] == 0:
  264.                 break
  265.             row -= 1
  266.    
  267.         # Vérifier si la colonne sélectionnée est pleine
  268.         if row < 0:
  269.             print("La colonne est pleine. Veuillez choisir une autre colonne.")
  270.         else:
  271.             # Placez la pièce du joueur sur la cellule sélectionnée
  272.             grille[row][col-1] = joueur
  273.             formation(grille)
  274.             tour = tour + 1
  275.        
  276.    
  277.     # Vérifier si un joueur a gagné
  278.         # Vérifier la victoire horizontale
  279.         for row in range(6):
  280.             for col in range(4):
  281.                 if grille[row][col] == grille[row][col+1] == grille[row][col+2] == grille[row][col+3] and grille[row][col] == joueur:
  282.                     print("Le joueur", liste_joueur[(tour+1)%2], "a gagné.")
  283.                     is_ended = True
  284.            
  285.         # Vérifier la victoire verticale
  286.         for col in range(7):
  287.             for row in range(3):
  288.                 if grille[row][col] == grille[row+1][col] == grille[row+2][col] == grille[row+3][col] and grille[row][col] == joueur:
  289.                     print("Le joueur", liste_joueur[(tour+1)%2], "a gagné.")
  290.                     is_ended = True    
  291.                          
  292.         # Vérifier la victoire diagonale à pente positive
  293.         for row in range(3):
  294.             for col in range(4):
  295.                 if grille[row][col] == grille[row+1][col+1] == grille[row+2][col+2] == grille[row+3][col+3] and grille[row][col] == joueur:
  296.                     print("Le joueur", liste_joueur[(tour+1)%2], "a gagné.")
  297.                     is_ended = True
  298.                        
  299.         # Vérifier la victoire diagonale à pente négative
  300.         for row in range(3):
  301.             for col in range(6, 2, -1):
  302.                 if grille[row][col] == grille[row+1][col-1] == grille[row+2][col-2] == grille[row+3][col-3] and grille[row][col] == joueur:
  303.                     print("Le joueur", liste_joueur[(tour+1)%2], "a gagné.")
  304.                     is_ended = True
  305.    
  306.                        
  307. def jouer_mode_avancé_ordi():
  308.     # code principal
  309.     from colorama import Style, Fore
  310.     joueur = input(Style.BRIGHT + Fore.RED + "Nom du joueur 1 : ")
  311.     print(Style.BRIGHT + Fore.CYAN + " VS ")
  312.     print(Style.BRIGHT + Fore.YELLOW + "Ordinateur !")
  313.     print(Style.RESET_ALL)
  314.     liste_joueur = [joueur, "Ordinateur"]
  315.    
  316.     grille = []
  317.     for i in range(6):
  318.         ligne = []
  319.         for j in range(7):
  320.             ligne.append(0)
  321.         grille.append(ligne)
  322.     formation(grille)
  323.  
  324.     is_ended = False
  325.     tour = 0
  326.     tableau = [0,0] #j'ajoute une liste
  327.     while(not is_ended):
  328.         if tour < 42:
  329.             joueur = tour%2 + 1 # c'est ici qui doit etre cette ligne de code
  330.             if tour%2 == 0:
  331.                 col = input(liste_joueur[tour%2] + ", choisissez une colonne : " )
  332.                 while not col.isnumeric() or int(col) < 1 or int(col) > 7:
  333.                     print("Colonne invalide. Veuillez choisir une colonne entre 1 et 7.")
  334.                     col = input(liste_joueur[tour%2] + ", choisissez une colonne : " )
  335.                 col = int(col)
  336.             else:
  337.             # ordi
  338.                 col = random.randint(1,7)
  339.         else :
  340.             is_ended = True
  341.             if tableau == [0,0]:
  342.                 print ("La partie est terminée. Aucun alignement. Match nul.")
  343.             else:
  344.                 if tableau[0] == tableau[1]:
  345.                     print ("La partie est terminée. Même nombre d'alignements. Match nul.")
  346.                 elif tableau[0] > tableau[1]:
  347.                     print (joueur + " a gagné.")
  348.                 elif tableau[0] < tableau[1]:
  349.                     print ("Ordinateur a gagné.")
  350.    
  351.         # Obtenir la prochaine ligne disponible dans la colonne sélectionnée
  352.         row = 5
  353.         while row >= 0:
  354.             if grille[row][col-1] == 0:
  355.                 break
  356.             row -= 1
  357.    
  358.         # Vérifier si la colonne sélectionnée est pleine
  359.         if row < 0:
  360.             print("La colonne est pleine. Veuillez choisir une autre colonne.")
  361.         else:
  362.             # Placez la pièce du joueur sur la cellule sélectionnée
  363.             grille[row][col-1] = joueur
  364.             formation(grille)
  365.             tour = tour + 1
  366.        
  367.    
  368.     # Vérifier si un joueur a gagné
  369.         # Vérifier la victoire horizontale
  370.         for row in range(6):
  371.             for col in range(4):
  372.                 if grille[row][col] == grille[row][col+1] == grille[row][col+2] == grille[row][col+3] and grille[row][col] == joueur:
  373.                     print("Le joueur", liste_joueur[(tour+1)%2], "a fait un alignement.")
  374.                     tableau[(tour+1)%2] +=1
  375.            
  376.         # Vérifier la victoire verticale
  377.         for col in range(7):
  378.             for row in range(3):
  379.                 if grille[row][col] == grille[row+1][col] == grille[row+2][col] == grille[row+3][col] and grille[row][col] == joueur:
  380.                     print("Le joueur", liste_joueur[(tour+1)%2], "a fait un alignement.")
  381.                     tableau[(tour+1)%2] +=1
  382.                          
  383.         # Vérifier la victoire diagonale à pente positive
  384.         for row in range(3):
  385.             for col in range(4):
  386.                 if grille[row][col] == grille[row+1][col+1] == grille[row+2][col+2] == grille[row+3][col+3] and grille[row][col] == joueur:
  387.                     print("Le joueur", liste_joueur[(tour+1)%2], "a fait un alignement.")
  388.                     tableau[(tour+1)%2] +=1
  389.    
  390.         # Vérifier la victoire diagonale à pente négative
  391.         for row in range(3):
  392.             for col in range(6, 2, -1):
  393.                 if grille[row][col] == grille[row+1][col-1] == grille[row+2][col-2] == grille[row+3][col-3] and grille[row][col] == joueur:
  394.                     print("Le joueur", liste_joueur[(tour+1)%2], "a fait un alignement.")
  395.                     tableau[(tour+1)%2] +=1
  396.                    
  397.                    
  398.         # comment compter le nb d'alignements et annoncer gagnant à la fin?
  399.         print(f"Score joueur {liste_joueur[0]} : {tableau[0]} alignement(s)")
  400.         print(f"Score joueur {liste_joueur[1]} : {tableau[1]} alignement(s)")
  401.         tableau[tour%2] = 0
  402.                    
  403.        
  404. # fonction principale du programme
  405. def main():
  406.     while True:
  407.         choix = affichage()  # affichage du menu principal et récupération du choix de l'utilisateur
  408.         if choix == '1':
  409.             jouer_mode_classique()  # lancement d'une partie de puissance 4
  410.             main()
  411.         if choix == '2':
  412.             jouer_mode_avancé()
  413.             main()
  414.         if choix == '3':
  415.             jouer_mode_simple_ordi()
  416.             main()
  417.         if choix == '4':
  418.             jouer_mode_avancé_ordi()
  419.         elif choix == '5':
  420.             afficher_regles()
  421.             main()
  422.         elif choix == '6':
  423.             afficher_credits()
  424.             main()
  425.         elif choix == '7':
  426.             print(Style.BRIGHT + Fore.GREEN +"Au revoir!\n")
  427.             print(Style.RESET_ALL)
  428.             break
  429.            
  430. main()
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441. #Sauvegarder les statistiques de jeu dans un fichier csv
  442. from datetime import datetime
  443. date = datetime.now().strftime('%Y-%m-%d')
  444. heure = datetime.now().strftime('%H:%M:%S')
  445. #ID, durée, nombre de déplacements, nombre de points
  446.  
  447. import time
  448. debut = time.time() # le temps en miliseconde depuis 1 janvier 1970
  449. fin = time.time()
  450. Durée_programme = int(fin-debut)
  451. print("Mon programme a duré :",Durée_programme," secondes")
  452.  
  453. import os.path
  454. import time
  455. try:
  456.     os.makedirs("Assets/Data")
  457. except FileExistsError:
  458.     pass
  459.  
  460. #afficher les dates
  461. date =time.strftime("%d-%m-%Y")
  462. #afficher L'heure
  463. heure =time.strftime("%H:%M:%S")
  464. id_compte = 0
  465.  
  466. try:
  467.     # on ouvre le fichier en mode lecture
  468.     with open("Assets/Data/Sauvegarde.csv", "r") as fic:
  469.         pass
  470. except FileNotFoundError:
  471.     with open("Assets/Data/Sauvegarde.csv", "w") as fic:
  472.         fic.write(f"""date,{date}
  473. heure,{heure}
  474. id_compte,{0}""")
  475.  
  476. # on charge les données à partir du fichier.csv au début du programme
  477. with open("Assets/Data/Sauvegarde.csv", "r") as fic:
  478.     for  ligne in fic:
  479.         if "date" in ligne:
  480.             date = ligne[ligne.find(',')+1:]
  481.         if "heure" in ligne:
  482.             heure = ligne[ligne.find(',')+1:]
  483.         if "id_compte"in ligne:
  484.             id_compte = int(ligne[ligne.find(',')+1:])
  485. print("Dernière fois que vous avez lancé ce programme :")
  486. print("Date :",date)
  487. print("Heure :",heure)
  488. print("Nombre de parties :",id_compte)
  489.  
  490. # on sauvegarde les données à la fin du programme
  491. # sinon toutes les données dans le fichier.csv seront perdues
  492. with open("Assets/Data/Sauvegarde.csv", "w") as fic:
  493.     fic.write("date,"+time.strftime("%d-%m-%Y")+"\n")
  494.     fic.write("heure,"+time.strftime("%H:%M:%S")+"\n")
  495.     fic.write("id_compte,"+str(id_compte + 1)+"\n")
  496.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement