Concours de programmation #1 - Janvier 2014 - Vote



  • Voici un sondage de vote pour élire le meilleur programme !


  • Moddeurs confirmés

    Et c'est où qu'on les télécharge? Peut être mettre les liens?



  • Les liens de téléchargement sont disponibles sur l'autre sujet, soit vous allez les chercher soit les candidats auront la gentillesse de les poster ici.

    EDIT : J'ai rajouté 15 jours au sondage, vous avez jusqu'au 02/03/14 pour voter !



  • Je poste mon programme donc. 👼

    Le jeu du plus ou moins, par EclipseOnFire.

    #Téléchargements(Téléchargements)

    Le jeu est open source et disponible gratuitement (n'oublions pas le copyright :D). Trêve de bavardages, voici les liens 🆒 :

    Version Windows (.exe) –- Version multiplateforme (.jar)

    (https://dl.dropboxusercontent.com/u/49106433/PlusOuMoins/Plus%20ou%20moins.zip)
    
    #Caractéristiques techniques et installation(Caractéristiques techniques et installation)
    
    Afin de jouer au jeu, téléchargez le lien qui correspond à votre système d'exploitation puis placez-le n'importe où et lancez-le. Bon jeu !
    
    :exclamation: *Note :* Le programme va créer deux fichiers pour fonctionner : le fichier "log.txt" contenant les erreurs éventuelles et le fichier "scores.sc" contenant les scores. **Si l'un des deux fichiers existent, ils seront écrasés**.
    
    Si, en revanche, vous souhaitez lire le code source, il vous suffit d'extraire le dossier contenu dans l'archive (.zip) dans le Workspace d'Eclipse puis de créer, dans l'interface d'Eclipse, un nouveau projet portant **exactement** le même nom que le dossier que vous venez d'extraire. Les sources se joindront automatiquement au projet que vous venez de créer. Le cas échéant, actualisez votre Workspace ou redémarrez Eclipse. Si le problème persiste, vérifiez que toutes les étapes décrites ci-dessus ont été suivies, ou contactez-moi par MP.
    
    Voici quelques caractéristiques techniques qui éviteront à ceux qui n'en ont pas envie de lire les sources :
    [list]
    [*]Interface graphique dotée de divers menus ("Nouveau jeu", "A propos...", "Comment jouer" etc.);
    [*]Système de logging avancé (Fichier "log.txt", remplacement total du système de log);
    [*]Système de scores classé selon la difficulté et le score;
    [*]Quatre niveaux de difficulté : Facile, Moyen, Difficile et Impossible;
    [*]Scores et pseudonymes cryptés;
    [*]Cryptage différent pour chaque ordinateur;
    [*]Code aéré et commenté (classe décrites, fonctions analysées).
    [/list]
    Voilà tout ! N'hésitez pas à commenter et à poser vos questions ;)
    

  • Moddeurs confirmés

    Je vais te donner mon avis sur certains passages de ton code @EclipseOnFire 😉

    GameWindow :

    Ton serialVersionIUD pour moi ne sert a rien, cette variable est utile a définir quand tu sérialises ta classes.
    Ça permet de vérifier s'il y a une différence de version entre une classe que tu as sérialisé et que tu voudrais désérialiser.
    Imagine par exemple que tu enregistre une instance de la classe GameWindow dans un fichier texte.
    Ensuite tu ajoute la méthode setGod(boolean b) a ta classe et que tu veuilles recharger ton instance mémorisé sur ton fichier texte.
    La une erreur se déclenchera 😉

    JPanel contentPane :
    Ta JFrame, lorsqu'elle est instanciée, c'est a dire avant même ta première instruction dans le constructeurs de ta classe GameWindow, possède déjà un contentPane vide est fraîchement initialisé. Donc tes instructions sont inutile et occasionnent une perte de performance puisque tu refait quelque chose qui a déjà été fait.
    A la place tu aurais du faire directement :

    
    contentPane = this.getContentPane();
    contentPane.setLayout(/*Outch ! :P */);
    
    

    setLayout(null) : Aie aie aie ! 😛
    C'est quelque chose de très mauvais, tu devrais te renseigner sur les layouts, c'est une partie non négligeable de toute la programmation graphique en Java 😉

    defaultInfomessage : Ta variable change-t'elle au cours de l'exécution de ton programme ?
    Si non, pense a mettre ton attribut en final et tout en majuscule pour respecter les conventions de nommages 😉
    Les variables final ne se trouve pas au même endroit dans la mémoire, si une variable ne change pas, tu optimises ton code en la plaçant en final et tu simplifie la compréhension de ton code 😉

    Pour le JSpinner :

    selector.setModel(new SpinnerNumberModel(0,0,null,10));
    

    Pourquoi avoir choisis ce constructeur qui utilise des objets et non des types primitifs ?
    Pour moi, tu aurais du choisir celui la :

    SpinnerNumberModel(int value,int min,int max,int step)
    

    Avec comme valeurs 0, 0, 10, 1.

    !playerName.equals("")
    

    Peut être remplacer par :

    playerName.length()>0
    

    La 2nd méthode est plus rapide, je ne rentre pas dans les détails 😉

    Bon je me rends compte que c'est long de te faire une correction complète ! xD
    Je vais aller moins dans le détail 😛

    On va parler généricité. La généricité c'est la capacité d'une classe a s'adapter a d'autre classe en gros.
    La classe Comparator est générique, la classe List et toutes les collections le sont aussi.
    Tu reconnais les classes génériques car elles se présentent sous ce format NomDeClasse<variable>.
    Ça peut varier, on a parfois, par exemple pour les map, Map<k,v>. Ou pour d'autre collection Coll<k extends="" e="">.

    A quoi ça sert, prenons un exemple concret.
    Une ArrayList <e>va te renvoyer un objet de type E quand tu va appeler la methode get(int i).
    Si tu dit que c'est une ArrayList<string>, ça va te renvoyer un objet de type String
    etc …

    Je te parle de tout ça, car tu utilise mal cette notion dans ScoreComparator.
    Nous sommes d'accord que lorsque nous comparons 2 scores entre eux, nous comparons 2 objets Score.
    Et pas 2 "T".
    Voila ce que te donne ton code :

    
    public class ScoreComparator <t>implements Comparator<t>{
    .....
    public int compare(T obj1, T obj2) ...
    
    

    Ce qu'il faudrait faire :

    
    public class ScoreComparator implements Comparator<score>{
    .....
    public int compare(Score obj1, Score obj2) ...
    
    

    Comme ça tout les T sont remplacé par des Score, ce qui ne pose plus de problème de cast et donc :
    plus de ClassCastException a vérifier.

    Tes listeners :
    Créé une classe pour chaque listener ce n'est pas pratique, c'est long et comme java est très verbeux, ça ne rend pas la tache rapide 😉 Pense a faire des déclarations anonymes exemple :

    
    quitMenu.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e){
    System.exit(0);
    }
    });
    
    

    tu gagneras beaucoup de temps 😉
    Puis dans Java 1.8, il va y avoir des changements sur les fonctions, on pourra déclarer des fonctions sans même recourir a une classe, donc ce sera encore plus rapide ! 😄

    Si tu as eu le courage de lire jusqu'au bout, je vais te donner un raccourcis pratique que peut de débutant connaisse :
    Ctrl+espace 😉
    Par exemple pour faire un System.out.println();, entre simplement syso et fait ctrl+espace 😉
    Ça te permet aussi d'ouvrir le menu contextuel qui s'ouvre quand tu fait un . après une variable 😉
    Je te parlais des definitions en extension, tape :
    quitMenu.addActionListener(new Ac ctrl+espace,
    tu vas voir, le gain te temps, c'est magique 🆒

    Il y a beaucoup d'autre petites chose a dire, mais ce n'est pas très important pour l'instant 😉
    Je préfère en dire un peu a la fois, c'est plus pédagogique :P</score></t></t></string></e></k></k,v></variable>



  • @'Blackout':

    Je vais te donner mon avis sur certains passages de ton code @EclipseOnFire 😉

    serialVersionIUD –> En fait Eclipse me l'a conseillé, je l'ai mis mais c'est vrai que c'est pas vraiment utile ^^.
    Jframe --> J'utilise une application pour faire les interfaces, c'est pour ça que j'ai quelques défauts de programmation à ce niveau là. Je relis le code rapidement mais je m'y attarde pas, c'est pas très intéressant pour moi ^^, même si je devrais le faire moi-même.
    Layout --> Idem, c'est plus pratique pour avoir des dialogues vraiment perso.
    playerName.length()>0 --> J'y pensais pas, tu as raison oui c'est un peu idiot ^^.
    ScoreComparator --> A vrai dire, j'ai pas trop compris comment s'en servir car les tutos la dessus étaient vraiment vagues, surtout sur le site d'Oracle.
    ActionListener --> On m'a fortement déconseillé de le faire en fait. En plus c'est plus clair de faire une classe par Listener, je préfère perso.

    Sinon c'est sûr que je suis pas au point en Java hein, j'en suis pas encore aux études. J'apprends petit à petit, d'ailleurs merci de m'aider ^^. Je trouve que je me débrouille pas mal dans l'ensemble puisque j'arrive à faire des trucs cool mais je dois avouer que j'ai quelques faiblesses et réflexes pourris 😛


  • Moddeurs confirmés

    serialVersionIUD –> Tu as aussi la suggestion @SuppressWarning("serial") 😉

    JFrame --> J'aimerai bien vous expliquer les bases, mais dans le modding, ça ne vous sera pas utile a proprement parlé.
    Donc le mieux si tu veux progresser la dedans c'est de t’entraîner sur le site du zéro (devenu OpenClassRoom) puis si tu as des questions, des choses que tu ne comprends pas, tu m'envois un MP 😉

    Layout --> Au contraire, ça va très mal s'adapter au petite résolution.

    ScoreComparator --> Ça peut paraître peu intuitif au début, j'espère qu'avec les explications que je t'ai donner tu as pu saisir plus de chose. En gros, prend la variable <t>comme un paramètre de ta classe.
    Comparator a besoin d'un parametre, tu lui donne Score.
    Eclipse de donne le code ScoreComparator <t>implements Comparator <t>car il ne peut pas deviner quel est la spécification que tu demandes. Donc il passe le paramètre de ScoreComparator a Comparator 😉

    ActionListener --> Bah tout dépend en fait ^^
    Si tu as beaucoup de chose a mettre, genre SubmitButtonListener, oui dans ce cas, c'est utile.
    Puisque ton cerveau va avoir du mal a retenir ou est ce que tu en ai dans le programme et ce que fait concrètement le listener.

    Mais quand tu dois faire une seul instruction comme pour QuitMenuListener, c'est pas nécessairement moins clair, au contraire même.
    Puisqu' actuellement pour comprendre ce que fait QuitMenu, tu dois descendre tout en bas de la page, lire 1 ligne de 3 mots et tout remonté.
    Comme tu comprend très vite ce que fait ton listener, pas la peine d'en faire une classe 😉

    Si tu apprend de 0 de manière autodidacte, les erreurs que tu fais sont normal 😉
    Je ne fais que tu conseiller pour que tu progresses plus vite si tu en as envie 😉

    Après dans un POM, la conception est quasi nulle et l'algorithme très très légers ^^
    A en voir le prochain concours, ça risque d'être beaucoup plus difficile xD
    Je me demande même si la personne qui s'en occupe a vraiment la capacité de chiffrer le projet xD
    Enfin je dis ça je dis rien, on a peut-être des pros invétérés de la programmation sur le forum :P</t></t></t>



  • Je propose l'ajout de la fonction "log.txt" dans nos cerveaux ! 😛

    Personnellement je vais pas arriver à coder un jeu en 2D car j'ai pas le temps et en plus il me faudrait savoir comment gérer les interfaces graphiques (comme pour Minecraft quoi). Mais j'ai démarré un projet et j'ai tenté de faire un truc qui extends un Canevas. J'ai envie de dire : hardcore ! Sinon à propos du concours c'est un peu abusé je trouve, on passe du plus ou moins (exercice standard pour apprendre les boucles) au jeu en 2D (qui est niveau confirmé) sans passer par le pendu (exercice pour apprendre les boucles, les chaînes de caractères et/ou la lecture de fichiers) ni la calculatrice…
    En gros ça veut dire que la prochaine étape ce sera l'application mathématiques (calculatrice, traçage de courbes, résolution d'équations...) et ensuite le jeu en 3D ^^. A ce rythme là on a fini les concours dans 6 mois. Après chacun son avis...


  • Moddeurs confirmés

    Je me demande qui va participer et parmi les volontaires, qui rendra quelques chose ^^



  • Non EclipseOnFire, on fera le pendu, etc. mais je tiens a voir votre niveau dans un projet simple en courte durée et un gros projet de très courte durée.



  • @'@Pchom':

    Non EclipseOnFire, on fera le pendu, etc. mais je tiens a voir votre niveau dans un projet simple en courte durée et un gros projet de très courte durée.

    Okay d'accord. Perso je vais pas y arriver. Non seulement j'ai du boulot personnel (études) mais aussi du boulot dans mes loisirs (serveur). Tout le monde a les mêmes ennuis que moi étant donné que 80% des moddeurs du forum sont étudiants et que 80% ont un mod à gérer, c'est aussi pour ça que je juge le projet difficile. Après c'est mon avis hein…


  • Moddeurs confirmés

    @'EclipseOnFire':

    @'@Pchom':

    Non EclipseOnFire, on fera le pendu, etc. mais je tiens a voir votre niveau dans un projet simple en courte durée et un gros projet de très courte durée.

    Okay d'accord. Perso je vais pas y arriver. Non seulement j'ai du boulot personnel (études) mais aussi du boulot dans mes loisirs (serveur). Tout le monde a les mêmes ennuis que moi étant donné que 80% des moddeurs du forum sont étudiants et que 80% ont un mod à gérer, c'est aussi pour ça que je juge le projet difficile. Après c'est mon avis hein…

    Je suis exactement du même avis 😉
    @Pchom, j'espère que tu participera au concours n°2 😛
    Je cherche des codeurs, donc j'aime particulièrement regarder ce qui est fait lors des concours.



  • Mmmm… si j'avais mis C++ en langage autorisé, j'aurai participé, mais je veux du java pour cette fois, et autant dire que je suis nul en java...



  • Finalement on aura un gagnant ou c'est annulé en raison du nombre de concurrents ?


Log in to reply