Mini Projets Java 1999/2000,
maîtrise d'informatique de l'Université de NICE.
Enseignants : Michel Buffa
et Richard Grin
Réalisation d'un casse-brique en java
-
Projet attribué à : Gomes-Gueit
-
Commentaire : Bien dans l'ensemble mais ça s'est planté
dans un des jeux et surtout il faut vraiment un ordinateur puissant pour
avoir une bonne jouabilité (mon pauvre Pentium 120 a vraiment du
mal !) La raquette est par exemple un peu lente à se déplacer.
La rapidité aurait sans doute été meilleure si vous
aviez déclaré protected les x et y de la classe ObjetGraphique
pour les manipuler directement dans les classes filles. Manque quelques
commentaires, par exemple pour expliquer la gestion des collisions entre
la balle et les briques. J'ai vu de drôles de truc dans votre code.
Par exemple, un appel à parseInt() par l'intermédiaire d'un
Integer i juste créé pour cela (alors que parseInt est static).
(dans la classe Editeur) Quelques problèmes aussi avec le choix
du type de brique dans l'éditeur de niveau. Je n'ai pas vraiment
compris comment je pouvais utiliser les niveaux que je dessinais Il faut
dire que les 64 Mo de mon PC semblaient insuffisant pour faire fonctionner
correctement cet éditeur de niveau.
-
Projet attribué à : Dellatre-Delluca
-
Commentaire : Queques problèmes d'affichage : des morceaux
de la raquette restent sur place ! J'ai eu quelques plantages ; par exemple,
impossible de bouger la raquette. Problème au niveau de la jouabilité
: j'ai été obligé de faire exprès de perdre
car la balle rebondissait toujours de la même façon sur la
raquette sans toucher aucune brique. Dans le test de collision, beaucoup
de constantes littérales ; il aurait été préférable
de créer des constantes nommées et d'expliquer à quoi
correspondaient ces valeurs. Je n'ai pas compris pourquoi vous utilisez
le pattern Observeur-able entre le plan de brique et le moteur puisque
seul le moteur observe les briques ? Le pire pour la fin : des switchs
à la place de l'utilisation du polymorphisme (méthode dessineToi
de PlanBriques). Ca, ça ne pardonne pas au niveau de la conception
objet ! Bon point : de tous les casse briques que j'ai corrigé,
le vôtre est le seul à faire tomber des capsules.
-
Projet attribué à : Bourgeois-Legrand
-
Lien vers la page
web du projet
-
Note : 12 + 1 = 13/20
-
Correcteur : R.Grin
-
Commentaire : Ca aurait été mieux si vous aviez précisé
la commande pour lancer le jeu Pourquoi ne pas utiliser la classe Dialog
pour les fenêtres de dialogues ? Beaucoup d'anomalies : pas d'affichage
de la balle aux niveaux autre que le 1er, les briques ne s'affichent pas
au début (plutôt génant, on ne voit pas sur quoi ça
rebondit !), etc? Pour faire afficher la balle au niveau 2 il faut faire
afficher un menu ! Le jeu ne fonctionne pas avec le clavier. Aucune explication
dans l'éditeur de niveau sur les différents types de briques
Commentaires parfois trop limités alors que les commentaires du
type "Constructeur de la classe AireDeJeu" sont inutiles. La raquette flash
un peu trop. Pour les bons côtés : bonne rapidité de
la raquette, jolis dessins de fond (mais ce dernier point ne compte pas
trop pour la note?), maniement du paddle avec la souris. Vous auriez pu
perséverer un peu plus dans le "tout swing" ; d'autres groupes ont
réussi à offrir un résultat correct avec Swing. J'ai
essayé sous Unix, ça ne marche pas vraiment beaucoup mieux.
Réalisation d'un browser d'images "à
la ACDSEE"
-
Projet attribué à :Nade + ?
-
Lien vers la page web du projet
-
Note : Ca vient !
-
Correcteur : M.Buffa
-
Commentaire : - Ca vient !
-
Projet attribué à : Chastanet-Peetroons
-
Lien vers la page
web du projet
-
Note : 14,5 + 1 = 15,5/20
-
Correcteur : R.Grin
-
Commentaire : - On n'utilise pas les plug-ins pour supporter différentes
langues en Java : tout est prévu avec les classes Locale, ResourceBundle,
MessageFormat, etc? Aucun commentaire javadoc pour les classes et très
peu de commentaires pour les méthodes. Toutes les affichettes sur
une seule ligne alors qu'il y a de la place en dessous. C'est bien d'utiliser
un paquetage. Des programmes mal indentés d'où un manque
de lisibilité. Remarque : inutile d'importer un paquetage dans les
classes de ce paquetage. Bonne extensibilité avec les plug-ins.
Dans run.bat, il ne faut pas lancer l'exécution si la compilation
n'a pas fonctionnné (pb avec JAI par exemple). Vous auriez dû
expliquer pourquoi vous avez utilisé JAI. L'utilisation du pluggable
look & feel et de JAI montre une curiosité de la chose Java.
Code ; lisibilité : mauvaise indentation de lignes par endroit (classe
interne Toggle? par exemple).
-
Projet attribué à : Riegert-Belhassen
-
Lien vers la page web
du projet
-
Note : 13,5 + 1= 14,5/20
-
Correcteur : R.Grin
-
Commentaire : - Bonne documentation. 2 exécutables pour compiler
et lancer l'application auraient été les bienvenus. Une petite
imprécision : taille des thumbnails toujours à 100 au début
du choix de cette taille. A part ça, l'application fonctionne bien.
Code : il faut éviter de redéfinir la méthode paint()
(fenetreMiniimage) en Swing ; il faut redéfinir paintComponent()
Il manque un FileChooser pour choisir le répertoire des images.
Pas de menu ou de boutons pour quitter.
Réalisation d'un catalogueur de CD/Générateur
de pochettes
-
Projet attribué à : Contes-Fretheim
-
Lien vers la page web
du projet
-
Note : 13 + 1 = 15/20
-
Correcteur : R.Grin
-
Commentaire : Le compil.bat ne marche pas (facile à corriger
mais vous auriez pu le tester). Idem pour jvc.bat !! Je lance et tout est
figé et rien ne semble se passer !?? Je suis obligé de tuer
les processus. Ca commence mal ! Ca marche sur les disquettes mais pas
sur les CD (je reste bloqué sans message d'attente). Encore obligé
de tuer les processus. Pas vraiment facile de comprendre comment ça
marche, même en lisant vos indications. On ne sait pas quels patterns
on peut utiliser. Par exemple *4 ne marche pas. Vous auriez dû utiliser
un paquetage pour les expressions régulières. Curieux vos
import : vous importez tout swing puis certaines classes de swing. Ca ne
fait pas très fini comme produit. Remarque en passant : utilisez
Thread.sleep() pour temporiser et pas des boucles vides.
-
Projet attribué à : Poirey-Clari
-
Lien vers la page web du
projet
-
Note : 13 + 1 = 14/20
-
Correcteur : R.Grin
-
Commentaire : Pas de recherche avec "jokers" ou expression régulière
Pas de possibilité d'avoir plusieurs bases de données. Bonne
présentation de la page Web. Mauvais lien vers la javadoc (pointe
vers le répertoire). Commentaires pauvres pour la javadoc : classes
sans commentaires, paramètres et types retour non commentés.
Code : Classes JApropos et JAide semblent inutiles (JOptionPane)
-
Projet attribué à : Abbondanza-Baudoin/JsortCD
-
Lien vers la page
web du projet
-
Note : 17/20
-
Correcteur : M.Buffa
-
Commentaire : Pas de liens vers les sources ni vers le javadoc dans
la page web. Belle interface graphique, fonctionelle. C'est bien, vous
avez presque réalisé la totalité des options proposées
par le sujet (en particulier, vous êtes les seuls à avoir
implémenté le mode client/serveur). Quelques défauts
cependants : la lecture du contenu d'un CD prend beaucoup de temps lorsqu'on
a stocké plusieurs centaines de fichiers mp3... Il faut le faire
en tâche de fond et tant qu'à faire, montrer l'arbre des répertoires
qui se construit en temps réel, comme avec Adaptec Easy CD Creator
par exemple... Les pochettes HTML sont atroces, les pochettes postscript
ne rentrent pas toujours sur une page A4 (chez moi ce n'est jamais en mode
portrait). pourquoi ne pas avoir utilisé le IceBrowserBean pour
afficher le HTML ? Le composant standard SWING pour visualiser du HTML
est archi buggé. Le code réseau est ok mais très "minimal"
: pas de parallélisme, pas de gestion de perte de connexion, pas
de validation des données, mais bon, c'est déjà bien
que vous ayez fait un truc. Belle doc, belle page web. Vous avez fait des
efforts dans le code pour que ça tourne à la fois dans le
monde Unix et le monde Windows (j'ai vu pas mal de petits patches du genre
: String os = env.getOs(); if ( os != null && os.startsWith("Windows")){
Eh oui, java portable c'est presque ça mais pas tout à fait,
en particulier pour les URLs locaux et les unités logiques d'E/S
! Votre code est très clair et bien documenté. Gros travail
de fourni pour la partie "Imprimerie et mise en page des pochettes". Malgré
les quelques défauts, ce travail mériterait d'être
continué et distribué. Excellent projet. NB : améliorations
importantes à effectuer = lecture et mise à jour de la base
de donnée à faire en tâche de fond, synchronisation
entre base de donnée locale et base de donnée distante, serveur
permettant d'accepter en tâche de fond plusieurs connexions simultanées
avec gestion de plusieurs bases de données pour des utilisateurs
différents, correction des bugs de pochette, utilisation de IceBrowser,
etc...
Réalisation d'un jeu à la "Bust a Move"/"Puzzle
Bubble"
-
Projet attribué à : Demaria-Héry
-
Lien vers la page web
du projet
-
Note : 14 + 1,5 = 15,5 /20
-
Correcteur : R.Grin
-
Commentaire : On ne sait pas qui a travaillé avec Demaria
(obligé d'aller lire le code). Il était demandé d'utiliser
Swing. Impossible de choisir un niveau de jeu (il s'affiche toujours le
même niveau). Pas de paquetage. On a vraiment l'impression de rejouer
toujours la même partie.
Réalisation d'un jeu à la "Tetris"
-
Projet attribué à : Verrando-?
-
Lien vers la page web
du projet
-
Note : 12 + 2 = 14/20
-
Correcteur : R.Grin
-
Commentaire : Est-ce que le projet a été fait seul
? Et comment je devine comment lancer le programme ? Le javadoc ne suffit
pas ! Et même dans la javadoc, aucune information sur les paramètres
ou les valeurs retournées par les méthodes. Au départ,
tout se bloque si on ne tape pas P, avec lancement d'une exception. Mauvaise
conception : n'utilisez une exception que pour les cas exceptionnels ou
les erreurs ; on ne peut pas dire que la fin d'une partie fasse partie
de ces cas. Commentaires : il y a une section synchronisée des méthodes
de la classe Piece ; vous devriez dire pourquoi dans un commentaire.
-
Projet attribué à : Basilico - Viet
-
Lien vers la page web du projet
-
Note : 15,5/20
-
Correcteur : M.Buffa
-
Commentaire :Tetris Il est joli votre tetris, et il a pas l'air
buggé... Même la classe MonCanvas.java dite "optimisée"
marche bien chez moi, sous Windows, en jdk 1.2... Page web ok, mais pas
super complète (classe principale ? Techniques employées
?) Le code est bien commenté, le javadoc est limpide. C'est clean.
Quelques remarques dans le code : ceci est à éviter à
tout prix :
panel.setLayout(null); (vu dans Tetris.java).
J'ai aussi vu :
public class Tetris extends JFrame implements ActionListener, KeyListener{
et un peu plus loin :
/* méthode à redéfinir obligatoirement */
public void keyTyped(KeyEvent e) {}
/* méthode à redéfinir obligatoirement */
public void keyReleased(KeyEvent e) {}
La classe keyAdapter est là pour ça !!! Pour éviter
d'implémenter des méthodes vides ! A quoi sert la classe
Touche.java qui est vide ? Bon, sinon c'est très propre... Bien.
Réalisation d'API pour le développement
de jeux vidéo
-
Projet attribué à : Nano-Bergel/Game Toolkit
-
Lien vers la page web du projet
-
Note : 17/20
-
Correcteur : M.Buffa
-
Commentaire : Une API qui n'est pas dans un package ? Belles pages
web bien documentées. Excellente idée d'avoir mis un tutorial.
J'aime bien votre éditeur de niveau qui accepte de loader des classes
pour les monstres. Il y a beaucoup de travail dans ce projet, ça
se sent. Le petit exemple proposé est convainquant. Javadoc ne contient
pas la description des classes (ce qu'elles font, à quoi elles servent).
En regardant juste le code de cet exemple, on comprend bien la philosophie
de votre toolkit. En revanche, le source de ce dernier aurait mérité
d'être commenté (dans les fichiers .java). Je sais bien que
vous en parlez dans votre page web sur le tutorial mais... Vous avez crée
vos propres classes d'évènements. C'est bien.
-
Projet attribué à : Laetitia Marin/Java Sprite Editor
-
Lien vers la page web du projet
-
Note : 16/20
-
Correcteur : M.Buffa
-
Commentaire : ENFIN UNE API QUI EST DANS DES PACKAGES !!! Grrr...
Tu aurais pu au moins mettre un bouton "browse" pour choisir les fichiers
à charger. Je n'ai pas réussi à le tester avec autre
chose que les images de test que tu charges au départ. Que viennent
faire les BSP là-dedans ? J'ai bien vu que tu avais développé
une API pour sprite/sequences, etc... Mais où est la doc ? Juste
une doc de l'API avec un exemple hyper simple ! Sinon, y'a du boulot, des
plugins partout (ça me plait bien les plugins, vous savez bien...).
Mais j'ai pas trop réussi à m'en servir?
-
Projet attribué à : Nicolas Peri/Editeur de particules
3D en Java
-
Lien vers la page web du
projet
-
Note : 17.5/20
-
Correcteur : M.Buffa
-
Commentaire : Superbe page Web ! A propos, j'ai essayé d'intégrer
le résultat de FLOP dans mon "TurboPacMan3D à interpolation
quadrique différentielle à flux ionique" et ça n'a
pas marché ! Non, je rigole...! Belle interface fonctionelle et
ergonomique, rien à dire c'est super ! Le système de plugins
est simple et efficace. Et ça bouge bien ! Je n'avais jamais utilisé
GL4java, je crois bien que je vais me pencher dessus... Je connais assez
bien OpenGL et pas Java3D alors...
Réalisation d'une API de jeux illustrée
par un Pacman
-
Projet attribué à : Clérico-Pistori
-
Lien vers la page web du
projet
-
Note : 17,5/20
-
Correcteur : M.Buffa
-
Commentaire : Bon, y'a du boulot c'est sûr, mais y'a aussi
pas mal de bugs. Je n'ai pas réussi à voir l'animation du
début, sous windows, même après avoir installé
JMF 1.1 (pourquoi ne pas avoir utilisé la version 2.0beta ?), j'ai
toujours eu des erreurs de compilation avec le fichier PresentationDialog.java.
La fenêtre de settings, onglet ghosts, est trop petite, il faut la
retailler pour que l'on voit tout ce qu'elle contient. Vous n'avez pas
eu le temps de développer de vraies stratégies de déplacement...
Dommage. Autre chose : je fais stop game/start game après avoir
modifié les settings et qu'est-ce que j'obtiens ? Deux jeux dans
la même fenêtre, évidemment qui n'avancent pas ! Sinon,
les synchronize! Dedieu ! Y'en a n'importe où ! (Exemple : public
synchronized void start () { dans Game.java ??? pourquoi là ?) J'ai
gardé le meilleur pour la fin : le modèle objet montre que
vous avez réfléchi, certains points sont très bien
(qui peut manger qui, le fait que vous chargez les classes dynamiquement,
la classe sprite avec ses séquences, etc...). Vous utilisez massivement
Observer/Observable, ce qui est bien, mais attention, dans certains cas
vous avec une methode update qui est relativement grosse, avec des if...
Il aurait peut-être mieux valu carrément créer vos
propres évènements, comme l'avait fait un des Pacmans des
mini-projets de l'an dernier. Le code est assez bien commenté, dommage
que toutes les classes ne soient pas livrées à la même
enseigne. A propos : avec quoi avez-vous créé vos sprites
? Puisque vous avez fait une API et non un jeu dédié, j'aurais
aimé voir une doc s'intitulant : "créez votre propre jeu
à partir de notre API", avec un exemple hypra simple comme démo.
Et surtout, surtout, surtout : une API c'est UN PACKAGE ! Un package java
! Je n'en ai pas vu l'ombre ! Projet ambitieux, très bien malgré
les bugs.
Réalisation d'un jeu vidéo à
la "Lemmings"
-
Projet attribué à : Rallo-Debono
-
Lien vers la page web du
projet
-
Note : 14,5/20
-
Correcteur : M.Buffa
-
Commentaire : Projet ambitieux. Du travail. J'ai du modifier votre
source pour le recompiler (méthode lancerJeu private dans Console.java,
appelée depuis Go.java). Sous Windows, en jdk 1.2 je ne vois pas
les lemmings !!! Je les distingue une seconde au début, j'ai des
tonnes de messages de debug qui passent et puis plus rien !!! J'ai juste
les messages ! Bon, y'a de la modélisation objet là-dedans
mais bonjour la doc ! Le javadoc est incomplet ! Où est le javadoc
de la classe Lemmings ? Quelqies explications sur le modèle objet
auraient été les bienvenues ! Vous aviez commencé
à faire des packages ? (ligne en commentaire dans SOund.java) pourquoi
ne pas avoir continué. Le code est commenté, ça va...
Vous avez touché à plein de choses (animation, son, etc...).
L'interface est jolie. Dommage que je en vois rien quand le jeu démarre.
Réalisation d'un éditeur de symboles
pour l'éditeur de formules mathématiques JOME
-
Projet attribué à : Corbucci-Anglada
-
Lien vers la page web du
projet
-
Note : 14,5/20
-
Correcteur : M.Buffa
-
Commentaire : Projet assez particulier dans la mesure où
il fallait rentrer dans le code de quelqu'un d'autre, un GROS code. Votre
travail était pas mal buggué mais il nous a permis de faire
progresser l'application originale en utilisant une partie de votre travail.
Code bien commenté, ergonomie pas mal mais il manquait quelques
petits trucs (une visu graphique des ascent et descent, etc... Je sais
que vous avez eu bien moins de temps que les autres pour ce projet. Indulgence
donc, et félicitations pour avoir réussi quand même
à faire quelque chose de présentable.
Réalisation d'un jeu vidéo à
la "Bomberman"
-
Projet attribué à : Baudois
-
Lien vers la page web du projet
-
Note : 12/20
-
Correcteur : M.Buffa
-
Commentaire : Assez joli, fluide, réactif. Les bestioles
meurent toujours toutes seules avant qu'il ne se passe quelque chose d'intéressant.
Dommage. Je sais bien que tu as documenté le fait que l'AI est minimale,
mais bon, le fait est qu'au bout de 5 secondes on est seul, quand même
!!! Peu de classes. Java doc minimal. Modèle objet peu extensible.
Dans MonCanvas.java pourquoi crées-tu un MediaTracker dans paintComponent()
??? Chaque fois que tu vas repeindre ton JComponent tu vas recréer
un MT ! Bon, sinon c'est pas mal... trop faible en quantité de code
produit à mon goût.
-
Projet attribué à : Quintian - Baduel
-
Lien
vers la page web du projet
-
Note : 16,5/20
-
Correcteur : M.Buffa
-
Commentaire : Très joli. Pas top amusant (la stratégie
de déplacement des bestioles n'incite pas vraiment à mettre
des sous dans la machine). Heu, vous êtes un peu sauvages vous !
Je ne sais pas si c'est pour optimiser mais le fait de redéfinir
toutes les méthodes de dessin du JPanel, ben, pendant le jeu on
ne peut même plus ouvrir le menu ! C'est quoi cette ligne aussi :
MediaTracker tracker = new MediaTracker(new JPanel());. Que vient faire
le new JPanel() ??? Pourquoi avoir mis la méthode qui gère
les actions du menu synchronized ??? Ca n'a pas de sens ! Même remarque
que pour d'autres concernant le KeyListener ! Il FAUT utiliser KeyAdapter
! Je trouve ce fichier GoBomberman.java assez bordélique ! Y'a des
commentaires, mais c'est quand même assez fouilli... Le reste est
bien, propre, commenté, compréhensible. Vous avez préféré
opter pour quelques Threads dans MoteurJeu.java qui déplacent tous
les objets, et la démarche est claire. Bon projet. Javadoc parfois
incomplet (champs ou méthodes non documentés)
Réalisation d'un jeu vidéo à
la "Lode Runner"
-
Projet attribué à : Caillette - Salamito
-
Lien vers la page web du
projet
-
Note : 14/20
-
Correcteur : M.Buffa
-
Commentaire : Petit jeu assez bien réalisé. Modèle
objet simple. Animation à revoir, dommage que vous n'ayez pas utilisé
de vrais sprites animés et vous n'ayez pas essayé de les
animer de manière plus fluide. Il n'y a qu'un seul ennemi. Pourquoi
? L'objet devrait permettre sans aucun effort d'en mettre 20 ! Trop de
dépendances d'une classe vers l'autre. Pourquoi par exemple la classe
Hero est-elle si dépendante de la classe Level ? Il aurait mieux
valu une classe intermédiaire pour gérer les interactions.
Deux versions : awt et swing. Bien. Les commentaires des méthodes
sont parfois peu précis.
Réalisation d'une simulation graphique de
l'algorithme producteur/consommateur
-
Projet attribué à : Abib - ?
-
Lien vers la page
web du projet
-
Note : 10,5/20
-
Correcteur : M.Buffa
-
Commentaire : Vous n'avez pas compris l'algorithme. Vous ne l'avez
absolument pas illustré. Projet peu extensible, on aurait pu faire
des choses marrantes avec, vous vous êtes cantonnés à
illustrer un truc évidemment sans grand intérêt dans
la mesure où la simultanéïté du cas multiples
producteurs et multiples consommateurs n'est pas utilisé. Ou bien
alors je ne comprend absolument rien à votre interface... Où
est la synchronisation là-dedans je m'attend à voir plusieurs
poules et plusieurs fermiers se bousculer à l'écran et je
ne vois jamais qu'une seule poule ou qu'un seul coq à la fois...