IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

IA jeu de Morpion


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 11
    Points
    11
    Par défaut IA jeu de Morpion
    Bonjour,

    Je dois réalisé un jeu de morpion dont la taille de la grille de jeu peut-être modifier et que l'on peut jouer soit à deux joueurs soit contre la machine.

    Je bloque sur la deuxième partie : "l'IA" !

    Voici mon code complet : http://pastebin.com/46R2AEdp

    Je sais qu'il y a certainement beaucoup de choses à modifier. C'est ma première année alors soyez indulgent...
    Je souhaite juste faire marcher le programme et non le modifier entièrement.

    Le programme marche très bien en version joueur contre joueur.
    Donc le problème que je rencontre c'est pour faire jouer la machine, plus exactement pour dessiner son symbole (X ou O) dans la grille de jeu Tk.

    La fonction joue() permet d’enchaîner les tours de chaque joueurs.

    La fonction iaJoue() détermine la meilleure case à jouer par la machine.

    La fonction playOn() est sensée faire jouer la machine un peu comme la fonction joue permet au joueur humain de jouer. Mais le problème est que je ne sais pas comment faire pour dessiner le symbole.

    Dans joue() je me sers de w pour dessiner le symbole au bon endroit grâce aux fonctions fais_x() et fais_o() avec w = event.widget (event étant un clic de souris)
    Dans playOn() je n'utilise pas w est donc je ne sais pas comment faire.
    Donc du point de vue de M (la grille de jeu sous forme de tableau) ça fonctionne mais pas graphiquement...

    Si quelqu'un peut m'aiguiller car j'ai chercher des solutions mais je n'arrive jamais à faire fonctionner le jeu correctement.

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Vu l'état de votre code, il m'est impossible de le corriger.
    Ceci dit, iaJoue retourne le (r, c) que le robot joue.
    playOn doit récupérer le canvas (r,c) pour avoir un bon "w" à passer à fais_x ou fais_o.
    Et si vous stockez (r,c) dans les canvas, il n'y a pas de map "inverse".

    Cela suggère d'ajouter "cells" genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    cells = dict()
    for R in range(T):
    	for C in range(T):
    		Cell = Canvas(grille, bg = 'light grey', width = H, height = H)
    		Cell.bind("<Button-1>", joue)
    		Cell.grid(row = R, column = C)
    		Cell.R, Cell.C = R, C		# localisation de chaque cellule
                    cells[(r, c)] = Cell
    Dans playOn, ajouter qqc comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            ...
            w = cells[(raw, column)]
            s = symbole(J)
            if s=='O':
                fais_o(w)
            if s=='X':
                fais_x(w)
            ...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci pour ta réponse je n'avais pas pensé à cette solution j'avais créé quelque chose du genre mais qui ne marchait pas pour toutes les tailles de grilles.

    Aussi je suis désolé pour le code mais je n'ai fait qu'implémenter la possibilité de changer la taille de la grille, de stopper le jeu lorsque la partie est remportée et maintenant de pouvoir jouer contre la machine. Le reste du code est presque tel quel dans mon cours j'ai juste corrigé la présentation pour m'y retrouver.

    Donc j'ai ajouter les lignes que m'as conseillé et ça fonctionne. L'IA commet quelques erreurs de temps en temps, je pense qu'elles sont dû à la ligne et colonne que je passe à playOn() et qui sont sûrement parfois mal calculées.

    Je vais rectifier ça. Encore merci pour ton aide, j'étais passé pas loin de la solution sans y parvenir.

Discussions similaires

  1. Jeu du Morpion
    Par jujusous3 dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 22/02/2010, 01h17
  2. Jeu de morpion
    Par saphire dans le forum Débuter
    Réponses: 4
    Dernier message: 02/11/2008, 00h26
  3. Besoin d'aide jeu du morpion
    Par narcis60floyjo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/02/2008, 15h14
  4. petit bog dans mon jeu de morpion
    Par 123quatre dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 19/06/2006, 11h10
  5. [LG]Un jeu du morpion
    Par yffick dans le forum Langage
    Réponses: 10
    Dernier message: 23/12/2003, 18h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo