Coucou les amis, je viens ici vous présenter mon premier petit projet , c’est un Morpions qui se joue pour l’instant 1 contre 1 sur le même pc, mais bientôt vous pourrez jouer en 1 vs IA ou en 1 contre 1 en réseau
sans plus tarder je vous link le github : https://github.com/marc123456789/Morpions2
Des mise a jours seront faite de temps en temps pour optimiser le code ( enlever les lignes inutiles ), et sans me donner les ligne de codes donner moi des idée d’amélioration, de maintenance ( cad si il y a un bug me dire ou il est) etc.
Les 2 modes arriveront petit a petit car je suis entrée en terminal et je code que le week-end, pour novembre, les modes seront publié
PS: ceci est un projet d’entrainement pour consolider des bases et m’amuser
Projet suspendu pour l’instant ( manque de temps)
Merci d’avance d’avoir lus ce post,
Cordialement
Je viens de cloner le dépot git, mais il manque quelque chose d’important : savoir comment tu nomes les cases de la grille Parceque si on ne regarde pas le code, on ne sait pas qu’il faut noter "A1" par exemple.
J’ai aussi un problème : la commande "CLS" n’existe pas chez moi :| Je suis sous ArchLinux.
Bonjour,
Tu envisages de supprimer les lignes inutiles, voici une suggestion. Tu peux réduire cette portion de code, puisque tu as quasiment 2 fois le même bloc, une fois pour le joueur 1, et une fois pour le joueur 2 :
whileTrue:system("CLS")grille()print("c'est je tour du joueur 1 ({0})".format(j1))whileTrue:c=input(">")ifisFree(c.upper()):place(c.upper(),j1)breakelse:continuesystem("CLS")ifisWin(j1):breakgrille()print("c'est je tour du joueur 2 ({0})".format(j2))whileTrue:c=input(">")ifisFree(c.upper()):place(c.upper(),j2)breakelse:continuesystem("CLS")ifisWin(j2):break
C’est tellement la même chose, que tu as la même faute de frappe sur les 2 messages.
Merci de vos réponse, je travaille actuellement sur toute vos idée pour améliorer mon programme ( je posterai la mise à jour la semaine prochaine ),
Nommer tes fonctions en accord avec les règles du langage (snake_case) ;
Quel règles , pourrais-tu me les nommer enfin développer s’il te plaît
*Ne pas faire dépendre ton code de paramètres en dur (comme le nombre et le nom des cases qui est figé dans l’ensemble du programme) ;
Tu veut dire par la d’enlever les nom des cases ( A1, A2 …) ?
Je viens de cloner le dépot git, mais il manque quelque chose d’important : savoir comment tu nomes les cases de la grille Parceque si on ne regarde pas le code, on ne sait pas qu’il faut noter "A1" par exemple.
Se sera régler pour la prochaine mise à jour, je vais fonctionner par id (1,2,3 …)
J’ai aussi un problème : la commande "CLS" n’existe pas chez moi :| Je suis sous ArchLinux.
Je l’ai est enlever, pour que tu puisse bien utiliser mon programme
Factoriser, partout où c’est possible (ta batterie de if sur le choix du mode peut être largement simplifiée, pareil dans ta fonction isWin) ;
Un code avec tant de répétitions est inmaintenable ;
Exactement j’ai mis le moins de if possible , et pour isWin je ne sais toujours pas comment je vais le simplifié, donc se serait bien si tu pouvais me donner quelque piste d’amélioration pour cette fonction
Les règles de la PEP8, oui, comme ça a été répondu.
Je ne suis pas un nazi de la PEP8, mais la nomenclature en est la base, qui permet une certaine harmonie entre différents codes Python.
On est censé pouvoir voir au nom si l’on a affaire à une fonction ou une classe, par exemple.
C’est exactement ce que j’avais en tête.
Ici, tu as un jeu de morpion, dont la grille est plutôt standard et définie.
Mais si tu veux proposer une grille plus grande, par exemple, tu fais comment ?
Ce ne sera pas forcément ton souhait, mais là, tout ton code est fortement dépendant de cette taille de grille.
Ce qui le rend difficile à maintenir.
Tu as peut-être réduit leur nombre, mais on est loin du moins possible.
Pour ce qui est d’isWin (qui a disparu de ton dépôt Github au moment où j’écris ces lignes, j’y reviens juste en-dessous) : tu dois pouvoir observer que tu as un motif qui se répète.
Celui de vérifier que 3 cases adjacentes appartiennent à un même joueur.
Déjà, si on imagine que tu remplaces tes A1, A2, A3, B1, etc. par leurs équivalents (0, 0), (1, 0), (2, 0), (0, 1), etc.
Plus compréhensifs à mon goût (et plus facilement exploitables), on identifie facilement les cas de cases adjacentes.
Toutes les cases d’une même ligne i (c’est à dire les cases de type (i, y)) appartiennent à un même joueur ;
ou toutes les cases d’une même ligne j (les cases (x, j)) ;
la première diagonale, représentée par les cases de type (x, x) ;
la seconde diagonale, représentée par les cases de type (x, 2-x).
On réduit déjà par deux le nombre de conditions (en ajoutant deux boucles au passage).
Ce serait encore réductible, mais pas forcément avec tes connaissances actuelles.
Et c’est déjà un bon début.
Pour en revenir au dépôt, tu as demandé des avis sur ton utilisation de Python, mais pas sur celle de Git.
Au vu de ton historique de commits, j’ai bien l’impression que tu édites tes fichiers directement en ligne depuis l’interface Github.
Et que tu as tendance à ajouter des fichiers inutiles sur ton dépôt.
Alors, pour faire simple : travaille localement !
Localement, tu peux faire tout ce que tu veux.
Faire des modifications, les tester, faire des commits dans tous les sens, te tromper.
Mais une fois que tu pousses vers le dépôt, qui plus est sur la branche principale, il te faut de préférence avoir quelque chose de propre, et dans un état stable.
Quand le corps de ta fonction disparaît pendant que je consulte le code, il y a un problème.
Alors, pour faire simple : travaille localement ! Localement, tu peux faire tout ce que tu veux. Faire des modifications, les tester, faire des commits dans tous les sens, te tromper.
Je travaille localement j’ai juste fait un copier coller de mon code
Tu as peut-être réduit leur nombre, mais on est loin du moins possible.
Pour ce qui est d’isWin (qui a disparu de ton dépôt Github au moment où j’écris ces lignes, j’y reviens juste en-dessous) : tu dois pouvoir observer que tu as un motif qui se répète. Celui de vérifier que 3 cases adjacentes appartiennent à un même joueur.
Déjà, si on imagine que tu remplaces tes A1, A2, A3, B1, etc. par leurs équivalents (0, 0), (1, 0), (2, 0), (0, 1), etc. Plus compréhensifs à mon goût (et plus facilement exploitables), on identifie facilement les cas de cases adjacentes.
Toutes les cases d’une même ligne i (c’est à dire les cases de type (i, y)) appartiennent à un même joueur ;
ou toutes les cases d’une même ligne j (les cases (x, j)) ;
la première diagonale, représentée par les cases de type (x, x) ;
la seconde diagonale, représentée par les cases de type (x, 2-x).
On réduit déjà par deux le nombre de conditions (en ajoutant deux boucles au passage). Ce serait encore réductible, mais pas forcément avec tes connaissances actuelles. Et c’est déjà un bon début.
J’ai justement réfléchie a un système d’id ( cad faire sa : dict = { (0,0) : "*"} ) et tu ma aider je compte faire une boucle for pour parcourir les ligne et une autre pour les colonne mais pour l’instant faut que j’y reflechisse
Remplace ton os.system("pause") par un input("Appuyez sur ENTRÉE pour continuer").
N’utilise jamais os.system.
D’une façon générale, n’utilise jamais les fonctions du module os sans être absolument certain d’en avoir besoin. Ce module wrappe tous les appels système : un debutant en Python ne devrait jamais avoir besoin de les utiliser explicitement.
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte