Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Discussion: IA jeu de Morpion

  1. #1
    Invité régulier
    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 : 5
    Points
    5

    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
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 425
    Points : 8 184
    Points
    8 184

    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 :
    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 :
    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

  3. #3
    Invité régulier
    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 : 5
    Points
    5

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •