[PDF] Perfectionnement à la programmation en C Fiche de TP 5





Previous PDF Next PDF



fleur ? papillon ? grenouille ? serpent ? chouette

3 on peut facilement retrouver l'ordre des autres animaux : la grenouille mange les insectes donc c'est elle qui va manger le papillon



Lherbe au serpent

tons et donc de pouvoir tout manger



Le Symbolisme du Serpent dans Le Petit Prince

Dans le jardin d'Eden Ève rencontra un serpent qui se trouvait dans cet arbre. Le serpent a convaincu Ève de manger les fruits interdits



1. Lhomme et le serpent

- Non ne me mange pas



Niveau 3 Corrigé Quest-ce quune chaine alimentaire ? 1. Observe

Il est mangé par le serpent qui est la proie de la buse. – La sauterelle mange des herbes. La grenouille est le prédateur de la sauterelle mais elle est la 



Perfectionnement à la programmation en C Fiche de TP 5

FIGURE 1 – Une situation de jeu du serpent qui respecte les conventions vient de manger une pomme et qu'il est aussi grand qu'il n'y a plus de case ...



La couleuvre rayée dans la chaîne alimentaire

Définition : Science qui étudie les milieux où la nature il faut réussir à manger et à ne pas ... des moyens chimiques (venin des serpents.



Beurky Sneaky.pdf

Sneaky est un serpent extrêmement gourmand qui mange tout ce qui lui passe sous la main … Il a avalé tout un tas d'objets qui nous appartiennent.



Le serpent source de santé :

entre les trois serpents qui y sont nommés : « Les angues appartiennent aux eaux L'indication de Philouménos que l'on peut manger des vipères.



LE BÂTON TRANSFORMÉ EN SERPENT LEXÉGÈSE

serpent de Moïse qui engloutit les serpents suscités par les magiciens de que sont les non-croyants; le serpent Christ les «mange» c'est-à-dire les.



Pourquoi les serpents mangent-ils les grenouilles - Sites écoles

Le serpent aime manger des grenouilles ? C’est vrai 2 Où se déroule l’histoire ? L’histoire se déroule au bord d’une mare 3 Que fait la grenouille pour agacer le serpent ? La grenouille pose beaucoup de questions au serpent 4 Que fait le serpent pour que la grenouille le laisse tranquille ? Le serpent mange la grenouille ! 5 De

  • Un Rongeur Vivant Ou Congelé

    Les 3 serpents ci-dessus, et même les principaux serpents élevés en captivité se nourrissent de rongeurs vivants ou congelés. Il est préférable de lui offrir une nourriture déjà morte. Cela lui évitera des blessures involontairesinfligées par une proie qui essayent de se défendre avant de rendre l’âme. Ainsi, une souris ou un rat peuvent facilement...

  • Quel Rongeur Donner ?

    Le type de proie à donner dépend de la taille de votre serpent. Ainsi, un serpent des blés âgé de moins de 4 mois pourra se satisfaire d’une toute petite souris une fois par semaine. Un souriceau prendra le relais jusqu’à ses 8 mois. Après, il faudra lui donner une sauteuse tous les 10 jours environ. Puis, une fois adulte, un serpent des blés peut ...

  • en CAS de Régurgitation ?

    Il arrive parfoi, que votre serpent ne digère pas bien sa proie. Il la régurgitera et cela entraînera une irritation dans son œsophage. Rien de grave en principe, mais vous devrez attendre 2 semaines avant de lui proposer de nouveau de la nourriture. A lire aussi : Les besoins en eau du serpent

Comment manger un serpent ?

La fréquence de l’alimentation varie selon l’âge et l’espèce. Elle peut être d’une fois par semaine à une fois tous les deux ou trois mois. Il faut aussi un récipient d’eau suffisamment grand pour que le serpent puisse s’y immerger. Les rongeurs sont la nourriture préférée du serpent.

Combien de fois par semaine les serpents mangent-ils ?

Les serpents plus petits ou plus jeunes mangent généralement deux fois par semaine. En outre, les serpents plus grands et plus matures mangent généralement une ou deux fois par semaine. Les serpents femelles qui approchent de la saison de reproduction peuvent se nourrir plus fréquemment.

Comment se fait la croissance d’un serpent ?

Quant à la croissance, elle se fait par l’eecdysis (mue). L’ ecdysis n’est pas saisonnière et dépend de plusieurs facteurs, tels que l’espèce, l’âge et la température extérieure. Ainsi, la fréquence peut varier d’une fois par semaine à deux fois par an. De plus, les intervalles peuvent être encore plus longs lorsque le serpent est en captivité.

Quel régime alimentaire pour un serpent ?

Rien de grave en principe, mais vous devrez attendre 2 semaines avant de lui proposer de nouveau de la nourriture. Un bon régime alimentaire pour votre serpent consiste simplement à lui faire manger des rongeurs une ou 2 fois par semaine (cela dépend des espèces) voire même 2 à 3 fois par mois.

Perfectionnement à la programmation en C Fiche de TP 5

Perfectionnement à la programmation enC

Fiche de TP 5

L2 Informatique 2021-2022

Le jeu du serpent

Ce TP se déroule enune seule séanceet est à faire par binômes. Le travail réalisé doit être

envoyé au plus tard exactementune semaine aprèsle début de la séance de TP. Il sera disposé

sur la plate-forme prévue à cet effet et constitué des programmes répondant aux questions et

des éventuels fichiers annexes qui peuvent être demandés. L"objectif de ce TP est de programmer le très célèbrejeu du serpent. Nous utilisons ici les notions de liste simplemen tchaînée ; comparaison en trereprésen tationcreuse et représen tationdense ; in terface???????en gestion en temps réel; compila tionparamétrée par fichier Makefile.

1 Spécification

Le principe du jeu consiste à de piloter un serpent vu du dessus pour attraper des pommes

et grandir progressivement. La difficulté principale consiste en ce que le serpent est perpétuel-

lement en mouvement et le contact avec les bords de l"écran ou avec lui-même provoque la défaite. Voici une description de l"application à concevoir. Au lancement du jeu, un quadrillage ré-

gulier (formant10lignes et16colonnes) est affiché et trois pommes y sont disséminées aléa-

toirement. De plus, un serpent de petite taille figure au centre du quadrillage. Il est constitué

d"une tête (qui occupe un carré du quadrillage) et d"un corps (qui occupe plusieurs carrés, un

seul initialement). Les pommes sont dessinées par des disques verts, la tête est dessinée par

un disque kaki et son corps par des carrés marrons. Une illustration d"une situation de jeu est donnée par la figure 1 . Ces conventions de couleurs sont importantes pour la lecture des figures du sujet mais ne sont pas obligatoires dans l"implantation qui va suivre. 1

F????? 1-Une situation de jeu du serpent qui respecte les conventions graphiques établies. Le quadrillage est

de dimensions8×11. Le serpent se déplace à une vitesse de quatre cases par seconde selon une direction (nord,

sud, est ou ouest) et l"utilisateur le pilote à l"aide des flèches directionnelles (ou"z","q","s",

"d") pour modifier sa direction. À chaque quart de seconde, la tête du serpent se déplace vers

la case indiquée par sa direction et la dernière case de son corps disparaît. La figure 2 illustre ce mécanisme de déplacement.??

F????? 2-Le déplacement d"un serpent d"une case à une autre. Le serpent se dirige vers l"est. Le 1erquadrillage

est la situation à un temps?et le 2e, au temps?+ 1. Lorsque le serpent arrive sur une case qui contient une pomme, celle-ci disparaît et le

corps du serpent grandit en évitant de faire disparaître la dernière case de son corps lors du

déplacement. La figure 3 illustre ce mécanisme de croissance. Lorsque le serpen tarrive sur une case occupée par son corps ou bien s"il sort du quadrillage, la partie se termine et le score

(qui est le nombre de pommes mangées) est affiché. La partie s"achève aussi lorsque le serpent

vient de manger une pomme et qu"il est aussi grand qu"il n"y a plus de case libre pour créer une nouvelle pomme.

2 Écriture du programme

Exercice 1.

(C onceptiondu projet) 2/ 8

F????? 3-La croissance d"un serpent provoquée par la consommation d"une pomme. Le serpent se dirige vers

l"est. Le 1 erquadrillage est la situation à un temps?et le 2e, au temps?+ 1. L"objectif de cet exercice est de concevoir une architecture viable pour le projet présenté. 1. Lire a ttentivementl"intégralité du sujetavant de commencer à répondre aux questions. La description du sujet constitue une spécification de projet. 2. U nefois ceci fait, proposer un découpage en modules cohéren tdu projet. Pour chaque module proposé, décrire les types qu"il apporte ainsi que ses objectifs principaux. 3. A ufil de l"écriture du projet (dans le tra vaildemandé par les prochains exercices), il est possible de se rendre compte que le découpage initialement prévu n"est pas complet ou adapté. Si c"est le cas, mentionner l"historique de ses modifications. 4.

Main tenirun Makefilepour compiler le projet.

Exercice 2.

(D éclarationsdes types)

Les types suivants sont obligatoires (à déclarer et à utiliser). Il est possible (et même obliga-

toire en pratique) de déclarer des types supplémentaires qui ne sont pas mentionnés ici. Il n"est

pas autorisé pour le moment ici d"utiliser des tableaux dynamiques. Seuls des tableaux statiques doivent être utilisés. 1. D éclarerun type Casequi permet de représenter une case d"un quadrillage. Un case est simplement une coordonnée dans le quadrillage. 2. D éclarerun type Directionqui permet de représenter les quatre directions cardinales. Il est pertinent ici d"utiliser un type énuméré. 3. D éclarerun type Serpentqui permet de représenter un serpent. Il s"agit d"un type struc- turé contenant un champ renseignant sur la direction du serpent et un champ renseignant sur les cases que ce dernier occupe. Ce deuxième champ est une liste simplement chaî-

née de cases où la tête de la liste est la case de la tête du serpent et le reste contient

- dans l"ordre - les cases de son corps. Par exemple, le corps du serpent de gauche de la figure 3 est codé par la liste [(2, 4), (2, 3), (3, 3), (3, 2), (3, 1), (4, 1)] 3/ 8 Ici l"origine figure en haut à gauche et les cases sont indexées par ordonnée puis abscisse (conformément à la convention adoptée par???????) mais rien n"est imposé là dessus dans ce TP.

Pour représenter proprement de telles listes de cases, il est conseillé de déclarer des types

permettant de manipuler des listes de cases dans le module dédié à la représentation des cases. 4. D éclarerun type Pomme. Une pomme est codée par la case qui la contient. 5. D éclarerun type Mondequi permet de représenter une situation de jeu. Elle comprend les dimensions du monde (nombre de lignes et nombre de colonnes), le serpent, les positions des pommes présentes et le nombre de pommes mangées. Les pommes du monde sont enregistrées dans une liste simplement chaînée. Ici aussi, il est pertinent de déclarer des types permettant de manipuler des listes de pommes dans le module dédié

à la représentation des pommes.

Remarque importante:dans le TP duChomp, la situation de jeu était codée par un tableau à deux dimensions dont chaque case contenait un état (carré de chocolat pré- sent ou absent). Dans le présent TP, la situation de jeu n"est pas codée globalement par un tableau : on renseigne plutôt les objets qui évoluent dessus (le serpent et les pommes). Ainsi, il est possible de considérer des mondes très grands, de dimensions

1024×1024par exemple, puisque la taille mémoire ne dépend pas de ces dimensions

(qui aboutirait tout de même à220cases) mais plutôt de la taille du serpent et du nombre de pommes. On parle ici dereprésentation creuse, contrairement à larepré- sentation denseadoptée pour leChomp. Aucune n"est fondamentalement meilleure que l"autre : chacune a ses avantages et ses inconvénients.

Exercice 3.

(Mécaniques du jeu)

Les fonctions suivantes sont obligatoires (à déclarer/définir et à utiliser). Il est possible (et

même nécessaire) de déclarer/définir des fonctions qui ne sont pas mentionnées ici. 1. Écrire une fonction 1Pommepomme_al eatoire(intnb_lignes ,int nb_colonnes ); qui renvoie une pomme créée aléatoirement de sorte qu"elle tienne dans un quadrillage de dimensionsnb_lignes×nb_colonnes. Se référer à l"exemple de programme donné dans l"exercice 4 du TP 1 pour réaliser une

génération aléatoire correcte. Ces notions de génération aléatoire seront vues en détail

dans la fin du cours. 2. Écrire une fonction 1voidmonde_ajo uter_pomme(Monde* mon); 4/ 8 qui ajoute une nouvelle pomme au mondemon. Cette fonction doit utiliser la fonction précédente. Attention, il faut veiller à ce que la nouvelle pomme n"apparaisse pas sur une pomme déjà existante ou bien sur le serpent. Il faut donc appeler la fonction précédente pomme_gen_aleajusqu"à ce qu"elle renvoie une pomme sur une case valide. On suppose qu"une telle case existe. 3. Écrire une fonction 1Serpentserpen t_initialiser(intnb_lignes ,int nb_colonnes ,int ta ille); qui renvoie un serpent dont la tête est située au centre d"un quadrillage de dimensions nb_lignes×nb_colonnes(ou dans l"une des cases centrales suivant la parité des dimen- sions). Le serpent doit tenir surtaillecases en comptant sa tête et son corps. Les cases du corps du serpent sont à gauche de sa tête et la direction du serpent est vers l"est. 4. Écrire une fonction 1Caseserpent_c ase_visee(Serpentserp ); qui renvoie la case visée par le serpentserp. Il s"agit de la case que la tête deserpva occuper au prochain déplacement. Il se peut que cette case figure en dehors du quadrillage (elle peut même avoir des coordonnées strictement négative si le serpent est en haut du quadrillage et possède le nord comme direction, ou est à gauche du quadrillage et possède l"ouest comme direction). 5.

Écrire une fonction 1Mondemonde_in itialiser(intnb_lignes ,int nb_colonnes ,int taille _serpent,int nb_pommes );

qui renvoie un monde dans une configuration initiale pour le jeu. Le quadrillage du monde est de dimensionsnb_lignes×nb_colonnes, le serpent est de taille initialetaille_serpent et le monde contient à chaque instantnb_pommes. Les pommes y sont disposées aléa- toirement. Le serpent se trouve dans sa configuration initiale fournie par la fonction serpent_initialiser. 6. Écrire une fonction 1intmonde_est_ mort_serpent(Mondemon ); qui teste si le serpent du mondemonva mourir s"il se déplace sur la case qu"il vise. Le serpent meurt s"il vise une case à l"extérieur du quadrillage ou bien une case de son corps. 7. Écrire une fonction 1voidmonde_evo luer_serpent(Monde* mon); qui modifie le serpent du mondemonde sorte à le faire avancer suivant sa direction vers la prochaine case. Si la tête du serpent arrive sur une case vide du quadrillage, le serpent s"y déplace simplement. S"il arrive sur une case occupée par une pomme, celle-ci est mangée, le serpent grandit en conséquence, et une nouvelle pomme créée aléatoirement est ajoutée àmon. 5/ 8 Remarque importante:les prototypes des fonctions demandées ici ne sont pas optimaux, notamment en ce qui concerne le passage par valeur des variables d"un type structuré. Nous adoptons ces choix ici, pour le moment, par souci de simplicité. Dans les futurs cours, des conventions plus efficaces seront étudiées.

Exercice 4.

(Graphisme)

Les fonctions suivantes sont obligatoires (à déclarer/définir et à utiliser). Il est possible (et

même nécessaire) de déclarer/définir des fonctions qui ne sont pas mentionnées ici. Toutes les fonctions d"affichage suivantes utilisent la bibliothèque graphique???????et

agissent sur la fenêtre courante. Les conventions d"affichage sont libres : il est possible de faire

tenir chaque case du monde sur une case de la fenêtre ou, à l"inverse, dessiner chaque case

du monde par des carrés de côté3- par exemple - de la fenêtre. Toute liberté est autorisée

à condition de proposer un affichage efficace, précis et minimaliste. 1. Écrire une fonction 1voidinterface _afficher_quadrillage(Mondemon ); qui affiche le quadrillage sous-jacent au mondemon. Pour le moment, le serpent et les pommes ne sont pas affichées. 2. Écrire une fonction 1voidinterface _afficher_pomme(Pommepom ); qui affiche la pommepomselon sa position. Cette fonction est vouée à dessiner la pomme dans le quadrillage créé par la fonction précédente. 3. Écrire une fonction 1voidinterface _afficher_serpent(Serpentser ); qui affiche le serpentserselon sa position. Cette fonction est vouée à dessiner le serpent dans le quadrillage créé par la fonction de la 1 requestion. 4. Écrire une fonction 1voidinterface _afficher_monde(Mondemon ); qui affiche le mondemon. Ceci dessine la situation de jeu au complet : le quadrillage, les pommes, le serpent et le nombre de pommes mangées. 5. Écrire une fonction 1voidinterface _piloter(Monde* mon); qui détecte la pression sur une touche commandant la direction du serpent du monde pointé parmonet qui la met à jour. 6/ 8

Exercice 5.(A ssemblagedu jeu)

Nous allons utiliser tout ce qui a été fait jusqu"à présent pour construire la boucle d"in-

teraction principale qui permet de jouer au jeu du serpent. L"algorithme suivant est mis en pratique : (1)initialiser le monde; (2)afficher le monde et attendre qu"une touche soit pressée pour commencer; (3)tant que la partie n"est pas terminée (c.-à.-d. que le serpent n"est pas mort) : (a)faire évoluer le serpent en fonction de sa direction : (b)mettre à jour l"affichage (serpent, pommes et score); (c)attendre14 de seconde; (d)mettre à jour la direction du serpent en fonction de la touche pressée; (4)afficher que la partie est terminée et le score final.

3 Améliorations

Exercice 6.

(Améliora tions)

Plusieurs améliorations sont proposées ici. Elles sont accompagnées d"indices de difficulté

((?): facile,(??): moyen,(? ? ?): assez difficile). Choisir dans cette liste des améliorations à apporter au programme de sorte à totaliser au moinssept?. Mentionner très clairement dans le rapport les choix d"amélioration effectués. Dans le rendu, il doit figurer la version sans amélioration du projet et la version avec les améliorations dans deux dossiers différents.

1.(?)Mettre au point un système pour mettre en pause la partie en appuyant sur une touche

dédiée.

2.(?)Ajouter la possibilité de créer des pommes empoisonnées qui provoquent la défaite si

mangées. Au moins une pomme parmi celles présentes dans le monde ne doit pas être empoisonnée.

3.(?)Ajouter la possibilité de créer des pommes particulières qui apportent deux points au

lieu d"un seul si mangées.

4.(?)Ajouter un mode de jeu particulier dans lequel le joueur doit réaliser le plus grand

score possible pendant une durée limitée imposée (et à choisir).

5.(??)Ajouter la possibilité de créer des pommes anxiogènes qui provoquent un doublement

de la vitesse du serpent pendant une durée déterminée. Si le serpent mange par exemple deux telles pommes dans un court intervalle de temps, sa vitesse est donc multipliée par4. 7/ 8

6.(??)Mettre au point un système de sauvegarde permanent des meilleurs scores. Au lan-

cement du jeu, figurera un menu permettant de visualiser les meilleurs scores, ligne par ligne. Une ligne contient le nom du joueur, le score obtenu et éventuellement le nom du mode de jeu concerné.

7.(??)Ajouter des sons qui sont joués à chaque déplacement du serpent, lorsqu"il mange

une pomme et lorsqu"il meurt.

8.(??)Ajouter un mode de jeu dans lequel apparaissent de manière aléatoire des murs dans

le monde. Un mur est un obstacle qui provoque la perte de la partie si rencontré. Les murs ne doivent évidemment pas apparaître sur le serpent ni sur les pommes, et, pour ne pas rendre la partie trop compliquée, non plus sur l"une des quatre cases voisines à la tête du serpent.

9.(? ? ?)Rendre le programme paramétrable : le joueur peut choisir les dimensions du

quadrillage, le nombre de pommes, la taille initiale du serpent et la durée d"un tour de boucle (exprimée en ms). Ces paramètres doivent figurer dans un fichier de configuration

Serpent.inisitué dans le même répertoire que l"exécutable. Il est constitué de lignes de

la forme largeur = 128 hauteur = 96 nombre_pommes = 4 taille_serpent = 7

duree_tour = 250010.(? ? ?)Même objectif que celui du point9 à la différence près que les options son tacces-

sibles depuis un menu d"options à incorporer dans l"application. Attention : la program- mation de ces deux améliorations combinées ne rapporte pas6?mais4uniquement.

11.(? ? ?)Concevoir un mode de jeu à deux joueurs où s"affrontent dans un même monde

deux serpents pilotés chacun par un joueur. Les mêmes conditions de défaite que dans le mode classique à un joueur s"appliquent, avec en plus le fait qu"arriver sur une case occupée par un serpent ennemi provoque la défaite. Le joueur gagnant est celui qui a

réalisé le score le plus élevé une fois que les deux serpents sont morts (car ils le seront

nécessairement si la partie dure suffisamment longtemps).

12.(????)À la condition que l"amélioration11 ait été apportée, faire en sorte d"ajouter un mode

de jeu humain contre machine dans lequel l"un des serpents est dirigé par l"ordinateur. Le jeu de l"ordinateur doit être cohérent et compétitif. 8/ 8quotesdbs_dbs30.pdfusesText_36
[PDF] quest ce que mange un herisson

[PDF] herisson chasse serpent

[PDF] exemple 4ème de couverture mémoire

[PDF] note de confidentialité

[PDF] confidentialité mémoire master

[PDF] modèle de rapport de stage en cabinet d'avocat

[PDF] rapport de stage chez un avocat

[PDF] rapport de stage secrétaire juridique

[PDF] lutin bazar production d'écrit ce1

[PDF] écrire une histoire avec des mots imposés

[PDF] rapport de stage avocat master 2

[PDF] raconter une histoire avec des mots imposés

[PDF] du bellay les antiquités de rome

[PDF] faire une phrase avec des mots donnés

[PDF] l oubli et la mémoire