Bonjour, j'aurai 2 questions. J'ai codé un premier reversi. Mes méthodes de vérification sont plutôt pas mal et fonctionnent bien. Tout était parfait, jusqu'au moment de faire l'IA.
Vous allez comprendre pourquoi :

Mon jeu se composait en 3 classes, dans un default package... Cellule, Grille, Jeu.

Comprendre mon main aide aisément à imaginer le processus d'évolution des situations du jeu :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) {
 
Grille g = new Grille();
 
JFrame jf = new JFrame();
 
jf.setSize(tailleJeu*100,tailleJeu*100);
 
jf.add(g);
 
jf.setVisible(true);
 
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
}
Dans ma classe grille, j'ai un actionPerformed(Event e), qui lance jouer(). Mon reversi est un tableau de (Cellule extends JButton) qui contiennent un attribut x, y et contenu. Cliquer sur une cellule vérifie si on peut jouer à cet endroit, et si l'on peu (1 ou N pion adverse + mon pion dans une direction) un pion est placé et les pions adjacents sont retournés récursivement dans une même direction (avec un test de 8 direction, N, NE, E, SE, S, SO, O, NO)...

Le problème s'est posé lorsque j'ai du créer une IA... J'avais en effet un attribut Cellule[][] qui était modifié initialement directement depuis les méthodes à l'intérieur de ma classe grille, sans même prendre ce tableau en argument... En gros, public void placerPion(Cellule c) plaçait mon pion directement dans ma matrice... ça fonctionnait bien, jusqu'à cette IA !

Il a en effet fallut que je projette des situations future (j'ai fait un arbre avec une profondeur de 1 parce que je suis très long à la détente et que bien que je pourrai faire un cours théorique sur le minmax)... J'ai tout de suite compris que ça allait être difficile en touchant comme ça directement à ma matrice ! Alors j'ai changé un peu le prototype de TOUTES mes méthodes, comme ceci :
placerPion(Cellule c, Cellule[][] grille)
J'ai aussi essayé :
Cellule[][] placerPion(Celullule c)

Mais, au final... Je n'ai jamais réussi à recopier ma grille, faire des test sur la copie, et restaurer maGrille...

Alors, j'ai recommencé en MVC, parce que je crois que c'était une bonne solution pour parer ce genre de problème, et aussi parce que je souhaitais progresser.

j'ai suivi un tuto pour organiser mon modèle MVC

En mon MVC, mes cellules étaient juste des Cellule extends JButton qui servaient à la fois de vue (affichage) et de modèle (donnée enregistrée dans la cellule).

Maintenant, dans mon modèle MVC, j'ai une classe vue et une classe modèle. Ma vue contient le controler et le controler contient mon modèle. J'ai l'impression d'être confronté à l'absence d'héritage multiple en java. En effet, dans mon modèle, il serait idiot d'utiliser une cellule qui hérite de JButton... Puisqu'on a besoin que des données...

L'idée que j'ai c'est donc de créer une classe :
CelluleVue extends JButton et une classe Cellule
Les deux seraient pareil (au niveau des attributs et méthodes, pourquoi pas les faire hériter d'une même interface) et mon controler servirait à rendre les données envoyées par la vue interprétable par le modèle qui les enregistre...

Cependant, ce choix de conception ne me semble pas optimal, mais c'est en toute bonne foi la seule solution qui m'est venu après deux jours...

J'ai aussi un autre problème que je ne veux pas reproduire une deuxième fois... C'est que j'ai d'une part mon propre clic qui va ordonner un nombre de vérifications et de traitement (dans le controler) ? qui va utiliser cette donnée traiter grace à modèle.méthode(paramètre traité) ? Le modèle va ensuite notifier la vue qu'elle doit se mettre à jour... Enfin j'ai un peu de mal encore avec le MVC...

Le problème c'est que lorsque c'est le bot qui va devoir jouer, je vais devoir analyser tous les coups possibles a partir de la situation initiale, avoir une copie de la situation initiale et simuler un coup pour obtenir une nouvelle grille que je vais évaluer (exemple : différence entre les pions noirs et blanc), retenir le meilleur coup et le faire jouer par le bot (je sais c'est un minmax pour les nuls... mais je ferai une plus grande profondeur d'analyse de l'arbre quand j'arriverai déjà à faire tout ça...)

J'ai vraiment besoin d'un peu d'aide pour le choix de conception et de traitement des données, mes questions peuvent paraître parfois un peu absurdes ou logiques mais cela vient alors d'un manque de maitrise du MVC pour certains cas.