IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Petit projet pour héritage & polymorphisme


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    élève ingénieur
    Inscrit en
    Juillet 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Koweït

    Informations professionnelles :
    Activité : élève ingénieur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 18
    Points : 10
    Points
    10
    Par défaut Petit projet pour héritage & polymorphisme
    Bonjour à tous,

    Voilà l'année dernière j'ai fait un peu de java (dont un projet de puissance 4, il reste normalement des traces sur ce forum ). Je profite de mes vacances d'août pour progresser un peu en java. Aussi j'aimerais savoir si vous connaissez des petits projets par forcément long mais qui permettent d'appliquer les notions d'héritage et de polymorphisme en java.

    En ce moment j'avais prévu de me créer un mini jeu (le jeu du morpion. Ce jeu est très (trop ?) proche du puissance 4 et j'ai vraiment tendance à copier/Coller des pans entiers du code du puissance 4. Or pour le jeu du puissance 4 nous étions 3-4 à travailler dessus donc il y a des parties du codes que je n'ai pas écrites et donc je copie/colle des parties non comprises et j'avoue que j'ai parfois l'impression de refaire la même chose sans comprendre forcément : c'est vraiment frustrant . C'est pourquoi, j'aimerai avant de me remettre à ce jeu du morpion, trouver un ou plusieurs petits projets (pas forcément des jeux hein ^^ :p) me permettant de bien me familiariser avec ces deux notions (au moins).

    Donc n'hésitez pas à me donner vos énoncés

    Un grand merci à tous ceux qui me liront et qui auront la patience de pendre de leur temps pour me répondre !

    Bonne journée,

    Proginfme

  2. #2
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Salut,

    J'ai pensé à un jeu de bataille navale. C'est simple à mettre en place et tu peux utiliser l'héritage et le polymorphisme sans trop de difficultés.

    Pour une version 1 joueur tu peux générer une grille aléatoirement pour le PC et une fonction toute simple qui te renvoi vrai ou faux si tu touches ou non en fonction de coordonnées rentrés en console (ou IHM selon ce que tu souhaites implémenter).

    Tu peux pour ça créer une grille avec plusieurs "Case" qui représentent soit le Mer soit un Bateau, et implémenter plusieurs type de bateaux. Tu n'est pas obligé de respecter ceux du jeu original et rajouter tes propres bateaux avec des caractéristiques différentes pour pouvoir jouer un peu avec l'héritage.

    Pour une éventuelle partie graphique, tu peux créer un panneau représentant le jeu qui sera vide au début (il n'y a que des cases Mer) et au fur et a mesure que tu tires, tu remplies ta grille avec tes tirs ratés et ceux qui ont touché par exemple. Tu peux ainsi prévoir un panneau à coté de celui de plateau pour rentrer les coordonnées de tes tirs et un bouton pour lancer l'attaque !

    C'est pas grand chose mais ça peut être amusant/instructif

    Cdt.

  3. #3
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 654
    Points
    1 654
    Par défaut
    Salut,

    Sinon, il y a l'exemple classique mais moins amusant de l'animalerie. Tu pars du principe que tu gères une animalerie et tu décris tous les animaux possibles pour jouer avec héritage/polymorphisme.
    Par exemple, un chien c'est un canidé qui est un mammifère qui est un vertébré qui est un animal, le chien peut aboyer mais pas voler, etc ... Tu peux essayer de faire qqchose de très complet pour découvrir un peu le polymorphisme. Ce que je propose est moins amusant que le jeu de la bataille navale mais ça peut-être une bonne base pour une application de gestion plus complexe.
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  4. #4
    Membre à l'essai
    Homme Profil pro
    élève ingénieur
    Inscrit en
    Juillet 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Koweït

    Informations professionnelles :
    Activité : élève ingénieur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Salut à vous deux ! Un grand merci pour vos réponses !

    @ Nico02 : c'est marrant parce que justement je comptais programmer un petit jeu de bataille navale. Mais je comptais faire cela après mon jeu de morpion car je pensais que cela allait être beaucoup plus dur ! Au final tu m'as motivé je vais tenter de m'y mettre ;-). A la limite je vais commencer par créer la grille. Ensuite j'imagine que l'hérédité sera utilisée lorsque je créerai mes différents navires ;-)

    @ Nchal : Excellente idée. Je créerai donc une classe animal avec certaines variables qui seront les paramètres de base et ensuite je pourrai créer des classes filles avec d'autres paramètres spécifiques qui seront différentes espèces (Chien, Lions, Serpent etc.). Il y a aussi possibilité de transformer cela en sorte de jeu : les nourrir de temps en temps, leur faire faire des exercices etc.

    Du coup je pense que je vais réfléchir sur ces deux projets =) De toute façon je pense travailler le java un peu tous les jours l'année prochaine et dès maintenant histoire de bien progresser dans ce langage donc je peux travailler sur les deux.=)

    Je vous tiendrai au jus de l'évolution de ceux-ci si cela vous dit !

    Encore merci,

    Proginfme

  5. #5
    Membre à l'essai
    Homme Profil pro
    élève ingénieur
    Inscrit en
    Juillet 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Koweït

    Informations professionnelles :
    Activité : élève ingénieur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Alors voilà j'ai commencé à travailler sur le projet d'animalerie. (pour le jeu de bataille navale je réfléchis encore histoire d'avoir une bonne feuille de route)

    J'ai pour le moment créé deux classes : une classe avec le main et une classe Animaux dans laquelle j'ai créé l'objet Animaux. Pour le moment j'ai 4 variables d'instances : nom, espèce, poids, catégorie (selon le poids je classe les animaux dans différentes catégories). Rien de bien précis mais c'est juste pour commencer.

    Ensuite j'ai créé deux méthodes : une méthode Description() qui permet d'avoir des infos sur l'animal qu'on sélectionne. Par exemple quand je crée dans le main l'animal lion (en faisant : Animaux lion = new Animaux(); ) et que je lui applique la méthode Description() (lion.Description() ) j'obtiens un truc du genre : "Lion est un mammifère terrestre qui court et pesant 100 kg donc de la catégorie" etc.[pour le moment ma méthode pour déterminer la catégorie ne marche pas trop ^^ je vais la modifier pas de soucis :p) et une deuxième méthode Comparer() qui compare selon le poids les différents animaux.

    Voilà maintenant je pense que ma prochaine étape et de créer l'animalerie. Cela sera donc ma troisième classe je pense. Mais justement voilà comment vais-je créer cette animalerie ? Au début je pensais créer un tableau et rajouter manuellement différents animaux. Le côté fastidieux de l'opération ne me dérange pas : je sais que je vais devoir créer autant de classe fille de la classe animaux que d'animaux souhaités dans mon animalerie.

    En cours j'ai le souvenir que les profs me disaient que recourir aux tableaux n'était pas la panacée. Donc je me dis il doit certainement avoir une autre technique de représentation plus pertinente.

    EDIT : Maintenant que j'y réfléchis, je pourrai créer une grille et positionner mes animaux dans certaines cases [mon animalerie pourrait être celle d'un cirque et dans chaque boxe il y a un animal bien précis] et ainsi mon programme pourra identifier chaque animaux selon sa position dans la grille et vérifier que c'est le bon animal dans le bon boxe par exemple]

    Si vous avez des idées/remarques/critiques etc. n'hésitez pas faut que je progresse !

    Merci à vous,

    Proginfme

  6. #6
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 654
    Points
    1 654
    Par défaut
    Salut,

    Perso, je verrai un truc dans ce genre là.
    Animal.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public abstract class Animal
    {
        protected String name;
        protected int weight;//en kg
     
        public void description()
        {
            System.out.println("Je suis un animal.");
        }
    }
    Mammifère.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public abstract class Mammifere extends Animal
    {
        public void description()
        {
            super.description();
            System.out.println("Je suis un mammifère.");
        }
    }
    Lion.java
    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
    16
    public class Lion extends Mammifere
    {
        public Lion(String name, int weight)
        {
            this.name = name;
            this.weight = weight;
        }
     
        public void description()
        {
            System.out.println("Je suis "+this.name+".");
            System.out.println("Je pèse "+this.weight+" kg.");
            super.description();
            System.out.println("Je suis un lion.");
        }
    }
    Main.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Main
    {
        public static void main(String[] args)
        {
            Lion oscar = new Lion("Oscar",100);
            oscar.description();
        }
    }
    J'ai penser à un truc comme ça vite fait, il y a moyen de faire bcp mieux je pense, en cherchant à s'abstraire encore plus, pour moi l'objet c'est la délégation des tâches. Je suis un objet, je dois faire qqchose, si je sais pas faire, je demande au dessus.
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  7. #7
    Membre à l'essai
    Homme Profil pro
    élève ingénieur
    Inscrit en
    Juillet 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Koweït

    Informations professionnelles :
    Activité : élève ingénieur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Salut à vous ;-) j'ai suivi vos conseils et je me suis bien amusés avec l'animalerie ;-)

    Et je reviens sur ce fofo pour vous dire que je n'ai pas oublié le petit projet de bataille navale et j'y ai réfléchi un petit peu ;-)
    Voici pour le moment ce à quoi j'ai pensé à propos des classes :

    1) Joueur
    2) Jeu (correspond à la prise en compte de l'action des joueurs)
    3) Grille (initialement vide [vide = mer])
    4) Fenêtre (JPANEL etc.)
    5) Intelligence Artificielle (à réfléchir pour le moment aucune idée ==> je réfléchirai la dessus une fois que j'aurai programmer une partie un contre un je pense non ?)
    6) Vaisseau avec plusieurs classes filles (ex : porte avion, frégate, cuirassé, sous-marin etc.)

    6 classes principales puis quelques classes filles notamment issues de la classe mère "Vaisseau"



    Demain j'essayerai de commencer le code : je pense commencer par la grille.

    Bonne soirée à tous !

  8. #8
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 654
    Points
    1 654
    Par défaut
    Ça me parait pas mal tout ça
    Peut-être de l'abstraction également au niveau des joueurs (différencier un ordi d'un humain).
    Mais sinon, tu as bien repéré le risque principal : l'IA. Quand on commence, on a toujours envie de faire une IA digne des meilleurs films et donc on passe des années à faire un truc qui ne sera pas visible finalement (car on aura bâclé le jeu). Moi, je te conseillerais de faire un jeu 1 humain contre 1 humain, et ensuite, tu peux t'amuser à faire une IA (ce projet d'IA sort de l'objectif heritage&polymorphisme d'ailleurs)
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  9. #9
    Membre à l'essai
    Homme Profil pro
    élève ingénieur
    Inscrit en
    Juillet 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Koweït

    Informations professionnelles :
    Activité : élève ingénieur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Salut à tous désolé de répondre que maintenant ! (j'avais oublié lorsque je postais mon précédent commentaire que j'avais une période d'examns ... ^^)

    Bon bref, du coup oui je vais suivre ton conseil je vais d'abord tenter de programmer le jeu en mode un humain contre un humain. Une fois que j'aurais une belle interface graphique et un jeu fonctionnant correctement je m'attaquerai à l'IA.

    J'ai donc commencé par coder deux trois trucs, en commençant par la grille. Pour le moment je n'ai pas d'interface graphique : j'ai juste créé un tableau en fait de 20 lignes 20 colonnes. Voici ce code :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public class Grillemer {
    	private int mer = 0;
    	private int patrouilleur = 1;
    	private int aviso = 2;
    	private int BPC = 3;
    	private int fregate = 4;
    	private int porteavion = 5;
    	private int[][]tableau;
    	private int largeur = 20;
    	private int longeur = 20;
     
     
    public Grillemer(){
    	tableau = new int[this.largeur][this.longeur];
    }
     
     
    public int[][] getTableau() {
    	return tableau;
    }
    public void setTableau(int[][] tableau) {
    	this.tableau = tableau;
    }
    }
    En fait j'ai plusieurs questions :

    1)j'explique mon code: j'ai défini mes bateaux en entier car je compte en fait mettre des boucles "if" si j'ai "0" alors c'est une case mer, si j'ai"un" alors c'est un patrouilleur etc.
    Du coup j'ai une question : est-ce que cela vaut le coup de définir les bateaux dans la classe grille ? Maintenant que j'y pense c'est un peu bizarre fait ...

    2)Une autre question me vient à l'esprit : ai-je raison de commencer à coder "en brut" comme cela ou dois-je directement attaqué avec le Gridlayout ou le JFrame ? J'avoue que je suis un peu largué (même complètement ) à propos de l'interface graphique ?

    3) Je ne sais pas si cela va servir mais je pense créer une fonction "initialiserGrille" qui permettra de vider la grille (disparition des bateaux)

    Une fois la grille faite je pense m'attaquer à la classe jeu.

    Qu'en pensez-vous ?

    Encore merci de votre aide !


    PS : Voici le code avec la fonction initialise en plus :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    public class Grillemer {
    	private int mer = 0;
    	private int pirate = 1;
    	private int aviso = 2;
    	private int BPC = 3;
    	private int fregate = 4;
    	private int porteavion = 5;
    	private int[][]tableau;
    	private int largeur = 20;
    	private int longueur = 20;
     
     
    public Grillemer(){
    	tableau = new int[this.largeur][this.longueur];
    }
     
    public void initialiserGrille(){
    	for (int haut=0;haut<longueur ;haut++){ 
    		for (int larg=0;larg<largeur;larg++){
    			tableau[haut][larg]=mer;
    		}
    	}
    }
     
     
    public int[][] getTableau() {
    	return tableau;
    }
    public void setTableau(int[][] tableau) {
    	this.tableau = tableau;
    }
    }

  10. #10
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 654
    Points
    1 654
    Par défaut
    Salut,

    Au bout d'un mois, je ne sais pas comment tu as fait évoluer ton appli mais je vais quand même répondre aux question

    1) Comme ton envie c'est de faire du polymorphisme, bien sur que non, il ne faut pas définir les bateaux avec des entiers ^^
    Je te propose de gérer une classe abstraite de type Bateau et chaque bateau différent va extend cette classe.
    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
    16
    17
    18
     
    public abstract class Bateau {
     
       public abstract String print();
    }
    public class Fregate extends Bateau {
     
        public String print() {
           return "F";
    }
    public class Grille {
     
         private Bateau[][] tableau;
     
        //pour chaque case du tableau
        case.addElement(new Fregate());
        case.print();
    }
    Bon, j'ai fait ça à l'arrache donc ça doit pas marcher mais c'est une piste

    2) Commence en brut histoire d'avoir un moteur fonctionnel.
    L'ihm, c'est pas très compliqué mais ça prend du temps, que ce soit pour apprendre ou même à faire. Mais c'est pas dur, juste pénible.

    3) Oui, initialiserGrille peut être utilise pour lancer une nouvelle partie

    Voilà, c'est pas grand chose et ça à un mois de retard mais j'espère que ça te servira ^^
    Si la réponse vous convient, un petit ça encourage.
    Avant tout nouveau post, pensez à : la FAQ, Google et la fonction Recherche
    Si vous devez poster, pensez à: Ecrire en français, la balise [CODE] (#) et surtout

  11. #11
    Membre à l'essai
    Homme Profil pro
    élève ingénieur
    Inscrit en
    Juillet 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Koweït

    Informations professionnelles :
    Activité : élève ingénieur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Merci à toi

    T'inquiète pas de soucis pour le mois retard. Je fais cela en plus des cours donc je n'ai aucune limite de temps. Je veux juste arriver à bien comprendre comment réussir à faire ce jeu de bataille navale car je pense que si j'arrive à bien comprendre comment coder un tel jeu je pourrai dire que j'ai réussi à acquérir une certaine base de connaissance

    Du coup, effectivement en solo j'avais bien réalisé que c'était plus pertinent de jouer avec le polymorphisme pour les bateaux :p

    Pour le moment je dois avouer que cela fait trois semaines que je n'ai pas touché à ce projet. Du coup là je profite du weekend et de la fin de mes partiels pour me remettre dedans. Ainsi je n'ai pas de questions bien précises d'ordre technique.

    Par contre j'ai une question qui me vient à l'esprit : si j'arrive à faire un jeu de bataille navale sans utiliser l'interface graphique c'est-à-dire en créant une grille avec uniquement genre des caractères : "|" ou "_" et disons les navires avec uniquement des lettres. Voici grossièrement un exemple rapide que pourrait me retourner un tel programme :
    A B C D
    1|F| | | |
    2|F| | | |
    3| | | | |
    4| | |F|F|
    Avec F : frégate par exemple ^^ et espace vide: mer

    Est-ce qu'il sera pour moi facile de créer une interface graphique à partir d'un tel programme ou alors tout le code sera à reprendre ?

    Encore merci de votre aide

Discussions similaires

  1. Quelques questions pour petit projet
    Par lapos dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 21/12/2007, 17h22
  2. Demande aide pour un petit projet
    Par Ludivine91 dans le forum Autres
    Réponses: 0
    Dernier message: 25/11/2007, 19h15
  3. Réponses: 5
    Dernier message: 21/09/2007, 17h29
  4. Trouver un petit projet pour débuter
    Par Boby71C dans le forum VB.NET
    Réponses: 8
    Dernier message: 18/02/2007, 20h38
  5. Cherche tuteur pour encadrer un petit projet.
    Par mikaloop dans le forum Access
    Réponses: 11
    Dernier message: 05/03/2006, 18h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo