Précédent   Forum du club des développeurs et IT Pro > Java > Communauté Java > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources, et autres ressources pour la rubrique Java.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 03/11/2010, 15h57   #1
visiwi
Membre Expert
 
Avatar de visiwi
 
Inscription : février 2008
Messages : 1 049
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 049
Points : 1 173
Points : 1 173
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.
visiwi est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/11/2010, 18h03   #2
LittleWhite
Responsable 2D/3D/Jeux


 
Avatar de LittleWhite
 
Homme Alexandre Laurent
Ingénieur développement logiciels
Inscription : mai 2008
Messages : 10 426
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 : 10 426
Points : 40 017
Points : 40 017
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.
LittleWhite est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 05/11/2010, 22h38   #3
Mobius
Membre éprouvé
 
Avatar de Mobius
 
Inscription : avril 2005
Messages : 461
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 461
Points : 419
Points : 419
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
Mobius est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 18/11/2010, 15h58   #4
thierryler
Rédacteur
 
Avatar de thierryler
 
Homme Thierry Leriche-Dessirier
Inscription : octobre 2007
Messages : 2 139
Détails du profil
Informations personnelles :
Nom : Homme Thierry Leriche-Dessirier
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 2 139
Points : 5 909
Points : 5 909
Tu n'as pas prévu une version pdf de ton article ?
thierryler est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 18h00   #5
visiwi
Membre Expert
 
Avatar de visiwi
 
Inscription : février 2008
Messages : 1 049
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 049
Points : 1 173
Points : 1 173
Bonjour,

Et bien non... l'article à été directement écrit en HTML.
visiwi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 18h04   #6
thierryler
Rédacteur
 
Avatar de thierryler
 
Homme Thierry Leriche-Dessirier
Inscription : octobre 2007
Messages : 2 139
Détails du profil
Informations personnelles :
Nom : Homme Thierry Leriche-Dessirier
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 2 139
Points : 5 909
Points : 5 909
Ah bon ? Sans passer par l'éditeur ? pourquoi ?
thierryler est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 20h36   #7
thierryler
Rédacteur
 
Avatar de thierryler
 
Homme Thierry Leriche-Dessirier
Inscription : octobre 2007
Messages : 2 139
Détails du profil
Informations personnelles :
Nom : Homme Thierry Leriche-Dessirier
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 2 139
Points : 5 909
Points : 5 909
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 ?
thierryler est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 09h26   #8
thierryler
Rédacteur
 
Avatar de thierryler
 
Homme Thierry Leriche-Dessirier
Inscription : octobre 2007
Messages : 2 139
Détails du profil
Informations personnelles :
Nom : Homme Thierry Leriche-Dessirier
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 2 139
Points : 5 909
Points : 5 909
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.
thierryler est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 15h48   #9
visiwi
Membre Expert
 
Avatar de visiwi
 
Inscription : février 2008
Messages : 1 049
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 049
Points : 1 173
Points : 1 173
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
visiwi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 15h58   #10
thierryler
Rédacteur
 
Avatar de thierryler
 
Homme Thierry Leriche-Dessirier
Inscription : octobre 2007
Messages : 2 139
Détails du profil
Informations personnelles :
Nom : Homme Thierry Leriche-Dessirier
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 2 139
Points : 5 909
Points : 5 909
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
thierryler est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 17h54   #11
visiwi
Membre Expert
 
Avatar de visiwi
 
Inscription : février 2008
Messages : 1 049
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 049
Points : 1 173
Points : 1 173
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.
visiwi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 19h44   #12
keulkeul
Responsable Eclipse et JAVA

 
Avatar de keulkeul
 
Homme Mickael BARON
Ingénieur de Recherche
Inscription : juillet 2005
Messages : 3 973
Détails du profil
Informations personnelles :
Nom : Homme Mickael BARON
Localisation : France, Vienne (Poitou Charente)

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

Informations forums :
Inscription : juillet 2005
Messages : 3 973
Points : 19 053
Points : 19 053
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
keulkeul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2012, 11h21   #13
Ricoco
Invité régulier
 
Inscription : décembre 2005
Messages : 26
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 26
Points : 6
Points : 6
C'est vraiment un super article, merci !
Ricoco est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h02.


 
 
 
 
Partenaires

Hébergement Web