Bonjour,
L'année dernière j'ai commencé à coder une IA de poker. Avec mes faibles connaissances en informatique (j'étais en Terminale) j'ai réussi à recoder un moteur de jeu de poker, mais avant de m'attaquer à la partie IA, je voulais mettre le tout dans une interface graphique sympa avec une table, des joueurs, leur tapis à la table devant eux, et quelques onglets pour changer les paramètres de mon programme sans avoir à bouger les variables et instancier les objets à la main dans mon code.
Petit hic là, ça ma l'air assez dur sans aucunes connaissances là-dessus, j'ai donc ramé, j'ai regardé quelques tutos sur les interfaces graphiques qui commençaient généralement par des explications sur les délégués et les événements, ou alors j'en avais lu un entièrement sur le modèle DAO sur ce site (si je ne me trompe pas, le principe était de séparer le programme en plusieurs couches (métier, données, interface je crois ?) et les relier avec Spring, j'ai pas trop compris, je ne pourrais pas l'appliquer à mon programme, je ne sais même pas si l'interface graphique que je veux est faisable avec ce modèle.
Au final le projet est en stand-by car je ne sais pas trop où je vais, je ne sais pas comment je suis censé structuré mon programme. Cette année je suis en maths sup, l'info qu'on fait est assez théorique, avec des langages de haut niveau alors j'ai rien appris ni sur les interfaces graphiques ni sur le C# et je ne suis pas avancé.
Peut-être vaut-il mieux que j'utilise une librairie faite pour les interfaces graphiques, pour que je puisse travailler à plus haut niveau ? Pourtant la création d'interface graphique m'a l'air assez simplifiée sur Microsoft Visual C# Express (que j'utilise) alors peut-être que je n'avance pas seulement parce que je cherche au mauvais endroit ?
Je vais vous expliquer quel type d'interface graphique j'aimerais obtenir, j'espère que vous saurez m'orienter.
Déjà voici la liste des classes que j'utilise :
Pièce jointe 179041
Aucune classe n'hérite d'une autre.
La classe Table contient un attribut game de type Game, avec toutes les infos sur la partie en cours sur cette table, dans cette classe Game y a des joueurs (classe Seat), etc...
Concrètement je voudrais que mon programme ressemble à une fenêtre sur laquelle il y a une table, on pourrait changer le nombre de places sur cette table à l'aide d'un champ (l'interface modifierait donc l'attribut maxSeats de ma classe Table), ce qui modifierait l'affichage de la table directement. Le moteur de jeu attend la décision d'un joueur, et je voudrais pouvoir utiliser l'interface graphique pour récupérer la décision du joueur (ou d'une classe IA s'il s'agit d'une IA), du coup il faudrait que ma classe Seat (qui représente un joueur à la table) puisse demander à l'interface graphique d'afficher un certain nombre de boutons, puis d'attendre l'appui de ceux-ci, puis redonner cette saisie à la classe Seat qui retournerait son résultat au moteur de jeu qui continuerait la partie.
J'aimerais également pouvoir afficher des onglets dans ma fenêtre, qui permettent d'aller modifier des paramètres (il s'agit donc encore une fois de modifier les attributs de classes déjà instanciées à partir de mon interface graphique).
Comment j'ai procédé ?
Pour le moment j'instancie ma fenêtre dans ma classe Program
Ensuite ma table est initialisée dans la classe Program également, les joueurs également, les joueurs sont ajoutés à la table, le programme vérifie quels joueurs sont prêts à jouer, les ajoute à une classe Game, et après je démarre la partie à l'aide d'une méthode StartNewGame() dans ma classe Game, qui lance le moteur de jeu, c'est cette classe Game qui va calculer les actions possibles par chaque joueurs (Seat) quand c'est leur tour de jouer, et de leur demander de prendre une décision, et c'est là que j'aimerais faire intervenir mon interface graphique.
Le fait d'instancier ma fenêtre dans Program est-il mauvais ? Car aucunes de mes classes ne peuvent voir ma fenêtre, pourtant je ne peux pas non plus faire une fenêtre par classe, je ne peux pas non plus créer mes classes dans la classe Program, car je ne pourrais pas instancier mes objets.
J'ai l'impression que la plupart de mes problèmes viennent du fait qu'il faut que j'utilise massivement les événements alors que je ne les maîtrise pas du tout, et également du fait que la structure de mon code est à revoir car je n'ai pas l'habitude de faire du C# et de "gros" programmes. (Celui-ci doit faire plus de 1500 lignes, c'est mon premier qui en fait autant, d'ailleurs savez-vous comment afficher le nombre de lignes d'un projet, avec toutes ses classes comprises, à partir de cet IDE ?)
J'ai fait de mon mieux pour être clair alors j'espère que vous comprendrez où je bloque et saurez m'aider.
Merci d'avoir pris le temps de lire mon post !
PS: J'ai envisagé plusieurs fois de faire d'abord mon programme en console, de gérer d'abord juste la communication entre les classes avec des événements (mais même ça je ne sais pas trop comment faire de toute façon..) avant de faire l'interface graphique, j'imagine que c'est le plus judicieux, mais j'avais peur qu'il y ait trop de changements à faire pour repasser en fenêtre après, je ne sais pas trop comment condenser tout le code qui permet "l'interface homme-machine" au même endroit.
Partager