Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope
Python & Zope Forum d'entraide sur la programmation en Python et Zope. Avant de poster -> F.A.Q Python
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 14/01/2013, 16h45   #1
MilkyMars
Invité régulier
 
Homme
Étudiant
Inscription : 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.
MilkyMars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2013, 20h09   #2
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 696
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 696
Points : 4 525
Points : 4 525
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
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/01/2013, 12h26   #3
MilkyMars
Invité régulier
 
Homme
Étudiant
Inscription : 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
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.
MilkyMars est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h33.


 
 
 
 
Partenaires

Hébergement Web