Creation d'un morpion en language JAVA (avec eclipse)

Signaler
Messages postés
6
Date d'inscription
lundi 10 mai 2010
Statut
Membre
Dernière intervention
17 août 2010
-
 tonyoo -
Bonjour à tous!!

Je suis débutante en programmation et doit creer un morpion!!
En effet, au cours de cette année, nous avons suivi les cours de janvier jusqu'en juin (1 h 30 par semaine)en programmation. Bref!
Je vous expose mes connaissances:
- declaration de variables telles que: int, doube, char etc...-
- creation d'une petite fenetre grace à JoptionPane.show.MessageDialog etc..
- utilisation Clavier.lire...()
- utilisation des clauses if, if... else, if... else if etc
- utilisation de boucles while, do...while et for
- declaration et creation de tableaux unidimensionnels et bidimensionnels
- méthodes (celles qui retournent quelque chose grace a return et celle qui ne retourne rien (void))
- classes(vite fait)
- graphisme (tres vite fait -> creation d'un bouton)

Voila donc mes connaisances en tant que débutante!

Nous avons du choisir un sujet et avons 2 semaines pour le creer !!!!!!!
J'aichoisi de faire un morpion, et voila comment je l'imagine:
- le eu se déroule entre l'ordinateur et l'utilisateur
- le plateau du jeu est une grille de 3*3
- l'utilisateur choisit son symbole: X ou
- a chaque coup, le programme verifie s'il y a un gagnant
- s'il y a match nul, le programme le signale aussi
- l'utilisateur doit avoir la possibilité de rejouer autant de fois qu'il le désire
- j'aimerais aussi pouvoir afficher les scores au fur et a mesure des parties
- je pensais faire 2 niveaux: facile et difficile. MAIS, ne ^pensez-vous pas qu'il serait preéférable de ne creer que le niveau difficile, car le programme doit tenir sur environ 700 lignes
Voila donc ce que je compte faire

Mon problème: JE NE SAIS ABSOLUMENT PAS COMMENT PRESENTER TOUT CELA, COMMENT ORGANISER MON PROGRAMME ET OU IRA LE GRAPHISME DANS TOUT SA !!!

J'aurais vraiment besoin de votre aide... (car le temps presse)
Alors pourriez-vous me donner une piste, une sorte de marche àsuivre MAIS NE CROYEZ PAS QUE je veuille voir un code source, car j'ai vraiment envie de reussir par moi meme. Ce que j'aimerais est une sorte de vue d'ensemble du "squelette du programme" et non pas la realisation d'un morpion car il y en a bien assez sur le web

J'espère vraiment que vous allez pouvoir m'aider.... A bientot!!

11 réponses

Messages postés
16
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
12 août 2010

Première idée : développe ton morpion sans graphisme.
Commence par la partie "Logique". Après tu feras en fonction du temps qui reste : soit une interface en mode console avec une suite de system.out.println du genre :

.|X|.
O|.|X
O|X|.

Ou alors une interface plus travaillée.

Donc prépare déjà ton jeu avec des tests unitaires histoire de vérifier que tout ça fonctionne bien avant de brancher ton interface par dessus.

Je dirais une classe Game avec comme méthodes :
boolean isWinner()
boolean isTokenPlaceable()
void initNewGame()
void putToken()

Une classe Token avec juste comme attributs :
int X
int Y
boolean isX
qui représente les coordonnées d'un Token, et s'il s'agit d'un X ou d'un O.

Bref, tu vois le genre.
Messages postés
6
Date d'inscription
lundi 10 mai 2010
Statut
Membre
Dernière intervention
17 août 2010

Merci pour ta proposition.
Mais, serait-ce possible de faire le tout dans une seule et unique classe qui serait la classe MORPION (au lieu de "Game", mais bon ca ne change rien)? Ou bien ta proposition facilite mieux le programme??
Et puis, en ce qui concerne les méthodes que tu me proposes, es-tu sur qu'il y en ait assez??
Ne serait-ce pas mieux d'en faire plus?, p. ex.:

- une méthode contenant que les salutations
- une méthode qui crée le plateau
- une méthode qui vérifierait si le pion pout etre placé sur tel ou tel case
- une méthode qui vérifierait apres chaque coup s'il y a un un gagnant
- une méthode qui permettrait de recommencer une nouvelle partie
- une méthode qui afficherait le score
etc....
En fait, je ne comprends pas tres bien tes methodes.
Pourrais tu me donnez quelques explications pour ces méthodes que tu me proposes???
En ce qui concerne ta seconde classe, je ne comprend absolument pas ce que tu compte faire... que représentent y et x ?? (les symboles du jeu???)
Cette seconde représente-elle une classe réservée spécialement aux "pions"??

Je ne comprends pas tres bien non plus l'utilisation ici de "boolean", je ne vois pas pourquoi il faudrait utiliser ce type de variable (true or false???).
Messages postés
16
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
12 août 2010

Que la classe s'appelle Game ou Morpion, ça change pas grand chose.
La deuxième classe je dirais qu'elle peut être supprimée.

La classe Token représente un pion. X et Y sont ses coordonnées sur le plateau de jeu (X et Y allant donc de 0 à 2). Le boolean, c'est pour savoir si c'est un X (true), ou si c'est un O (false).

Bien sûr, il faut plus de méthodes qu'explicitées.
Déjà dans la classe Game (ou Morpion, peu importe), il faut une array de tokens.
Tu peux également, si tu veux simplifier le code, n'avoir qu'un tableau de char de type char[][] plateau = new char[3][3] ;
Ensuite tu places des 'X' et des 'O' dans ton tableau.

Concernant les méthodes à placer dans Game :
- C'est quoi les salutations ?
- une méthode qui crée le plateau => Inutile, le plateau n'est qu'un tableau réinitialisé à chaque nouvelle partie.
- une méthode qui vérifierait si le pion pout etre placé sur tel ou tel case => boolean isTokenPlaceable()
- une méthode qui vérifierait apres chaque coup s'il y a un un gagnant => boolean isWinner()
- une méthode qui permettrait de recommencer une nouvelle partie => void initNewGame()
Il te manque la méthode qui place un pion.
Messages postés
6
Date d'inscription
lundi 10 mai 2010
Statut
Membre
Dernière intervention
17 août 2010

Ah d'accord, j'y vois un peu plus clair à présent.
Cependant, j'ai encore quelques questions.
Qu'entends-tu par array token, car je n'ai jamais vu ceci et je ne vois donc pas trop de quoi tu parles.
En ce qui concerne le plateau, puisque il ne faut le déclarer dans une méthode, faudra-t-il alors le déclarer dans la méthode main de la classe morpion ou alors avant la méthode main , mais sans qu'il ne soit placé dans une méthode?
Ensuite, j'ai une autre question concernant la méthode qui place un pion. Pour placer un pion, il faudra simplement donner les deux "indices" du tableau, c'est bien ça??
Sinon, je voulais aussi te demander ce que tu pensais de cette histoire de niveau.
Est-ce que ça vaut la peine de faire un niveau facile et un niveau difficile, ou est-ce plus judicieux de se limiter au niveau difficile??
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
Salut,

Peut-être qu'un exemple simplifié (mais incomplet) pourrait t'aider :

http://www.javafr.com/codes/TUTORIAL-MORPION-DEBUTANT_52166.aspx
Messages postés
6
Date d'inscription
lundi 10 mai 2010
Statut
Membre
Dernière intervention
17 août 2010

Merci Steamworker pour tes conseils.
Maintenant je vais me lancer et verra ce que ça va donner

Merci a toi aussi jojolemariole pour cet exemple.

Je crois que je peux enfin m'y mettre à ce morpion.

Encore merci!!!!
Messages postés
6
Date d'inscription
lundi 10 mai 2010
Statut
Membre
Dernière intervention
17 août 2010

Me revoilà!

Comme vous l'avez vu ci-dessus, je suis en train de créer un programme afin de réaliser un morpion.
POur le moment, je n'ai réussi qu'à créer une fenetre expliquant en quelques lignes mes objectifs et les règles du jeu.
Maintenant, le problème, c'est que je ne sais pas par quoi commencer? Est-ce qu'il faut commencer par la grille?? ou encore faut-il commencer par créer la fenetre qui va contenir mon morpion?
Faut-il creer une classe se consacrant au graphisme seul?? ou est-ce possible de tout mettre ensemble dans une seule classe?? Normalement, il faut avoir une classe ' morpion ' et une autre classe X qui comportera la fameuse méthode "public static main (String[]args)de manière à éxécuter mon programme.
Je suis très confuse... Auriez-vous des idées??
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
Salut,

Il n'y a aucune obligation dans ce domaine, tu peux tout à fait y arriver avec une seule classe et même avec une seule méthode!

Cependant tu fais bien de te poser la question de la structure de ton code, car c'est un aspect important la programmation, et de la programmation orientée objet en particulier .

POur le moment, je n'ai réussi qu'à créer une fenetre expliquant en quelques lignes mes objectifs et les règles du jeu.


À mon avis, tu as mis la charrue avant les bœufs : c'est plutôt le genre de choses qu'on fait à la fin, si on a le temps, mais bon c'est fait

Maintenant, le problème, c'est que je ne sais pas par quoi commencer? Est-ce qu'il faut commencer par la grille?? ou encore faut-il commencer par créer la fenetre qui va contenir mon morpion?


Commence par définir tes objets, exemples : Grille, Joueur, Jeton, Coup, Partie, Manche, JoueurHumain, JoueurIA, Alignement... Toutes ces notions peuvent être implémentées sous forme d'objet

Dans mon exemple, j'ai seulement créé 3 objets : case, joueur, morpion (grille + IA).

En résumé tu es libre de choisir les notions que tu veux réifier (transformer une notion abstraite en objet).

Une fois que tu as établi ta liste d'objets, identifies les attributs de chaque objet, exemples pour un jeton : position, couleur, symbole...

Là encore, tu es libre. Au fur et à mesure du développement, tu auras peut-être besoin de rajouter des attributs, pas la peine de tout prévoir dans les moindres détails : pense seulement aux plus importants.

Ensuite, identifie les méthodes qui vont permettre de modifier les attributs : une méthode qui permet de jouer un coup, une méthode pour rechercher le meilleur coup, une méthode pour effacer la grille...

Faut-il creer une classe se consacrant au graphisme seul?? ou est-ce possible de tout mettre ensemble dans une seule classe?? Normalement, il faut avoir une classe ' morpion ' et une autre classe X qui comportera la fameuse méthode "public static main (String[]args)de manière à éxécuter mon programme.


Il est en effet très conseillé de séparer la partie vue ou présentation (en gros l'interface graphique). N'hésites pas à identifier les différentes parties de ton interface (grille, panneau des scores, panneau d'information... Créer un objet pour chaque panneau est une bonne idée. Pour commencer, tu peux faire une interface très simpliste comme dans mon exemple.

Créer un objet pour lancer l'application (méthode main) est aussi une bonne idée.

Tous ces préparatifs avant de passer au développement à proprement parler, c'est la modélisation, la méthode la plus courante en entreprise aujoud'hui est UML. Ce n'est peut-être pas la peine de te prendre la tête avec ça : tout dépend de ta formation.

Bon courage!
Messages postés
6
Date d'inscription
lundi 10 mai 2010
Statut
Membre
Dernière intervention
17 août 2010

D'accord...

J'ai une question au sujet des classes...
Est-ce possible de faire une sorte de super classe "Morpion", est d'y mettre à l'INTERIEUR de celle-ci, des classes comme la classe joueur p.ex??
Je pose cette question, car j'aimerais creer des objets "joueurs", mais sans la classe joueurs, je ne vois pas commment faire autrement. ( A part si c'est possible de faire un constructeur p.ex:
(import java.awt.Color;)
public Morpion (char symbole, Color couleurSymbole){

char symbole;
Color couleurSymbole;
}
ensuite,
Morpion joueurHumain;
joueurHumain = new Morpion('X', rouge);
Morpion joueurOrdinateur;
joueurOrdinateur = new Morpion('X', bleu);
Est-ce possible de faire cela???????

ensuite pour la grille
public Morpion ()
Salut l'étudiante
Je pense que tu as pu réaliser ton morpion en Java.

Allons nous le voir par ici.

T.
Messages postés
16
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
12 août 2010

Laisses tomber l'array de token et contente toi du tableau.
L'initialisation du plateau (char[][] plateau = new char[3][3]) doit être dans ton initNewGame. Cette méthode est elle même appelée dans le constructeur de la classe Game pour initialiser la première partie.

Pour placer un pion, il te suffira en effet de faire un plateau [0][1] = 'X' par exemple.

Cadeau, pour vérifier si tu peux placer un pion à un endroit, ça sera donc
if (plateau[0][0] != 'X' && plateau[0][0] != 'O')

Sinon ne te galère pas avec plusieurs niveaux de difficulté. Limite toi à un ensemble de règles qui font agir le joueur ordinateur normalement.
Par exemple, un ensemble de règles genre :
if (plateau[0][0] == 'X' && plateau[0][2] == 'X' )
putToken(0,1,O) (avec la méthode putToken qui appelle la méthode de vérification du placer pion avant d'assigner à plateau[x][y] la valeur passée en dernier argument).