ALGORITHME DE VOLÉES Programmation créatives Les volées, le spawning et les collisions.

Slides:



Advertisements
Présentations similaires
Formation universitaire à .NET: Introduction à C#
Advertisements

Portée des variables VBA & Excel
Calculs de complexité d'algorithmes
(Classes prédéfinies – API Java)
Dernière scéance: Des question?????? + Deux exercices.
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Leçon 3 : Héritage IUP 2 Génie Informatique
12 novembre 2012 Grégory Petit
Initiation aux bases de données et à la programmation événementielle
Principes de programmation (suite)
Programmation orientée objet
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Algorithmique et Programmation
Bibliothèque standard du C++
IFT1025, Programmation 2 Jian-Yun Nie
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
GRAPHISME PAR ORDINATEUR
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Base de programmation Script unity en c#.
Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
DESS CCI POO-JAVA TD n°7 exercice n°1
Les Fonctions. Définir une fonction Sections de code indépendantes que lon peut appeler à nimporte quel moment et dans nimporte quel ordre. Bout de code.
Introduction à la programmation I Fonctions Structures de contrôle Structures de données (arrays simples et indexés) Variables locales et globales.
1 PROTOTYPE PGC++ Vecteur_3D DÉFINITION. 2 class Vecteur_3D { private : float vx, vy, vz, vw; // Représentation en coordonnées homogènes. public : Vecteur_3D();
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Chapitre 9 Les sous-programmes.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure dInformatique (ESI) Plate-forme.NET.
Tutorat en bio-informatique Le 21 novembre Exercices 2 et 3 (MAT1400) - solutions Chapitre 11.7, Analyse - concepts et contextes vol. 2 27) Cherchez.
Animateur : Med HAIJOUBI
Programmation créative – Les vecteurs
Méthodes de tri.
Programmation créative – Les vecteurs
STATISTIQUES – PROBABILITÉS
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 1 – Objets et Classes Master 1 SIGLIS1Java Lecteur - Chapitre 1 Objets et classes.
Tutorat en bio-informatique
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
ISBN Chapitre 10 L'implémentation des sous- programmes.
Cours LCS N°4 Présenté par Mr: LALLALI
Chapitre 1 Nombres relatifs.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Dév. d’application interactive III Tile Engine. Plan de leçon  Moteur de tuiles (tile engine)  Définition  Classes  Dans le cadre de ce cours, nous.
MPEG : normalisation La vidéo est compressé en MPEG2 Une vidéo classique : (720x576) à 50 images entrelacées par seconde. Le Mpeg-2 travaille sur 1/4 de.
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
GRAPHISME PAR ORDINATEUR
Opérations sur les nombres relatifs
Traitement d’images 420-D78-SW A15 Semaine 02.
Traitement d’images Semaine 03 A15 Seuillage.
Programmation créative Semaine 03. Agenda de leçon  Rotation d’un sprite  Modifier la couleur d’un sprite.
Semaine 05.
Scratch Partie 03 Version A15.
Opérations sur les nombres relatifs
1 Initiation aux bases de données et à la programmation événementielle Cours N°8 : Gestion de la cohérence avec des zones de liste déroulantes. Souheib.
Philippe Gandy - 15 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
CONSTRUCTION DE TABLEAUX CROISES SUR LE LOGICIEL MODALISA MET4 – Avril 2005.
Programmation créative – Les vecteurs
Dév. Application interactive III
Master 1 SIGLIS Jave Lecteur Stéphane Tallard Chapitre 5 – Correction TD.
Traitement d’images Semaine 09 v.A15.
Seconde 8 Module 7 M. FELT 03/11/ Module 7: Algorithmique #2  Objectifs:  AlgoBox.  Définition d’un algorithme.  Affectation de variable. 
** Flash séance 2 Action script. ** Action Script Ajoute de l’interactivité Permet de contrôler les clips  Langage de programmation orienté objet.
Télécharger :
Algorithmique Boucles et Itérations
Réalisation d’un jeu de tir au canards. Page d’accueil Télécharger les fichiers sources. Importez les images parchemins et fond_shoot Insérer l’image.
EXPOSE FLASH 2 SI 28 24/10/2006 Delphine GODREAU Hélène PERRIER.
Opérations sur les nombres relatifs Chapitre 1 Classe de 4ème.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Programmation créatives Les volées, le spawning et les collisions
Transcription de la présentation:

ALGORITHME DE VOLÉES Programmation créatives Les volées, le spawning et les collisions

Plan de leçon Les volées  Qu’est-ce qu’une volée?  Notions scientifiques  Cohésion  Séparation  Alignement Le spawning Les collisions

Qu’est-ce qu’une volée? Une volée est un groupe d’agents dans lequel chaque individu est indépendant et dépendant des autres individus Dans la littérature, on va lire sur le swarm|flocking behaviour Chaque individu se nomme un boid Synonyme : Essaim, troupeau, banc, etc.

Notions scientifiques Le principe de volée nécessite 3 forces  La cohésion  La séparation  L’alignement L’addition de ces trois forces sur un ensemble d’agents simule l’effet du comportement de troupeau chez les animaux

Notions scientifiques Chacune des forces s’applique dans une limite de distance Généralement l’ordre de distance est la répulsion, l’alignement et ensuite la cohésion

La cohésion La cohésion est la force à laquelle un agent s’attache à d’autres agents Généralement, c’est la force dont le voisinage est le plus grand Calcul  On calcule la cohésion en effectuant la moyenne de la position de chacun  Ce calcul donne la cible à atteindre pour l’agent  Ensuite, on calcule la force de braquage pour atteindre cette cible Algo  Cible  Calculer la moyenne des positions des voisins  Calculer le vecteur de braquage pour atteindre la cible

La séparation La force de séparation est celle qui permet à l’agent de d’éloigner des voisins trop près On pourrait la définir comme la bulle personnelle On calcule en effectuant la moyenne de la différence divisé par la distance Ensuite on trouve le vecteur pour trouver la force de braquage Algo  Pour chaque agents à une distance > 0  Diff  agent.position – autre.position  Normalise diff  Divise diff par la distance  Somme la distance  Suivant  Diviser la somme par le nombre d’agents trouvés  Normaliser la division  Multiplier par la vitesse max  Soustraire la vitesse de l’agent  Limiter par la vitesse de rotation max

L’alignement L’alignement est la force qui permet à l’agent de suivre le groupe Elle se calcule en effectuant la moyenne de la vitesse des agents qui sont dans le voisinage établi Algo  Calculer la moyenne des vitesses du voisinage  Calculer la force de braquage

Somme Après avoir calculé les trois forces, on applique une pondération pour chacune d’elle Par la suite, on les applique à l’agent Le résultat final dépendra des facteurs suivants  La distance de l’application de chaque force  La pondération de chaque force

Exemple

Le spawning

Spawning : Définition Le terme spawning signifie la reproduction pour les animaux en milieu aquatique Dans le jeu informatique, le principe est similaire, i.e. on reproduit un objet Le principe de regénération utilise une liste d’objets pour ensuite les afficher de façon aléatoire

Spawning : Classe Plusieurs méthodes existent Dans cette leçon on verra une méthode de base La première étape est de créer une classe pour l’objet unique à afficher  Propriétés de texture2d, vitesse, position, visibilité  Constructeur avec position et vitesse aléatoire  Méthode de mise à jour et d’affichage

class Ennemie { public Texture2D Texture; public Vector2 Position; public Vector2 Vitesse; public bool IsVisible = true; Random random = new Random(); int randX, randY; public Ennemie(Texture2D laTexture, Vector2 laPosition) { Texture = laTexture; Position = laPosition; randY = random.Next(-4, 4); randX = random.Next(-4, -1); Vitesse = new Vector2(randX, randY); } public void Update(GraphicsDevice graphics) { Position += Vitesse; if (Position.Y = graphics.Viewport.Height - Texture.Height) Vitesse.Y = -Vitesse.Y; if (Position.X < 0 - Texture.Width) IsVisible = false; } public void Draw(SpriteBatch spriteBatch) { spriteBatch.Draw(Texture, Position, Color.White); } Exemple qui affichera pour un objet apparaissant de la droite vers la gauche

Spawning : Liste Une fois la classe crée, il faudra générer une liste qui contient des objets de cette classe Dans la zone de déclaration des objets et variables, il faudra instancier la liste en plus d’une variable aléatoire et d’un temps de regénération List ennemies = new List (); Random random = new Random(); float spawnDelai = 0; float spawnInterval = 1;

Spawning : Gestion de la liste Pour gérer la régénération, on utilise une méthode chargée de gérer les objets de la liste On y définit la position aléatoire en Y  Ne pas oublier le but de cet exemple qui est d’afficher les objets flottants de droite vers la gauche On y gère le délai de régénération ainsi que le retrait des objets une fois que ceux-ci dépasse l’affichage

Spawning public void ChargerEnnemies() { int randY = random.Next(1, GraphicsDevice.Viewport.Height - 48); if (spawnDelai >= spawnInterval) { spawnDelai = 0; if (ennemies.Count() < 4) // Maximum de 4 { ennemies.Add(new Ennemie(Content.Load new Vector2(GraphicsDevice.Viewport.Width, randY))); } for (int i = 0; i < ennemies.Count; i++) { if (!ennemies[i].IsVisible) { ennemies.RemoveAt(i); i--; }

Spawning : Update Il y a une gestion de délai, il faut la faire dans la méthode Update du jeu  spawnDelai += (float)gameTime.ElapsedGameTime.TotalSeconds; Dans Update du jeu, il faut appeler pour chacun des objets sa méthode Update pour mettre à jour l’objet Ensuite, on appelle la méthode ChargerEnnemies pour mettre à jour les objets

Spawning : Update \\ Dans update spawnDelai += (float)gameTime.ElapsedGameTime.TotalSeconds; foreach (Ennemie e in ennemies) e.Update(graphics.GraphicsDevice); ChargerEnnemies(); \\ suite du code

Spawning : Draw Pour l’affichage, il faut gérer chacun des objets en appelant la méthode Draw de ceux-ci // TODO: Add your drawing code here spriteBatch.Begin(); foreach (Ennemie e in ennemies) e.Draw(spriteBatch); spriteBatch.End();

Spawning : Screenshot

Les collisions

Collision Le principe de collision est essentiel dans le jeu vidéo Le fonctionnement peut être relativement simple jusqu’à très complexe En 2D, il y a principalement deux types de collision soit la boîte limite et pixel à pixel Dans le cas présent, nous voyons la collision simple c’est-à-dire la gestion d’intersection entre deux rectangles soit la Bounding Box

Collision Pour vérifier s’il y a collision entre deux objets, il suffit de vérifier si la boîte est intersectée avec une seconde boîte Une boîte est simplement un rectangle qui délimite l’objet Il suffit d’ajouter une propriété de type Rectangle Le rectangle est généralement instancié à la dimension de la texture de l’objet

Collision Il faut aussi mettre à jour la position du rectangle en même temps que celui de la texture d’où l’utilité de la méthode Update dans la classe On ajoute une méthode public IsColliding dans la classe qui retourne un booléen indiquant s’il y a collision Cette méthode prend en paramètre un objet de type Rectangle qui représente l’objet à comparer avec le présent

Collision IsColliding est relativement simple, car elle retourne la valeur de la méthode Intersect() de la propriété Rectangle de la classe public bool IsColliding(Rectangle otherObject) { return BoundingBox.Intersects(otherObject); }

Collision Pour ensuite gérer la collision cela dépendra du jeu Une méthode très simple est simplement d’inverser la direction de l’objet qui entre en collision avec un autre

Collision Problème d’algo??

Exercices Migrer le code que l’on retrouve au lien qui suit vers LibGdx  Ajouter deux portaux carrés dans le code où lorsqu’il y a un contact avec un portal, le boid est téléporté vers l’autre portal

Références three-simple-rules-of-flocking-behaviors- alignment-cohesion-and-separation--gamedev three-simple-rules-of-flocking-behaviors- alignment-cohesion-and-separation--gamedev-3444