Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 13 sur 13
  1. #1
    Membre Expert
    Avatar de visiwi
    Inscrit en
    février 2008
    Messages
    1 049
    Détails du profil
    Informations forums :
    Inscription : février 2008
    Messages : 1 049
    Points : 1 291
    Points
    1 291

    Par défaut Programmez un jeu du serpent avec Java

    Bonjour,

    L'article programmez un Snake avec Java2D est en ligne, n'hésitez pas à poster vos avis.

    Merci.

  2. #2
    Responsable 2D/3D/Jeux

    Avatar de LittleWhite
    Homme Profil pro Alexandre Laurent
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    16 465
    Détails du profil
    Informations personnelles :
    Nom : Homme Alexandre Laurent
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 16 465
    Points : 84 393
    Points
    84 393

    Par défaut

    Bonjour,

    Je lit l'article en travers, pour apprendre a faire un affichage dans Java.
    Mais j'ai remarque, dans la section "L'affichage du serpent" que le code suivant:
    Code :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    public class Case implements Constantes {
     
          private int xIndice;
          private int yIndice;
     
          public Case(int xIndice, int yIndice) {
                this.xIndice = xIndice;
                this.yIndice = yIndice;
          }
     
          // indice horizontal
          public void setIndiceX(int x) {
                this.xIndice = x;
          }
     
          // indice horizontal
          public int getIndiceX() {
                return this.xIndice;
          }
     
          // indice vertical
          public void setIndiceY(int y) {
                this.yIndice = y;
          }
     
          // indice vertical
          public int getIndiceY() {
                return this.yIndice;
          }
     
          // coordonnée horizontale en pixels
          public int getX() {
                return this.xIndice * CASE_EN_PIXELS;
          }
     
          // coordonnée verticale en pixels
          public int getY() {
                return this.yIndice * CASE_EN_PIXELS;
          }
     
          public int getLargeur() {
                return CASE_EN_PIXELS;
          }
     
          public int getHauteur() {
                return CASE_EN_PIXELS;
          }
     
    }
    Le "xIndice" et "yIndice" ne necessite ni getter, ni setter, si on les met en public.
    En fait, si vous faites un getter et setter ... pourquoi ne pas mettre en public? car cela reviendrai au meme (sauf que vous gagnez un appel, et puis vous faites votre code encore plus lisible )

    Voila tout
    Vous souhaitez participer à la rubrique 2D / 3D / Jeux ? Contactez-moi
    La rubrique a aussi un blog !

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre éprouvé Avatar de Mobius
    Inscrit en
    avril 2005
    Messages
    463
    Détails du profil
    Informations forums :
    Inscription : avril 2005
    Messages : 463
    Points : 457
    Points
    457

    Par défaut

    L'ajout de getter/setter pour l'attribut d'une classe fait partie des bonnes pratiques fortement répendu dans le monde java.
    Ces pratiques ne sont pas forcément très utiles dans tous les cas mais ont le mérite de produire un code qui est toujours semblable d'un projet à l'autre et qui par conséquent, sera plus facilement lisible et maintenable (surtout lorsque l'on doit reprendre le code d'autre personne) lorsque ces pratiques sont partagé par le plus grand nombre.
    Librairie d'accès LDAP en Java : LdapBeans
    et pensez au tag

  4. #4
    Rédacteur
    Avatar de thierryler
    Homme Profil pro Thierry Leriche-Dessirier
    Inscrit en
    octobre 2007
    Messages
    3 463
    Détails du profil
    Informations personnelles :
    Nom : Homme Thierry Leriche-Dessirier
    Localisation : France

    Informations forums :
    Inscription : octobre 2007
    Messages : 3 463
    Points : 9 883
    Points
    9 883

    Par défaut

    Tu n'as pas prévu une version pdf de ton article ?

  5. #5
    Membre Expert
    Avatar de visiwi
    Inscrit en
    février 2008
    Messages
    1 049
    Détails du profil
    Informations forums :
    Inscription : février 2008
    Messages : 1 049
    Points : 1 291
    Points
    1 291

    Par défaut

    Bonjour,

    Et bien non... l'article à été directement écrit en HTML.

  6. #6
    Rédacteur
    Avatar de thierryler
    Homme Profil pro Thierry Leriche-Dessirier
    Inscrit en
    octobre 2007
    Messages
    3 463
    Détails du profil
    Informations personnelles :
    Nom : Homme Thierry Leriche-Dessirier
    Localisation : France

    Informations forums :
    Inscription : octobre 2007
    Messages : 3 463
    Points : 9 883
    Points
    9 883

    Par défaut

    Ah bon ? Sans passer par l'éditeur ? pourquoi ?

  7. #7
    Rédacteur
    Avatar de thierryler
    Homme Profil pro Thierry Leriche-Dessirier
    Inscrit en
    octobre 2007
    Messages
    3 463
    Détails du profil
    Informations personnelles :
    Nom : Homme Thierry Leriche-Dessirier
    Localisation : France

    Informations forums :
    Inscription : octobre 2007
    Messages : 3 463
    Points : 9 883
    Points
    9 883

    Par défaut

    Alors je viens carrément de dévorer ton article et je trouve qu'il est super. Toutefois j'ai quelques propositions que j'espère constructives.

    * Utilise du franglais : "estValide" --> "isValide"

    * Utilise les enum pour éviter de faire des switch, par exemple dans la méthode getNextCase() je te propose un truc du style :

    Code :
    1
    2
    3
    4
    5
    6
     
    private Case getNextCase() {
      Case tete = ...
     
      Case next = this.direction.getNext(tete);
    }
    Et c'est dans l'enum que tu fait le cas...

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    enum Direction {
     
      VERS_LE_HAUT(0, 1);
      VERS_LA_DROITE(1, 0),
      VERS_LE_BAS(0, -1),
      VERS_LA_GAUCHE(-1, 0);
     
      final int horizontalChange;
      final int verticalChange;
     
      public Direction(int horizontal, int vertical) {
        this.horizontalChange = horizontal;
        this.verticalChange = vertical;
      }
     
      public Case getNext(final Case old) {
        return new Case(old.getXIndice() + horizontalChange, old.getYIndice() + verticalChange);
      }
     
    }
    * Pense à factoriser ton code, ex: even.getKeyCode()...

    * Tu lance getNextCase() trop de fois. Ca devrait être lancé une seule fois.

    * C'est quoi les valeurs 2 et 4 dans la méthode affichage() de grenouille ?

    * Perso j'aurais utilisé des exceptions pour le game over, genre GameOverException, et éventuellement j'aurais créé SerpentMortException extends GameOver et BordureException extends GameOver...

    Et surtout :

    * une grenouille, c'est plutôt vert, non ?

  8. #8
    Rédacteur
    Avatar de thierryler
    Homme Profil pro Thierry Leriche-Dessirier
    Inscrit en
    octobre 2007
    Messages
    3 463
    Détails du profil
    Informations personnelles :
    Nom : Homme Thierry Leriche-Dessirier
    Localisation : France

    Informations forums :
    Inscription : octobre 2007
    Messages : 3 463
    Points : 9 883
    Points
    9 883

    Par défaut

    3 points encore :

    * Pourrais-tu expliquer un peu pourquoi 40fps ?

    * A chaque itération de la boucle, tu appelles repaint() et si j'ai bien compris, ça va donc vider l'écran (ie. la zone d'affichage du jeu) puis tout redessiner. Comment faire pour ne dessiner que les pixels qui ont changé ?

    * Dans l'article tu te mélanges entre getXIndice et getIndiceX... Je suppose que tu as du le réécrire en cours de route.

  9. #9
    Membre Expert
    Avatar de visiwi
    Inscrit en
    février 2008
    Messages
    1 049
    Détails du profil
    Informations forums :
    Inscription : février 2008
    Messages : 1 049
    Points : 1 291
    Points
    1 291

    Par défaut

    Bonjour,

    Merci de t'intéresser à mon travail, et pour tes remarques pertinentes.

    Citation Envoyé par thierryler Voir le message
    Alors je viens carrément de dévorer ton article et je trouve qu'il est super.
    Et bien merci, ça fait plaisirs
    Citation Envoyé par thierryler Voir le message
    Ah bon ? Sans passer par l'éditeur ? pourquoi ?
    De quel éditeur parle-tu ? J'ai l'habitude d'écrire du HTML/CSS et cela ne me pose pas de problème.
    Citation Envoyé par thierryler Voir le message
    Pourrais-tu expliquer un peu pourquoi 40fps ?
    D'expérience, c'est une bonne vitesse pour pouvoir faire des animations sympa.
    Citation Envoyé par thierryler Voir le message
    Comment faire pour ne dessiner que les pixels qui ont changé ?
    Il existe une méthode repaint avec des arguments permettant de spécifier une zone à repeindre. Mais dans le cas présent, cela n'offre pas d'intérêt pratique.
    Citation Envoyé par thierryler Voir le message
    Dans l'article tu te mélanges entre getXIndice et getIndiceX
    Oui, l'article a été réécrit plusieurs fois, de même que le code, et c'est une erreur que je corrigerais, merci.
    Citation Envoyé par thierryler Voir le message
    Utilise du franglais : "estValide" --> "isValide"
    Oui, c'est encore une erreur. J'ai fait l'effort d'écrire des noms de méthode en français, j'ai plus l'habitude de les écrire en anglais. Pareil, le changement a été incomplet, je corrigerais aussi.
    Citation Envoyé par thierryler Voir le message
    Utilise les enum pour éviter de faire des switch
    Ca ne changerait pas grand chose, mais le code est plus clair me semble-t-il avec un simple switch...
    Citation Envoyé par thierryler Voir le message
    Tu lance getNextCase() trop de fois. Ca devrait être lancé une seule fois.
    Je suis d'accord, mais dans ce cas, cela n'a pas d'importance, c'est une optimisation.
    Citation Envoyé par thierryler Voir le message
    Pense à factoriser ton code, ex: even.getKeyCode()
    Toujours d'accord, mais c'est aussi une optimisation. Bon, elle est grosse celle là, j'en conviens.
    Citation Envoyé par thierryler Voir le message
    C'est quoi les valeurs 2 et 4 dans la méthode affichage() de grenouille ?
    C'est pour afficher un rectangle plus petit que ceux du serpent, pour une raison esthétique lorsque la grenouille apparait sur le serpent. Mais j'aurais pu écrire une phrase pour le dire.
    Citation Envoyé par thierryler Voir le message
    Perso j'aurais utilisé des exceptions pour le game over, genre GameOverException, et éventuellement j'aurais créé SerpentMortException extends GameOver et BordureException extends GameOver...
    Je ne suis pas d'accord. Les exceptions ne sont pas faites pour gérer le flux "naturel" du programme.
    Citation Envoyé par thierryler Voir le message
    une grenouille, c'est plutôt vert, non ?
    Lol. Hé bien je suis daltonien, alors je pense toujours que les autres le sont aussi A moins que ce ne sois par anti-conformisme

  10. #10
    Rédacteur
    Avatar de thierryler
    Homme Profil pro Thierry Leriche-Dessirier
    Inscrit en
    octobre 2007
    Messages
    3 463
    Détails du profil
    Informations personnelles :
    Nom : Homme Thierry Leriche-Dessirier
    Localisation : France

    Informations forums :
    Inscription : octobre 2007
    Messages : 3 463
    Points : 9 883
    Points
    9 883

    Par défaut

    Je parle de l'éditeur d'article de developpez, qui permet de générer automatiquement le layout et le pdf, etc.

    Pour le switch, l'idée est surtout d'éviter de faire un switch, d'autant que le code peut être déterminé par simple calcul.

    Pour le 2 et le 4, du coup tu peux faire une constante comme pour la taille du serpent

    Pour les exceptions, je te propose un DepassementDeBordureException completée par un GameOverEvent

  11. #11
    Membre Expert
    Avatar de visiwi
    Inscrit en
    février 2008
    Messages
    1 049
    Détails du profil
    Informations forums :
    Inscription : février 2008
    Messages : 1 049
    Points : 1 291
    Points
    1 291

    Par défaut

    Citation Envoyé par thierryler Voir le message
    Je parle de l'éditeur d'article de developpez, qui permet de générer automatiquement le layout et le pdf, etc.
    Cet outil, malheureusement, semble ne pas fonctionner avec Eclipse/Linux (ou certaines config), d'autres personnes ont le même problème. Apparemment, il n'y a pas de solution postée sur le forum. Pour le moins, je n'ai pas eu envie de passer trop de temps sur ce point, sans garantie de fonctionnement à la clef. En outre, l'article existait déjà en HTML.

    Citation Envoyé par thierryler Voir le message
    l'idée est surtout d'éviter de faire un switch
    Oui, ta façon de faire est sans doute meilleure. Mais en revanche je trouve l'utilisation du swicth plus simple : l'article s'adresse aussi à ceux qui débutent. Comme cela ne remet aucunement le fonctionnement du jeu en question, et que l'utilisation du switch n'est pas abominable, je préfère que le code reste le plus simple possible.

  12. #12
    Responsable Eclipse et JAVA

    Avatar de Mickael Baron
    Homme Profil pro Mickael BARON
    Ingénieur de Recherche en Informatique
    Inscrit en
    juillet 2005
    Messages
    6 958
    Détails du profil
    Informations personnelles :
    Nom : Homme Mickael BARON
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : juillet 2005
    Messages : 6 958
    Points : 37 404
    Points
    37 404

    Par défaut

    Bonjour visiwi,

    J'ai parcouru un peu ton article, c'est très intéressant et bien écrit. Les illustrations sont placées au bon endroit.

    C'est dommage que tu ne puisses pas utiliser les outils pour placer ton article sous le gabarit Developpez.com.

    Mickael
    Ingénieur de Recherche en informatique au LIAS / ENSMA
    Responsable des rubriques Eclipse et Java de Developpez.com

    Page de cours : mbaron.developpez.com
    Blog : keulkeul.blogspot.com
    Page Pro : www.lias-lab.fr/members/mickaelbaron
    LinkedIn : www.linkedin.com/in/mbaron
    Twitter : www.twitter.com/mickaelbaron

  13. #13
    Invité régulier
    Inscrit en
    décembre 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : décembre 2005
    Messages : 27
    Points : 7
    Points
    7

    Par défaut

    C'est vraiment un super article, merci !

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •