Sollaud Timothée Girard Alexis. Rapport de projet



Documents pareils
Environnements de développement (intégrés)

Poker. A rendre pour le 25 avril

FACTURATION. Menu. Fonctionnement. Allez dans le menu «Gestion» puis «Facturation» 1 Descriptif du dossier (onglet Facturation)

Eclipse atelier Java

Créer le schéma relationnel d une base de données ACCESS

Projet de développement

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Traduction des Langages : Le Compilateur Micro Java

Notice d utilisation

BADPLUS V5 MANUEL D'UTILISATION. Imports de données joueurs à partir de la base fédérale en ligne Poona. Stéphan KIEFFER - Dominique BOSSERT

PARAGON - Sauvegarde système

Projet de développement. Introduction à Eclipse. Application à votre projet. Philippe Collet. Organisation. Cours 1 : principes généraux - svn

Introduction à MATLAB R

< Atelier 1 /> Démarrer une application web

LES DECIMALES DE π BERNARD EGGER

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Organiser les informations ( approche technique )

Projet Active Object

Premiers Pas avec OneNote 2013

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Silk Portfolio : Une démarche allégée pour les tests, le développement et la gestion de vos applications

2 Grad Info Soir Langage C++ Juin Projet BANQUE

Entraînement au concours ACM-ICPC

Groupe Eyrolles, 2006, pour la présente édition, ISBN :

Master Poly Trader. Manuel d utilisateur. Group IV Benoît Perroud Marius Erni Lionel Matthey David Wenger Lotfi Hussami

LES TOUT PREMIERS PAS

PRISE EN MAIN D ILLUSTRATOR

Introduction à Eclipse

Conventions d écriture et outils de mise au point

Création et Gestion des tables

Premiers Pas en Programmation Objet : les Classes et les Objets

Comment accéder à d Internet Explorer

FEN FICHE EMPLOIS NUISANCES

2 Moodle Guide 2c : banque de questions et activité Test. Version du service

Algorithmes récursifs

TP1 : Initiation à l algorithmique (1 séance)

La magie de SVN. Découverte & usage du logiciel

F7n COUP DE BOURSE, NOMBRE DÉRIVÉ

TP 1. Prise en main du langage Python

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

CREG : versailles.fr/spip.php?article803

Créer un premier document avec Pages

Studio. HERITIER Emmanuelle PERSYN Elodie. SCHMUTZ Amandine SCHWEITZER Guillaume

Manuel utilisateur. Version 1.6b

TP1 : Initiation à Java et Eclipse

Documentation Honolulu 14 (1)

N importe qui possédant un code MS valide peut initier la rencontre. Néanmoins, il serait préférable de laisser cette

Le langage C. Séance n 4

V- Manipulations de nombres en binaire

Concevoir son premier espace de cours sur la plateforme pédagogique Moodle

TD : Codage des images

Les nombres entiers. Durée suggérée: 3 semaines

Introduction à HTML5, CSS3 et au responsive web design

Utilisez Toucan portable pour vos sauvegardes

IV- Comment fonctionne un ordinateur?

TP 4 de familiarisation avec Unix

Tutoriel D utilisation. Du PGI Open line d EBP

Reporting Services - Administration

Gestion du parc informatique matériel et logiciel de l Ensicaen. Rapport de projet. Spécialité Informatique 2 e année. SAKHI Taoufik SIFAOUI Mohammed

PG208, Projet n 3 : Serveur HTTP évolué

Évaluation et implémentation des langages

UE Programmation Impérative Licence 2ème Année

Saisissez le login et le mot de passe (attention aux minuscules et majuscules) qui vous ont

Algorithme. Table des matières

Rapport de Projet Béatrice Frey et Cyril Crassin Printemps Projet Fourmis. Université de Technologie de Belfort-Montbéliard

Manuel d utilisation pour la plateforme BeExcellent MANUEL D UTILISATION POUR LA PLATEFORME BEEXCELLENT

Découvrez ce que votre enfant peut voir

Utiliser Dev-C++ .1Installation de Dev-C++ Table des matières

Notice d installation et d utilisation du blog nomade avec un nouveau blog

Introduction à l algorithmique et à la programmation (Info 2)

Trois nouveaux formulaires sont donc nécessaires : Pour l affichage de la liste, un formulaire de sortie WEB_Liste associé à la table des [Films] ;

Atelier Formation Pages sur ipad Pages sur ipad

[WINDOWS 7 - LES FICHIERS] 28 avril Logiciel / Windows

Table des matières Avant-propos... V Scripting Windows, pour quoi faire?... 1 Dans quel contexte?

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Atelier Découverte de Windows. janvier 2012

SOCLE COMMUN - La Compétence 3 Les principaux éléments de mathématiques et la culture scientifique et technologique

Petit guide des sous-réseaux IP

Utilisation de GCM (Google Cloud Messaging) pour Android. Partie préliminaire éventuelle : Création d'un AVD lisant GCM

1 Si par exemple le choix est entre une thérapie pris en charge par le système de santé public et une thérapie à 100 la séance,

Nombres, mesures et incertitudes en sciences physiques et chimiques. Groupe des Sciences physiques et chimiques de l IGEN

Les structures. Chapitre 3

Sommaire Introduction... 3 Le but du projet... 3 Les moyens utilisés... 3 Informations sur le client FTP... 4 Pourquoi une version Linux et

Mes documents Sauvegardés

PROGRAMMATION D UN ENREGISTREUR NUMÉRIQUE PERSONNEL (ENP) À PARTIR D ILLICO WEB. Guide d utilisation v 1.0

PREMIERE UTILISATION D IS-LOG

Sommaire. Images Actives Logiciel libre développé par le CRDP de l académie de Versailles 2 Rue Pierre Bourdan Marly le Roi

Séance du jeudi 22 novembre 2012 (13h30 16h30)

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Simulation d une économie monétaire (programmation impérative, sujet 3)

Tutoriel : Utilisation du serveur de calcul à distance de PSE

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

PIC EVAL Dev Board PIC18F97J60

Solutions du chapitre 4

Initiation à la Programmation en Logique avec SISCtus Prolog

Séance 1 Introduction aux bases de données

Guide d installation de L A TEX

Transcription:

Sollaud Timothée Girard Alexis Rapport de projet 20 avril 2012

Table des matières Introduction 3 1 Présentation du projet......................................... 3 2 Présentation de l environnement de développement......................... 3 2.1 Outil de gestion de version.................................. 3 2.2 Éditeur de code......................................... 3 2.3 Logiciel de débogage...................................... 3 2.4 Système de documentation automatique........................... 3 2.5 Système d édition de texte................................... 3 Développement 4 1 L orientation choisi........................................... 4 1.1 L organisation......................................... 4 1.2 Les interactions......................................... 5 1.3 La configuration........................................ 5 2 La chronologie du developpement................................... 6 3 Les difficultés rencontrées....................................... 6 Bilan 7 2

Introduction 1 Présentation du projet Dans le cadre de l unité d enseignement "environnement de développement et projet de programmation" de notre quatrième semestre de formation à la Licence d Informatique, il nous a été proposé de réaliser un programme simulant la vie de poissons. Celui-ci devait être réalisé en binôme et être écrit en C. Pour cela, nous disposions de différents outils (gestion de version, profiling de code, debbugging, documentation automatique de code) sur notre environnement de développement. 2 Présentation de l environnement de développement 2.1 Outil de gestion de version Le projet étant un travail de groupe, nous avons décidé d utiliser Subversion afin que chacun puisse disposer d une copie de travail chez lui. Nous avons choisi ce logiciel car il nous a été présenté durant le semestre et parce qu il en existe une version pour Windows : TortoiseSVN. 2.2 Éditeur de code L édition du code source de notre projet a été réalisée sous emacs. En effet, bien que nous ayons découvert éclipse durant le semestre, emacs nous a semblé être plus adapté au langage qui nous était imposé : le C. (Éclipse étant plutôt utilisé pour coder en java.) Au départ, nous avons également travaillé sous Visual Studio 2010 (une version MSDN étant mise à notre disposition) mais nous avons rapidement abandonné car, bien que très complet, cet outil ne prend pas en compte le standard c99. 2.3 Logiciel de débogage Pour nous aider dans le développement de notre programme, nous avons utilisé GDB. Cet outil sur lequel nous avons été formé est pratique et rapide d utilisation. De plus, c est l un des seuls disponibles sous emacs. Nous avons également eu l occasion d utiliser le débogueur intégré à Visual Studio 2010. 2.4 Système de documentation automatique Afin de réaliser une documentation claire et complète, nous avons utilisé Doxygen. Cet outil est très rapide à prendre en main et offre un résultat, très complet, disponible sous plusieurs formats (L A TEX, HTML,...). 2.5 Système d édition de texte Ce rapport a été réalisé sous Texmaker en L A TEX. 3

Développement 1 L orientation choisi 1.1 L organisation Les espèces Il y a trois espèces de poisson définies dans une énumération {Bar, Sar, Shark}. Chaque espèce définit des caractéristiques qui lui sont propres : le nombre de représentants et un booléen qui indique s il s agit d une espèce prédatrice (cas des Shark). D autres propriétés concernent ses représentants : la vitesse de déplacement, une fourchette de distance de vue, le chemin de l image du poisson en bonne santé, le chemin de l image du poisson mourant. Les poissons Les poissons sont caractérisés par leur espèce. Chaque poisson a un poids initial, une taille, une position, une direction (monter/descendre), une distance de vue (piochée dans l intervalle des possibles de son espèce), une vitesse (fonction de son espèce) et appartient à un banc. Afin de simplifier l ensemble et de nous permettre d utiliser des images de poisson "réalistes", nous avons fait le choix de faire constamment avancer les poissons de gauche à droite. Pour simplifier la gestion des bancs et des mouvements, nous avons placé chaque poisson dans un banc. Afin d apporter du réalisme à la simulation, chaque fois que le poisson se déplace, il perd 1 de poids. Lorsque son poids est critique, il est représenté en utilisant l image de son espèce mourante. Si son poids arrive a zero, le poisson meurt et disparaît. Toujours dans le but d accroître le réalisme, chaque poisson dispose d une distance de vue qui lui est propre. Celle-ci est déterminée selon le minima et le maxima de l espèce à laquelle il appartient. Pour simplifier la gestion des collisions, son champ de vision est représenté par une surface rectangulaire qui englobe sa moitié avant, afin de lui permettre de voir une partie des côtés. Les bancs Un banc comporte un leader, une liste de poissons membres et une direction.comme nous l avons vu précédemment, chaque poisson appartient à un banc. Ainsi, lorsqu un poisson voit un autre poisson de la même espèce, leurs bancs fusionnent. Les poissons se déplaçant toujours dans le même sens, il nous a paru logique de choisir pour leader le poisson le plus avancé (c est à dire le plus à droite). Le banc ainsi formé se réduit automatiquement dès lors que l un des membres n est plus en mesure de voir au moins un congénère appartenant au même banc, alors il forme son propre banc. Le mouvement du banc est déterminé aléatoirement. Il est identique pour chaque membre. Cependant, chaque poisson continu a gérer ses propres interactions. La nourriture La nourriture apparaît aléatoirement à intervalle de temps régulier. Elle possède une image pour sa représentation graphique, une position (fixe) et le bonus de poids qu elle apporte à celui qui la consomme. Elle peut être consommée que par les espèces non prédatrices. En effet, dans un soucis de réalisme, nos prédateurs ne s intéressent qu à des proies de plus grande taille. Les obstacles Les obstacles sont placés au chargement du programme et sont fixes. Ils sont caractérisés par l image qui les représente ainsi que leur position. Nous avons choisi de définir leur position en fonction de la taille de la fenêtre afin qu aucun obstacle ne puisse se trouver hors écran. 4

1.2 Les interactions Entre poissons Lorsque deux poissons de la même espèce se voient, ils forment un banc et se déplace alors de façon synchronisée. Lorsque un poisson d une espèce de proie voit un prédateur, il s éloigne jusqu à ne plus le voir. Lorsqu un poisson prédateur voit une proie, il s en approche. S il la touche, alors la proie est mangée et disparaît. Le prédateur se duplique et gagne 1/3 du poids de sa proie (Il manque 2/3 : on peut imaginer que le premier tiers a été perdu durant le combat et l autre tiers n est pas digéré.) En cas de collision entre deux poissons de la même espèce ou d espèces non prédatrices, les poissons sont placés l un derrière l autre. Entre poisson et nourriture Seul les espèces non prédatrices s intéressent à la nourriture. Lorsqu un poisson voit une nourriture, il se dirige vers elle. Lorsqu un poisson touche une nourriture : il la mange. Celle-ci disparaît et le poisson qui a mangé se duplique et gagne le bonus de poids qu elle apporte. Entre poisson et obstacle Lorsqu un poisson voit un obstacle, il l évite en se dirigeant au-dessus ou au-dessous, selon ce qui est le plus rapide. Lorsqu un poisson touche un obstacle, il est déplacé (au plus proche) juste au dessus ou juste au dessous de celui-ci. Les priorités Voici l ordre des priorités que nous avons établi en fonction de ce qui nous a semblé le plus réaliste : Éviter les obstacles. Éviter les prédateurs. Éviter les autres poissons/former des bancs. Aller vers la nourriture. 1.3 La configuration Afin de permettre à l utilisateur d adapter la simulation, nous avons mis a sa disposition un fichier de configuration (config.ini). Celui-ci permet de modifier : La longueur de la fenêtre : ScreenWidth, entier La hauteur de la fenêtre : ScreenHeight, entier L image d arrière plan : Background, chaîne de caractères Le nombre de poisson maximum : NbFish, entier Le nombre de prédateur maximum : NbMaxPred, entier Le poids de départ des poissons : WeightStartingFish, entier Le poids à partir duquel le poisson est considéré comme mourant : WeightDyingFish, entier Le nombre de nourriture maximum : NbFood, entier La fréquence d apparition de la nourriture (en seconde) : TimeFoodPop, décimal Le bonus de poids apporté par la nourriture : WeightFoodBonus, entier A l exécution, si le fichier config.ini n est pas trouvé, il est automatiquement créé avec des valeurs par défaut. 5

2 La chronologie du développement D un commun accord, nous avons commencé par traiter un simple poisson se déplaçant aléatoirement de la gauche vers la droite. Ensuite, nous avons fait en sorte que quand celui-ci atteint un bout de la fenêtre, il réapparaît du côté opposé. Nous avons rapidement intégré la notion d espèce pour caractériser le poisson. Ensuite nous nous sommes intéressés aux obstacles puis à la gestion des collisions poisson/obstacle. La nourriture a ensuite été intégrée ainsi que la gestion des collisions poisson/nourriture. D autres poissons et d autres espèces sont venues compléter le programme afin de gérer les collisions entre les poissons. Le fichier de configuration a été mis en place et les différents paramètres ont été appliqués au programme. La gestion des bancs a finalement été ajoutée. Enfin, de nombreux ajustements ont été appliqués sur l ensemble du programme et les commentaires nécessaire à la génération de la documentation ont été ajoutés. Nous avons également rédigé ce rapport. 3 Les difficultés rencontrées La première erreur que nous avons eu à résoudre fût la suppression correcte d un poisson dans le tableau de poisson. Afin de conserver un tableau dont toutes les cases contiennent un poisson existant, nous avons choisi d écraser la case correspondante au poisson à supprimer par le contenu de la dernière case occupée. Ainsi, le tableau reste intégralement rempli de poissons, ce qui évite d avoir à tester son contenu à chaque fois. Nous avons fait de même pour les bancs et la nourriture. Au niveau de la gestion des collisions, notre première idée a été de gérer les collisions en même temps que la vue. Mais, cela nous a finalement paru trop compliqué et ne semblait pas répondre correctement à la modularité du code demandée. Aussi, nous avons séparé le choix du mouvement du poisson selon sa vue de la gestion des collisions pures. La principale difficulté rencontrée a été lorsqu on a voulu mettre en place les valeurs limites provenant du fichier de configuration. En effet, notre tableau de poisson était au départ défini avec une taille fixe et nous avions utilisée la notation avec les crochets. Nous nous étions donc contenté de mettre la variable issue de la configuration dans ces crochets. Tout cela compilait et c est à l exécution que le résultat était très aléatoire : des poissons disparaissaient, des obstacles également, tout les poissons passaient d un coup en haut de l écran. Bien que nous savions que ce comportement étrange provenait de la définition du tableau, puisque auparavant tout fonctionnait normalement, nous n avons pas su résoudre ce problème seul et avons profité d une séance de TP pour vous mettre a contribution. Finalement, cela nous a permis de comprendre qu il y a en fait une différence pour l initialisation d un tableau déclaré avec des crochets par rapport à une déclaration avec astérisque. En fin de développement, après avoir implémenté la gestion des bancs, le logiciel se fermait violemment en renvoyant une erreur, qui pouvait être de plusieurs types (memory corruption, double free,...). Après de nombreuses relectures des fonctions liées aux bancs, nous avons repéré que le problème provenait d une simple accolade mal placée sur la fermeture d une boucle "for". L effet papillon prend alors tout son sens! 6

Bilan Nous avons beaucoup apprécié ce projet qui nous a permis de mettre en œuvre une grande partie de notre connaissance du langage C et de mobiliser des techniques d analyse et de développement sur un sujet concret et relativement ouvert. De plus, cette période a été pour nous l occasion de découvrir et d apprendre à manipuler de nombreux outils de développement tels que Subversion, emacs, gdb, visual studio 2010, doxygen et Texmaker. Outre l aspect technique, ce projet nous a donné l occasion de travailler en groupe et nous a donc appris à nous organiser et à gérer le temps qui nous était imparti. C est pour nous une réussite puisque nous sommes parvenu, dans les temps, au résultat escompté. 7