Mini-projet Info Min-Proj Guillaume Wisniewski guillaume.wisniewski@limsi.fr LIMSI UPS janvier 2015
Première partie I Organisation
Objectifs programmer «in the large» (plusieurs personnes, plusieurs classes, longue durée,...) mettre en œuvre les (bonnes) pratiques enseignées dans les différents cours de programmation s amuser
En pratique groupe de 3 ou 4 (chacun devant contribuer de manière équivalente) projet en java 1 cours + 10 séances de TP groupe 1 : Jialin Liu (jialin.liu@inria.fr) groupe 2 : Nicolas Galichet (galichet.nicolas@gmail.com) + travail personnel (code + lecture)
Évaluation 1. contrôle continu : état d avancement 2. examen final : code + rapport court ( 10-15 pages) travail effectué + contribution de chacun organisation du code (choix architecture) modalités précisées ultérieurement
Exemple de rapport Ce qu il ne faut pas faire... La fonction a contient une boucle for allant de 1 à t.length - 1 qui parcourt tous les éléments du tableau t mauvais nom de variables + for au lieu de foreach (surtout) décrit ce que fait le code et non pourquoi on fait ça Ce qu il faut faire... Le programme est organisé autour de 3 classes principales. La première... La seconde classe correspond à la gestion de l affichage graphique... Pour contrôler l affichage la classe A a un attribut de type B
Le sujet Programmer une «IA» capable de jouer à Sushi Go Round www.miniclip.com/games/sushi-go-round/en
Démo
Deuxième partie II Principe du code à réaliser
Principe de l IA jeu à base de sprits sprits = élément graphique de taille fixe, placé à une position donnée objectif : identifiée les commandes (identifier les sprits des sushi) + les fabriquer (cliquer à des positions prédéfinis)
Plus précisement (1) commandes toujours à la même position (par rapport à l écran de jeu) comparaison pixel à pixel
Plus précisement (2) position du clic : capture d écran + afficher les coordonnées du pixel
Principe de l algorithme Gestion du menu principal réaliser les différents clics permettant d accéder au jeu Niveau 1. identifier les nouvelles commandes identification des sprits 2. vérifier le niveau des ingrédients gérer les comptes «à la main» et passer éventuellement commande 3. réaliser les commandes 4. de temps en temps : cliquer sur les assiettes Passage au niveau suivant détecter échec/succès et réaliser les clics correspondants
Troisième partie III Évaluation
Critère d évaluation 1. Faire du code «qui marche» est-ce que votre programme tourne / n a pas un comportement complètement stupide 10 points 2. Faire du code qui est «beau» (clair, compréhensible, facilement modifiable,...) 6 points 3. Au choix 4 points : réfléchir à une stratégie optimale réfléchir à
1 er critère : faire du code qui marche démo : une fois l url entrée on est capable de i) jouer ii) passer les 2 premiers niveaux aspect du jeux à prendre en compte : identifier les commandes les réaliser commander les ingrédients
2 e critère : qualité du code qualité du code : utilisation des bonnes structures de données, convention de code,... qualité de l architecture : choix des classes/interfaces, échange des informations entre classes, respect de l encapsulation,... il n y a pas 1 unique bonne réponse essentiellement : rapport pour justifier ce que vous avez fait montrez nous que vous avez réfléchi......et que le résultat de vos réflexion est crédible
3 e critère question «bonus» = pour aller plus loin au choix : aspect «génie logiciel» : adapter/modifier l architecture pour que votre logiciel soit capable de jouer à un autre jeu : Cardinal Color Finger Holy Stomping aspect «intelligence artificielle / optimisation» : trouver la stratégie qui permet d obtenir le meilleur score : dans quel ordre répondre aux commandes? quand commander? quand débarrasser?
Quatrième partie IV Outils/Conseils
Les outils dont vous aurez besoin Classes de l API standard BufferedImage et ImageIO pour la manipulation des images Robot pour la manipulation de la souris + accès à l écran Outils profiler : pour identifier les parties du code qu il faut optimiser gestionnaire de version : faciliter le partage de code
Java Profiler Principe Jeu «en temps réel» il faut prendre des décisions «rapidement» profiling = analyse d un logiciel pour connaître son comportement lors de l exécution consommation mémoire consommation CPU... Mise en œuvre beaucoup d outils conseillé : JVM Monitor intégré directement à Eclipse http://www.jvmmonitor.org/doc/index.html
En pratique
Gestionnaire de version (1) Objectifs garder une trace de toutes les modifications qui ont été faites sur un ensemble de fichiers 1. documentation 2. retrouver une version qui marche partager des fichiers entre plusieurs personnes 1. partager les modifications (tout le monde est «informé» d une modification d un des fichiers) 2. éviter de perdre des modifications
Perte de modifications
Lecture Principe et intérêt des contrôles de version http://betterexplained.com/articles/ a-visual-guide-to-version-control/ http://git-scm.com/video/what-is-version-control Logiciels git : logiciel de gestion de versions github : service web d hébergement et de gestion de développement de logiciels
Les conseils pour bien commencer ne commencez pas à coder trop vite : réfléchir à l organisation générale de votre code (classes, interface,...) partage des responsabilités... n attendez pas trop pour commencer à coder la plupart des problèmes ne sont pas prévisibles à l avance important d avoir rapidement un «prototype» qui marche cliquer à un endroit donné reconnaître la fenêtre de jeu... tester au fur et à mesure + éviter les régressions tests unitaires