Skip to content

Instantly share code, notes, and snippets.

@LoanCB
Created November 13, 2021 07:53
Show Gist options
  • Save LoanCB/cb332423566f980519e9f5aecb6057fc to your computer and use it in GitHub Desktop.
Save LoanCB/cb332423566f980519e9f5aecb6057fc to your computer and use it in GitHub Desktop.
Projet algorithmique de première année de bachelor informatique à ESGI Lyon ~ Printemps 2021
############################################## Librairies #################################################
import os, platform, colorama, random
from colorama import Fore, Style
#############################################################################################################
############################################## Fonctions ##################################################
# Suppression de l'écran
def clearCmd():
if platform.system() == "Windows":
os.system("cls")
else:
os.system("clear")
# Afficher le tableau
def afficherPlateau():
for ligne in plateau:
for x in ligne:
print(x[0][0:6], " ", end=" ")
print("\n")
#Phrases de l'initialisation du tour
def afficherInitialisation():
clearCmd()
print(Style.BRIGHT + "**********\n* Joueur *\n**********\n" + Style.RESET_ALL)
print("C'est au tour de " + Style.BRIGHT + joueur + Style.RESET_ALL + " de jouer\n")
print(Style.BRIGHT + "*********\n* Pions *\n*********\n\n" + Style.RESET_ALL + couleurJ1 + joueur1 + Style.RESET_ALL + ":\nPetit pions : " + Style.BRIGHT + str(listePionsJ1[1]) + Style.RESET_ALL + " ; Moyen pions : " + Style.BRIGHT + str(listePionsJ1[2]) + Style.RESET_ALL + " ; Grand pions : " + Style.BRIGHT + str(listePionsJ1[3]) + Style.RESET_ALL + "\n\n" + couleurJ2 + joueur2 + Style.RESET_ALL + ":\nPetit pions : " + Style.BRIGHT + str(listePionsJ2[1]) + Style.RESET_ALL + " ; Moyen pions : " + Style.BRIGHT + str(listePionsJ2[2]) + Style.RESET_ALL + " ; Grand pions : " + Style.BRIGHT + str(listePionsJ2[3]) + Style.RESET_ALL + "\n\n")
print(Style.BRIGHT + "***********\n* plateau *\n***********\n" + Style.RESET_ALL)
afficherPlateau()
print(Style.BRIGHT + "\n**********\n* Action *\n**********\n" + Style.RESET_ALL)
#Test du placement d'un pion sur le plateau
def testPlacementPion(listePions, choixTaille, plateau, choixLigne, choixColonne, choixLigneAncien, choixColonneAncien, choixAction, couleurJ, nombreJoueur):
afficherInitialisation()
if listePions[choixTaille] > 0:
if int(plateau[choixLigne][choixColonne][0][5]) < choixTaille:
if choixAction == "ajouter":
listePions[choixTaille] -= 1
elif choixAction == "deplacer":
plateau[choixLigneAncien][choixColonneAncien].pop(0)
else:
print("Erreur : Test emplacement + taille : accepter emplacement pion")
exit()
plateau[choixLigne][choixColonne].insert(0, couleurJ + str(choixTaille) + nombreJoueur + Style.RESET_ALL)
ok = "position9"
ok2 = "position1"
else:
if choixAction == "ajouter":
print("Vous ne pouvez pas poser un pion de cette taille !")
ok = "position6"
ok2 = "position1"
elif choixAction == "deplacer":
print("Vous ne pouvez pas deplacer votre pion ici car sa taille ne le permet pas !")
ok = "position8"
ok2 = "position1"
else:
print(Fore.RED + "Erreur : Test emplacement + taille : refus emplacement pion" + Style.RESET_ALL)
exit()
else:
print("Vous n'avez plus de pieces de cette taille")
ok = "position6"
ok2 = "position1"
return ok, ok2
#############################################################################################################
####################################### Initialisation des variables ######################################
#Variables qui ne doit être initialisé qu'une seule fois
programme = True
couleurJ1 = Fore.BLUE
couleurJ2 = Fore.GREEN
reglesDeplacement = "oui"
joueurAlea = "oui"
while programme:
plateau = [
[[Fore.WHITE + "/"], [Fore.WHITE + "A"], [Fore.WHITE + "B"], [Fore.WHITE + "C"]],
[[Fore.WHITE + "3"], [Fore.WHITE + "00"], [Fore.WHITE + "00"], [Fore.WHITE + "00"]],
[[Fore.WHITE + "2"], [Fore.WHITE + "00"], [Fore.WHITE + "00"], [Fore.WHITE + "00"]],
[[Fore.WHITE + "1"], [Fore.WHITE + "00"], [Fore.WHITE + "00"], [Fore.WHITE + "00"]]
]
jeu, menu, start, regles, option = True, True, True, False, False
cases = ["A1", "B1", "C1", "A2", "B2", "C2", "A3", "B3", "C3"]
tailles = [1, 2, 3]
listeColonne = ["0", "A", "B", "C"]
listeLigne = ["0", "3", "2", "1"]
listePionsJ1 = [0, 2, 2, 2]
listePionsJ2 = [0, 2, 2, 2]
listeCouleurs = [Fore.RED, Fore.GREEN, Fore.YELLOW, Fore.BLUE, Fore.MAGENTA, Fore.CYAN]
choixLigneAncien, choixColonneAncien = 0, 0
#############################################################################################################
################################################### Start ###################################################
while start:
clearCmd()
# Menu
while menu:
ok = "position20"
print(Style.BRIGHT + "********\n* menu *\n********\n" + Style.RESET_ALL)
print("Jouer")
print("Regles")
print("Options")
print("Quitter\n")
# Position 20 : Choix dans le menu
while ok == "position20":
choixMenu = input("Veuillez indiquer ce que vous voulez faire : ")
if choixMenu == "jouer":
menu, start, debut = False, False, True
ok = "positionEnd"
elif choixMenu == "regles":
menu, regles = False, True
ok = "positionEnd"
elif choixMenu == "options":
menu, option = False, True
ok = "positionEnd"
elif choixMenu == "quitter":
print("Arret du jeu")
print("Cree par Loan CB")
exit()
else:
print("Veuillez rentrer une commande valide (tout en minuscule)")
clearCmd()
# Règles
while regles:
print(Style.BRIGHT + "*************\n* BIENVENUE *\n*************\n" + Style.RESET_ALL)
print("Découvrez les règles du morpion amélioré ! Idéal pour passer le temps entre petits et grands.\n")
print(Style.BRIGHT + "**************\n* LES REGLES *\n**************\n" + Style.RESET_ALL)
print("Comment jouer ?\n")
print("Pour jouer une partie de morpion amélioré c’est très simple.\n\n Chacun des joueurs possède 6 pions de tailles différentes commençant par petit, puis moyen et enfin grand.\nLes deux joueurs auront donc 2 pions de chaque taille. Le but du jeu est d'aligner avant son adversaire 3 pions \nidentiques hozizontalement, verticalement ou en diagonale.Les deux joueurs possèdent une couleur unique pour les \ndifférencier. La partie se termine lorsque l'un des joueurs réussi à aligner ses pions.\n\n Néanmoins il y a une petite variante sur ce mode de jeu, comme dit précédemment un joueur possède 3 pions de différente taille, ce qui lui permet de manger le pion adverse si et seulement si le pion à manger est plus petit. Par exemple le joueur 1 possède un grand pion il peut donc manger un pion de taille moyenne et un petit pion.\nPour plus de stratégie vous pouvez également manger votre propre pion si celui-ci est de taille inférieure à celui que vous désirez placer.\n")
print("Pour finir vous pouvez entrer \"retour\" si vous voulez retourner en arriere pour changer l'emplacement du pion par exemple. Bonne chance !\n")
input("Appuyez sur entrer pour continuer")
regles = False
menu = True
# Option
while option:
ok = "position21"
print(Style.BRIGHT + "**********\n* Options *\n**********\n" + Style.RESET_ALL)
print("Ici vous pouvez modifier des propriete du jeu. Entrez le numero indiquer au debut pour changer sa propriete. Entrez \"retour\" pour revenir au menu\n")
print("1 - Changer la couleur des joueurs")
print("2 - Desactiver la regle permettant de deplacer des pieces du plateau")
print("3 - Choix du joueur qui commence\n")
# Position 21 : Choix des options
while ok == "position21":
choixPropriete = input("\nVotre choix : ")
if choixPropriete == "1":
print("\nVous avez choisi de changer la couleur des joueurs. Chaque couleur est representee par un chiffre, il vous suffit d'entrer le chiffre correspondant a la couleur que vous voulez.\n")
print("1 : rouge ; 2 : vert ; 3 : jaune ; 4 : bleu ; 5 : violet ; 6 : turquoise\n")
ok2 = "position20"
# Position 20 b : Changement de couleurs
while ok2 == "position20":
try:
couleurJ1 = int(input("Entrez la couleur du joueur 1 : "))
couleurJ2 = int(input("Entrez la couleur du joueur 2 : "))
except:
print("Veuillez entrer des chiffres !")
if couleurJ1 == couleurJ2:
print("Veuillez choisir 2 couleurs differentes !")
elif (couleurJ1 < 1 and couleurJ1 > 7 ) or (couleurJ2 > 7 and couleurJ2 < 1):
print("L'une des couleurs choisie n'existe pas")
else:
couleurJ1 = listeCouleurs[couleurJ1 - 1]
couleurJ2 = listeCouleurs[couleurJ2 - 1]
option = False
ok2 = "positionEnd"
elif choixPropriete == "2":
if reglesDeplacement == "oui":
print("La regle permettant de deplacer les pions vient d'etre desactivee")
reglesDeplacement = "non"
option = False
elif reglesDeplacement == "non":
print("La regle permettant de deplacer les pions vient d'etre reactivee")
reglesDeplacement = "oui"
option = False
else:
print(Fore.RED + "Erreur : Position 20 propriete 2" + Style.RESET_ALL)
exit()
elif choixPropriete == "3":
if joueurAlea == "oui":
print("Le joueur qui commence est choisi par les joueurs")
joueurAlea = "non"
elif joueurAlea == "non":
print("Le joueur qui commence est choisi aleatoirement")
joueurAlea = "oui"
else:
print(Fore.RED + "Erreur : position 20 propriete 3" + Style.RESET_ALL)
elif choixPropriete == "retour":
option = False
menu = True
ok = "positionEnd"
else:
print("Aucune propriete ne possede ce numero")
#############################################################################################################
######################################## Initialisation des joueurs #######################################
ok, ok2 = "position1", "position1"
while debut:
# Position 1 : Choix des noms
while ok == "position1":
clearCmd()
print(Style.BRIGHT + "******************************\n* INITIALISATION DES JOUEURS *\n******************************\n" + Style.RESET_ALL)
joueur1 = input("Veuillez entrer le nom du premier joueur : ")
joueur2 = input("Veuillez entrer le nom du second joueur : ")
if joueur1 == joueur2:
print("Veuiller choisir 2 noms de joueur différent !")
else:
ok = "position2"
# Position 2 : Choix du premier joueur
if joueurAlea == "non":
while ok == "position2":
joueur = input("Veuillez indiquer le nom du joueur qui commence : ")
if joueur == "retour":
ok = "position1"
elif joueur != joueur1 and joueur != joueur2:
print("Veuillez indiquer un nom de joueur existant !")
else:
ok = "position3"
debut = False
elif joueurAlea == "oui":
if random.randint(1, 2) == 1:
joueur = joueur1
else:
joueur = joueur2
ok = "position3"
debut = False
#############################################################################################################
############################################## Début du jeu ###############################################
while jeu:
# Position 1B : Actions du joueurs
while ok2 == "position1":
# Position 3 : Initialisation du tour
while ok == "position3":
afficherInitialisation()
if reglesDeplacement == "oui":
ok = "position4"
elif reglesDeplacement == "non":
ok = "position5"
choixAction = "ajouter"
else:
print(Fore.RED + "Erreur : Position 3" + Style.RESET_ALL)
exit()
# Position 4 : Choix de l'action
while ok == "position4":
choixAction = input("Choisissez l'action à réaliser : ")
if choixAction == "ajouter":
ok = "position5"
elif choixAction == "deplacer":
ok = "position7"
elif choixAction == "retour":
print("Vous ne pouvez pas executer cette commande ici")
else:
print("Veillez indiquer une action existante : ajouter, deplacer")
# Position 5 : Choix de l'emplacement {Ajouter}
while ok == "position5":
choixCase = input("Choisissez une case : ")
if choixCase in cases:
choixColonne = listeColonne.index(choixCase[0])
choixLigne = listeLigne.index(choixCase[1])
ok = "position6"
elif choixCase == "retour":
ok = "position3"
else:
print("Cette case n'existe pas ! Commencez par écrire la lettre (colonne) puis le chiffre (ligne) sans espace et faites attention aux majuscules\n")
# Position 6 : Choix de la taille {Ajouter}
while ok == "position6":
choixTaille = input("Choisissez une taille de pion : ")
if choixTaille == "retour":
afficherInitialisation()
ok = "position5"
else:
try:
choixTaille = int(choixTaille)
ok = "positionEnd"
ok2 = "position2"
except:
print("Veuillez entrer un chiffre !")
# Position 7 : Ancien emplacement {Déplacer}
while ok == "position7":
choixCase = input("Choisissez l'emplacement du pion à déplacer : ")
if choixCase in cases:
choixColonneAncien = listeColonne.index(choixCase[0])
choixLigneAncien = listeLigne.index(choixCase[1])
if joueur == joueur1:
if plateau[choixLigneAncien][choixColonneAncien][0][6] == "1":
pion = plateau[choixLigneAncien][choixColonneAncien][0]
ok = "position8"
else:
print("Vous ne pouvez pas déplacer un pion qui ne vous appartient pas !")
elif joueur == joueur2:
if plateau[choixLigneAncien][choixColonneAncien][0][6] == "2":
pion = plateau[choixLigneAncien][choixColonneAncien][0]
ok = "position8"
else:
print("Vous ne pouvez pas déplacer un pion qui ne vous appartient pas !")
else:
print(Fore.RED + "Erreur : Position 7" + Style.RESET_ALL)
exit()
elif choixCase == "retour":
ok = "position3"
else:
print("Cette case n'existe pas ! Commencez par écrire la lettre (colonne) puis le chiffre (ligne) sans espace et faites attention aux majuscules\n")
# Position 8 : Nouvel emplacement {Déplacer}
while ok == "position8":
choixCase = input("Choisissez le nouvel emplacement du pion : ")
if choixCase in cases:
choixColonne = listeColonne.index(choixCase[0])
choixLigne = listeLigne.index(choixCase[1])
choixTaille = int(pion[5])
ok = "positionEnd"
ok2 = "position2"
elif choixCase == "retour":
afficherInitialisation()
ok = "position7"
else:
print("Cette case n'existe pas ! Commencez par écrire la lettre (colonne) puis le chiffre (ligne) sans espace et faites attention aux majuscules\n")
# Test emplacement + taille
if choixTaille in tailles:
if joueur == joueur1:
ok, ok2 = testPlacementPion(listePionsJ1, choixTaille, plateau, choixLigne, choixColonne, choixLigneAncien, choixColonneAncien, choixAction, couleurJ1, "1")[0], testPlacementPion(listePionsJ1, choixTaille, plateau, choixLigne, choixColonne, choixLigneAncien, choixColonneAncien, choixAction, couleurJ1, "1")[1]
elif joueur == joueur2:
ok, ok2 = testPlacementPion(listePionsJ2, choixTaille, plateau, choixLigne, choixColonne, choixLigneAncien, choixColonneAncien, choixAction, couleurJ2, "2")[0], testPlacementPion(listePionsJ2, choixTaille, plateau, choixLigne, choixColonne, choixLigneAncien, choixColonneAncien, choixAction, couleurJ2, "2")[1]
else:
print(Fore.RED + "Erreur : Test emplacement + taille : Condition joueur" + Style.RESET_ALL)
exit()
else:
print("Veuillez renseigner une taille existante : 1, 2 ou 3 !")
ok = "position6"
ok2 = "position1"
# Test condition de victoire
for i in range(1, 4):
if (plateau[i][1][0][6] == plateau[i][2][0][6] == plateau[i][3][0][6] != "0")\
or (plateau[1][i][0][6] == plateau[2][i][0][6] == plateau[3][i][0][6] != "0")\
or (plateau[1][1][0][6] == plateau[2][2][0][6] == plateau[3][3][0][6] != "0")\
or (plateau[3][1][0][6] == plateau[2][2][0][6] == plateau[1][3][0][6] != "0"):
jeu = False
gagnant = joueur
ok = "positionVictoire"
# Test match nul
if (listePionsJ1 == listePionsJ2 == [0, 0, 0, 0]) and (reglesDeplacement == "non"):
jeu = False
ok = "positionNul"
# Position 9 : Changement de joueur
if ok == "position9":
joueur = joueur2 if joueur == joueur1 else joueur1
ok = "position3"
# Position End : Erreur dans le code
if ok == "positionEnd":
print(Fore.RED + "Erreur : position end activée" + Style.RESET_ALL)
exit()
clearCmd()
print(Style.BRIGHT + "************\n* Resultat *\n************\n" + Style.RESET_ALL)
afficherPlateau()
# Position Victoire : Un joueur a gagné
if ok == "positionVictoire":
print(f"\nBravo à {Style.BRIGHT + gagnant + Style.RESET_ALL} d'avoir remporté la partie !")
# Position Nul : Match nul
elif ok == "positionNul":
print("Match nul : Il ne reste plus de pions disponible :(")
else:
print(Fore.RED + "Erreur : position Victoire & Nul" + Style.RESET_ALL)
exit()
input("\nAppyer sur entrer pour continuer")
start, menu = True, True
#############################################################################################################
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment