Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- # Permet d'initialiser une matrice qui contiendra les coordonnées des points ainsi que les pions des joueurs
- def creer_matrice(grille):
- # On crée une matrice qui contient 10 lignes
- matrice = [None] * 10
- # On rajoute 10 colonnes remplies de "0" à chaque ligne de la matrice
- for ligne in range(10):
- matrice[ligne] = [0] * 10
- # Le premier élément de la matrice doit être vide
- matrice[0][0] = ' '
- # On rajoute les coordonées de la matrice
- matrice = ajouter_coordonnees(matrice)
- # On rajoute les bordures de la matrice
- matrice = ajouter_bordures(matrice)
- # On rajoute les pions au sein de la matrice
- matrice = ajouter_pions(grille, matrice)
- return matrice
- # Permet d'ajouter les coordonnées à la matrice que l'on a crée
- def ajouter_coordonnees(matrice):
- # On initialise caractere = 65, ce qui correspond au code unicode de la lettre 'A' des coordonnées
- caractere = 65
- # On initialise compteur = 1, ce qui correspond au chiffre 1 des coordonnées
- compteur = 1
- for i in range(1, 10):
- # On ajoute chr(caractere) et compteur aux coordonnées puis on les incrémente
- if (i % 2 == 0):
- matrice[0][i] = ' ' + str(compteur) + ' '
- matrice[i][0] = chr(caractere)
- caractere += 1
- compteur += 1
- # On ajoute des espaces vides entre deux coordonnées
- else:
- matrice[0][i] = ' '
- matrice[i][0] = ' '
- return matrice
- # Permet d'ajouter les bordures de la matrice que l'on a crée, c'est à dire les chaines de caractères '--' et ' | '
- def ajouter_bordures(matrice):
- # Nombres de lignes et de colonnes de la matrice (10)
- nb_lignes = len(matrice)
- nb_colonnes = len(matrice[0])
- # Ajout des bordures à la matrice
- ligne = 1
- while (ligne < nb_lignes):
- colonne = 1
- # Chaque "--" est ajouté pour un numéro de ligne impair, chaque " | " est ajouté pour un numéro de ligne pair et un numéro de colonne impair
- while (colonne < nb_colonnes):
- if (ligne % 2 != 0):
- matrice[ligne][colonne] = "--"
- if (ligne % 2 == 0 and colonne % 2 != 0):
- matrice[ligne][colonne] = " | "
- colonne += 1
- ligne += 1
- return matrice
- # Permet d'ajouter les pions de la grille choisie à la matrice que l'on a crée.
- def ajouter_pions(grille, matrice):
- # Nombres de lignes et de colonnes de la matrice (10)
- nb_lignes = len(grille)
- nb_colonnes = len(grille[0])
- # On ajoute les pions à la matrice en faisant une translation de (x+1)*2 entre la grille et la matrice, car la matrice n'est pas de même longueur que la grille.
- for ligne in range(nb_lignes):
- for colonne in range(nb_colonnes):
- matrice[(ligne + 1) * 2][(colonne + 1) * 2] = grille[ligne][colonne]
- return matrice
- # Permet d'afficher la matrice que l'on a crée, après y avoir ajouté les coordonnées, les bordures, et les pions de la grille choisie
- def afficher_grille(matrice):
- # nombre de lignes et de colonnes de la matrice (10)
- nb_lignes = len(matrice)
- nb_colonnes = len(matrice[0])
- # On affiche chaque élément de la matrice un par un, puis on effectue un retour à la ligne lorsque l'on a parcouru toutes les colonnes d'une ligne.
- for ligne in range(nb_lignes):
- for colonne in range(nb_colonnes):
- print(matrice[ligne][colonne], end="")
- print()
- # Permet à l'utilisateur de saisir les coordonnées qu'il souhaite, en retournant ensuite la ligne et la colonne qu'il a saisi
- def saisir_coordonnees():
- print("\n Ligne : ")
- # Saisie de la ligne
- ligne = input()
- print(" \n Colonne : ")
- # Saisie de la colonne
- colonne = int(input())
- return ligne, colonne
- # Fonction de test de la fonction est_dans_grille
- def test_est_dans_grille(matrice):
- assert est_dans_grille(matrice, 'A', 1) == True, "Erreur 1"
- assert est_dans_grille(matrice, 'A', 4) == True, "Erreur 2"
- assert est_dans_grille(matrice, 'D', 4) == True, "Erreur 3"
- assert est_dans_grille(matrice, 'B', 1) == True, "Erreur 4"
- assert est_dans_grille(matrice, 'A', 9) == False, "Erreur 5"
- assert est_dans_grille(matrice, 'X', 4) == False, "Erreur 6"
- # Permet de vérifier si les coordonnées précédemment saisies par l'utilisateur sont bien valides ou non et retournant un booléen : True ou False
- def est_dans_grille(matrice, ligne, colonne):
- # Permet de vérifier si la ligne saisie se situe bien entre "A" et "D" dans l'ordre alphabétique, et que la colonne saisie se situe bien entre 1 et 10
- # On vérifie la condition : 1 <= 2 * colonne < len(matrice)) car la longueur de la matrice = 2 fois le nombre de colonnes + 2 (qui représente les bordures de début et de fin de matrice, on n'en tient pas compte car les coordonnées sont invalides à cette position)
- if (ord("A") <= ord(ligne) <= ord("D") and 1 <= 2 * colonne < len(matrice)):
- return True
- elif (ord("a") <= ord(ligne) <= ord("d") and 1 <= 2 * colonne < len(matrice)):
- return True
- else:
- return False
- # Permet d'afficher si les coordonnées sont valides ou non, et de les re-saisir au besoin, d'après la fonction est_dans_grille, avec valide = est_dans_grille(matrice, ligne, colonne)
- def affichage_validite(valide, matrice):
- while (not valide):
- print("\n Coordonnées non valides")
- ligne, colonne = saisir_coordonnees()
- valide = est_dans_grille(matrice, ligne, colonne)
- print("\n Coordonnées valides")
- grille_1 = [
- ["O", "O", "O", "O"],
- ["O", "O", "O", "O"],
- ["X", "X", "X", "X"],
- ["X", "X", "X", "X"],
- ]
- grille_2 = [
- ["O", " ", "O", "O"],
- ["O", "O", " ", "O"],
- [" ", " ", "X", "X"],
- ["X", "X", " ", "X"],
- ]
- grille_3 = [
- [" ", "O", "O", " "],
- ["O", " ", "O", " "],
- ["O", " ", " ", " "],
- ["X", " ", " ", " "],
- ]
- matrice1 = creer_matrice(grille_1)
- matrice2 = creer_matrice(grille_2)
- matrice3 = creer_matrice(grille_3)
- print("\n Début de partie :")
- afficher_grille(matrice1)
- print(" \n Milieu de partie :")
- afficher_grille(matrice2)
- print("\n Fin de partie :")
- afficher_grille(matrice3)
- test_est_dans_grille(matrice1)
- ligne, colonne = saisir_coordonnees()
- valide = est_dans_grille(matrice1, ligne, colonne)
- affichage_validite(valide, matrice1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement