Partage
  • Partager sur Facebook
  • Partager sur Twitter

SFML et C++

progration orientee objet

    9 novembre 2018 à 13:57:08

    bonjour a tous.

    si je viens ce soir aupres de vous, c'est pour soliciter une aide qui serai pour moi une facon de mettre de la lumiere dans ce que je connais deja.

    bien le probleme:

    je dois en C++ developper un programme simulant le fonctionnement d'un ascenceur, on l'a surnomme SIMULATEUR D'ASCENCEUR.

    bien au niveau de mes classes aucun soucis, mais je sais pas comment je peux parexemple dans la classe Ascenceur dessiner un rectangle avec la sfml.

    je sais dessiner un rectangle dans le main simplement mais maintenant je voudrais le  faire dans une classe nommee Ascenseur

    merci de votre soutient

    • Partager sur Facebook
    • Partager sur Twitter
    p_pivot
      9 novembre 2018 à 14:23:40

      Salut,

      Une chose est sûre, ce n'est pas à la classe Ascenseur de dessiner un rectangle.

      Par contre, elle peut hériter de sf::drawable et afin d'être dessinable.
      Plus d'infos dans la doc:
      https://www.sfml-dev.org/documentation/2.5.1/classsf_1_1Drawable.php

      • Partager sur Facebook
      • Partager sur Twitter
        9 novembre 2018 à 14:25:47

        Une n'y a pas UNE bonne manière faire de la conception objet.

        C'est énormément fonction de ce que vous cherchez à faire.

        Il est assez peu probable que l'objet "ascenseur" soit la bonne classe pour implémenter son affichage.

        Dans votre simulateur d'ascenseur, l'ascenseur n'est pas là que pour afficher un ascenseur mais bien plus pour gérer son comportement.

        Comme la manière d'afficher un ascenseur varie en fonction que la bibliothèque graphique (SFML, Qt, lib natives, console, etc...) et que le comportement de l'ascenseur ne varie pas en fonction de la bibliothèque graphique, autant ne pas mettre un le code d'affichage dans la classe "ascenseur".

        Le plus simple, et le plus naturel pour une personne comme vous (et nous dans la majorité des cas), c'est de faire une fonction libre (dans aucune classe), qui prend en paramètre votre objet "ascenseur" et qui fait tout le sale boulot pour utiliser la bibliothèque graphique pour afficher un rectangle dans SFML pour afficher l'ascenseur.

        • Partager sur Facebook
        • Partager sur Twitter
        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
          9 novembre 2018 à 15:01:42

          ok je vois parceque j'ai choisi les rectangle pour representer l'ascenceur, la porte, les etages  et du coup je me suis dis que je pouvais faire une classe pour chacun d'eux.

          et pour commencer j'ai  creer une etage comme ceci mais j'ai beaucoup d'erreur de compilation 

          #ifdef SFML_STATIC
          #endif  //SFML_STATIC
          #include <SFML/Graphics.hpp>
          using namespace sf;
          
          
          class Etage
          {
          	
          	private:
          		int numero;
          		int posX;
          		int posY;
          		int largeur;
          		int hauteur;
          		int bordure;
          
          	public:
          		Etage(int=0, int=0, int=0, int=0, int=0, int=0);
          		~Etage();
          		sf::RectangleShape PB_Rect(int, int, int, int, int)
          };
          
          Etage::Etage(int num, int X, int Y, int l, int h, int bord)
          {
          	numero = num;
          	posX = X;
          	posY = Y;
          	largeur = l;
          	hauteur = h;
          	bordure = bord;
          
          	cout<<"contruction de l'etage N°: "<<numero<<endl;
          	//on desine le rectangle
          	sf::RectangleShape rectangle(sf::Vector2f(largeur,hauteur));
          	//on donne une position
          	rectangle.setPosition(posX,	posY);
          	//la couleur de rempplissage
          	rectangle.setFillColor(sf::Color(255,0,0,255));
          	rectangle.setOutlineColor(sf::Color::White);// Couleur de la bordure
          	rectangle.setOutlineThickness(bordure); // Epaisseur de la borrdure
          
          }
          
          Etage::~Etage()
          {
          
          }



          • Partager sur Facebook
          • Partager sur Twitter
          p_pivot
            9 novembre 2018 à 16:45:56

            Bon, vous n'avez clairement pas suivi mes conseils.

            Je ne dis pas que vous allez vous prendre un mur, mais clairement, votre code ne résistera pas à des refactoring nécessaire à plus ou moins  long terme.

            Votre "Etage" n'a pas besoin, pour la simulation (à moins de simuler le monde des pixels, dans un univers 2D à discrétisation de coordonnée entière "équivalent à l'hypothétique distance de Plank" de "notre" univers, chelou), ni des coordonnées à l'écran (mais plutôt sa position dans l'univers de la simulation), ni la largeur et la hauteur sur l'écran (mais plutôt la largeur et la hauteur dans l'univers de la simulation), ni de sa bordure à l'écran.

            Votre "Etage" ne devrait non plus gérer son numéro, c'est plutôt le rôle de l'immeuble.

            etc...

            Pour savoir quoi mettre dans votre classe "Etage", il faut savoir quels services il est sensé vous offrir dans la simulation.

            Pour l'affichage des Etages :

            void AfficherEtage(const Etage& etage)
            {
                int largeur = FacteurDEchelleSelonX(etage.largeur);
                int hauteur= FacteurDEchelleSelonY(etage.hauteur);
            
                sf::RectangleShape rectangle(sf::Vector2f(largeur,hauteur));
            
                //on donne une position
                int x{0};
                int y{0};
                std::tie(x,y) = TranslationSimulationToSceen(etage);
                rectangle.setPosition(x, y);
            
                //la couleur de rempplissage
                rectangle.setFillColor(sf::Color(255,0,0,255));
                rectangle.setOutlineColor(sf::Color::White);// Couleur de la bordure
                rectangle.setOutlineThickness(CalculDeLaTailleDeLaBordurePourUneMeilleureVisibiliteEnFonctionDesReglagesGraphiquesDeLUtilisateur()); // Epaisseur de la borrdure
            ...
            }
            
            ...
            
            
            for(auto &etage : monImmeuble.Etages)
            {
                AfficherEtage(etage);
            }
            
            ...



            -
            Edité par bacelar 9 novembre 2018 à 16:48:07

            • Partager sur Facebook
            • Partager sur Twitter
            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
              11 novembre 2018 à 9:08:00

              De nombreux cours de POO mettent en avant l'encapsulation de données. C'est d'une connerie sans nom. Le principe N°1 de la POO c'est le service. Je fais une classe pour qu'elle ait un rôle dans mon programme (et un seul si je fais bien les choses). Comment la classe remplit le rôle, on s'en fout, l'essentiel est qu'elle le remplisse. Comme l'a très justement dit bacelar, ce n'est pas à ta classe Ascenceur de gérer son affichage, ça doit marcher aussi bien sur un moniteur de supervision à la résolution délirante que sur l'écran de mon vieux téléphone tout pourri.
              • Partager sur Facebook
              • Partager sur Twitter
              Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
                15 novembre 2018 à 7:05:40

                bonjour les gars ce que vous ne comprenez pas c'est que je suis debutant avec la sfml et jedois faire ce programme graphiquement

                et s'il vous plait si quelqu'un peut bien a partir du code que j'ai joins m'aider a tracer en exemple un rectangle avec la methode orientee objet, pour me mettre au pied

                coordialement

                • Partager sur Facebook
                • Partager sur Twitter
                p_pivot
                  15 novembre 2018 à 10:40:00

                  Ce que tu ne comprends pas, et c'est bien normal, c'est que ce n'est pas un niveau de "complexité" qui te bloque.

                  Ce que je propose, c'est justement de rendre ton système plus simple, en ne gérant qu'une chose à la fois.

                  On a tous tendance à prendre la première source d'information "compréhensible" comme parole d'évangile, mais ici vous appliquez trop à la lettre des préceptes qui se sont bien affinées au cours du temps.

                  Moi, je vous propose une chose : faire un ensemble de classe qui fonctionne correctement pour gérer les ascenseurs, et un "ensemble de classes" qui gère l'affichage des ascenseurs à l'écran.

                  Vous êtes capables, selon vous-même, d'afficher "un rectangle dans le main", vous avez donc assez de connaissance pour faire le "second ensemble de classe" : une simple fonction qui prend en paramètre un objet "ascenseur" et qui est capable de dessiner un rectangle à sa place.

                  Pour le premier ensemble de classe, c'est le cœur de projet autre que l'affichage, à vous de le faire. Mais affichage graphique ou pas, c'est la même chose.

                  Vous voulez tout faire en même temps, c'est peut-être gérable sur de tout petit projet, mais pourquoi faire mal un truc pour le rendre plus complexe ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                    15 novembre 2018 à 11:56:36

                    je comprends en effet comme vous dites j'ai toujours  tendance a partir du premier comme si c'etait la fin. merci je vais appliquer votre conseil et je vous tiendrai au courant des evolutions. merci vraimment a vous
                    • Partager sur Facebook
                    • Partager sur Twitter
                    p_pivot
                      1 décembre 2018 à 20:44:40

                      bonsoir a vous je sais que j'ai mis du temps a revenir mais j'etais  en plein recherche sur mon projet d'ascenseur.

                      bien jusqu'ici je penses que j'ai pas mal avance dans ce projet et la je rencontre a nouveau un probleme au niveau de la synchronisation

                      entre mes objets. le fait de deplacer un sprite auutomatiquement suivant une direction me pose probleme.

                      puisse quelqu'un m'aider?

                      • Partager sur Facebook
                      • Partager sur Twitter
                      p_pivot
                        2 décembre 2018 à 16:54:30

                        Hello,

                        Paul Pivot a écrit:

                        le fait de deplacer un sprite auutomatiquement suivant une direction me pose probleme.

                        Soit plus précis ;). Et un bout de code reproduisant le problème serait le bienvenue.

                        -
                        Edité par Guit0Xx 2 décembre 2018 à 16:54:48

                        • Partager sur Facebook
                        • Partager sur Twitter

                        ...

                          2 décembre 2018 à 23:19:53

                          Salut,

                          Il faudrait peut être reprendre toute la conception depuis le début :p

                          Voyons voir :

                          Nous avons la notion d'immeuble, au sujet de laquelle nous espérons pouvoir disposer des services suivants:

                          • lui demander de combien d'étages il est composé
                          • lui demander les informations relatives (altitude, hauteur "utile", auteur du vide technique) à un étage spécifique
                          • lui demander sa superficie au sol (éventuellement sa longueur et sa largeur)
                          • lui demander son adresse spécifique
                          • lui demander sa hauteur totale
                          • lui demander le nombre d'étage "sous-terrains" dont il est composé

                          Il y a d'autres services dont nous pourrions avoir besoin, mais nous allons déjà commencer par ceci, parce que nous nous rendons compte que nous avons besoin de deux notions supplémentaires, à savoir : la notion d'étage et la notion d'ascenseur.

                          Un étage, c'est --typiquement -- une superficie dans un plan horizontal, qui se trouve à une certaine distance (verticale) du sol, et qui dispose "d'un certaine espace" vertical (la "hauteur")

                          Le fait est que, a priori, tous les étages d'un immeuble présenteront exactement la même superficie (longueur et largeur) que l'immeuble, et la même hauteur disponible, à laquelle il faut ajouter l'éventuel "vide technique" qui prend place entre le plafond d'un étage et le sol de l'étage supérieur

                          Cette notion aura fondamentalement sémantique de valeur, et nous voudrons essentiellement lui poser trois questions particulières

                          • quelle est ton altitude (par rapport au sol)?
                          • quelle est ton hauteur utilisable (l'espace qui sépare le plancher du plafond)
                          • quelle est la hauteur de ton "vide technique"?
                          Si bien que cette notion pourrait être représentée sous une forme proche de
                          class Floor{
                          public: 
                              /* Dans bien des immeubles, la "hauteur disponible"
                               * d'un étage est d'environ 2.50 m et le vide technique
                               * est de 0.5 m j'utilise ces valeurs par défaut
                               */
                              Floor(double altitude,
                                    double height = 2.50,
                                    double technical = 0.50): altitude_{altitude},
                                                       height_{height}
                                                       technical_{technical}{
                              }
                              double altitude() const {
                                  return altitude_;
                              }
                              double height const{
                                  return height_;
                              }
                              double technichalVoid () const{
                                  return technical_;
                              }
                              double totalHeight() const{
                                  return height_ + technical_;
                              }
                          private:
                              double altitude_;
                              double height_;
                              double technical_;
                          };

                          quant à la notion d'ascenseur, nous nous attendrons à disposer de quelques services sympa de sa part, à savoir être en mesure

                          • de lui demander à quel étage il se trouve
                          • de lui demander dans quelle direction il se déplace (vers le haut ou vers le bas)
                          • de lui demander son status (en mouvement, portes ouvertes, en attente d'appel)
                          • de lui demander l'étage le plus proche (par rapport à l'étage où il se trouve à un instant T) auquel on lui a demandé de s'arrêter, en tenant compte de son sens de déplacement (*)
                          • Lui demander le temps restant avant qu'il n'atteigne le prochain étage auquel il passera (sans s'inquiéter de savoir s'il doit ou non s'y arrêter)
                          • lui demander de s'arrêter à un étage donné (indépendamment de son sens de déplacement actuel)
                          • lui demander s'il peut s'arrêter à un étage donné (**)
                          • de lui demander quel est l'étage le plus haut auquel il a accès
                          • de lui demander quel est l'étage le plus bas auquel il a accès
                          (**)Cette dernière question est importante, car plusieurs situations pourraient faire en sorte qu'un ascenseur donné ne puisse pas s'arrêter à un étage particulier.  Par exemple, il se peut:
                          • qu'il y ait une série d'ascenseurs qui désservent la première moitié de l'immeuble (des étages 0 à 45) et une autre qui désserve la seconde moitié des immeubles (des étages 40 à 90)
                          • que certains étages "privatifs" ne soient accessible que par certains ascenseurs bien particuliers
                          • va savoir ce qui pourrait arriver d'autre :D

                          Et, bien sur, il faudra un "gestionnaire des appels" (bien que j'ai horreur du terme "gestionnaire") de l'ascenceur qui s'occupera de gérer le fait que les gens puissent appeler un ascenseur quand ils se trouvent à un étage particulier (pour monter, ou pour descendre)

                          A priori, nous nous attendrons à pouvoir

                          • appeler un ascenseur (depuis un étage donné pour aller dans une direction donnée)
                          • l'interroger pour savoir si un ascenseur a été appelé (à un étage donné, pour aller dans une direction donnée)
                          • de lui demander l'étage le plus proche (par rapport à l'étage où l'ascenseur se trouve à un instant T) auquel on a fait appel à l'ascenseur pour aller dans le même sens que l'ascenseur (*)
                          • lui indiquer que l'ascenseur s'est arrêté à un étage donné lors de son déplacement dans une direction donnée (pour "annuler" l'appel correspondant éventuel)

                          (*) A priori, ces deux questions devraient permettre de déterminer à quel étage l'ascenseur devra s'arrêter en premier, en fonction de l'étage auquel il se trouve à un instant T et de son sens de déplacement ;)

                          Cependant, toutes mes explications ont mis en évidence des notions purement business dont nous voudrons disposer, à savoir:

                          • la direction du déplacement (vers le haut ou vers le bas)
                          • la notion d'état de l'ascenseur (se déplace, porte ouverte, attend l'appel, avec une boucle entre se déplace et porte ouverte)

                          Nous devrions donc avoir des données basiques telles que

                          enum MoveDirection{
                             toUp,
                             toDown
                          };
                          enum LiftStatus{
                              doorOpen,
                              moving,
                              waitingForCall
                          };

                          Accessoirement, nous pourrions envisager de définir une notion représentant un appel spécifique de l'ascenseur sous une forme proche de

                          struct LiftCall{
                              int floor;
                              MoveDirection direction;
                          };

                          Mais le fait est que cette notion est "typiquement interne" à la notion de gestionnaire des appels :p

                          Grace à cela, nous pourrons représenter le "gestionnaire d'appels" des ascenseurs sous une forme proche de

                          class LiftCallManager{
                          public:
                              /* il garder en mémoire le numéro
                               * de l'étage le plus bas et de l'étage le plus
                               * haut auquel on puisse faire appel à l'acscenseur
                               */
                              LiftCallManager(int min, int max):min_{min},
                                       max_{max}{
                              }
                              void call(int floor, MoveDirection dir){
                                  /* il sera plus facile de traiter chaque direction de manière séparée
                                  if(dir == toUpper)
                                      callForUpper(floor);
                                  else
                                      callForDowner(floor);
                              }
                              int nearestFloor(int from, MoveDirection dir)const{
                                 /* bien que la logique soit sensiblement identique
                                  * il semble plus facile de traiter les deux
                                  * directions possibles séparément
                                  */
                                 if(dir == toUpper)
                                     return nearestUpperFloor(from);
                                 return nearestLowerFloor(from);
                              }
                              void liftStopped(int floor, MoveDirection dir);
                              bool liftCalled(int floor, MoveDirectionDir) const{
                                  if(dir == toUpper)
                                      return liftCalledForUpper(floor);
                                  return liftCalledForDowner(floor);
                              }
                          private:
                              int min_;
                              int max_;
                              int nearestUpperFloor(int floor) const;
                              int nearestLowerFloor(int floor) const;
                              bool liftCalledForUpper(floor) const;
                              bool liftCalledForLower(floor) const;
                              void callForUpper(int floor);
                              void callForLower(int floor);
                              /* par facilité, il semble préférable de
                               * maintenir les appels "pour monter" et 
                               * les appels "pour descendre" de manière séparée
                               */
                              std::set<int> upperCalls_;
                              std::set<int> downerCalls_;
                          };

                          NOTA: le gros de la logique sera pris en charge par les fonctions privées...  Comme il faut bien que tu aies quelque chose à faire, je te laisse réfléchir à leur implémentation ;)

                          Je vais te laisser réfléchir un peut à la manière dont tu va implémenter la classe Lift (pour ascenseur) et la class Building (immeuble) sur base des services que j'ai exprimer plus haut (je ne vais pas tout faire pour toi, non plus :D)

                          Tu remarqueras que, bien que les différentes classes dont j'ai parlé aient régulièrement besoin d'informations accessibles depuis d'autres classes, elle devraient pour ainsi dire toutes pouvoir travailler de manière strictement indépendantes!

                          TIP : idéalement, la classe Lift devrait pouvoir émettre un signal de type "je suis arrivé à tel étage en me déplacant dans telle direction" auquel pourront se connecter ... tous les gestionnaires d'appels susceptibles de s'intéresser à un ascenseur particulier ;)

                          De plus, toutes les classes dont j'ai parlé ici représentent des données strictement business (métier) : elles contiennent des informations "réelles".

                          L'affichage se fait de manière séparée, ne serait-ce que parce que tu as choisi d'utiliser SFML, alors que d'autres pourraient choisir d'utiliser Qt, OpenGL, DirectX ou encore vulain.

                          Si les deux premiers défis que je te lance sont d'implémenter la classe Lift et la classe Building sur base des informations que je t'ai fournies, le troisième défi sera de mettre en place "tout ce qu'il faut" pour pouvoir adapter les valeurs "réelles" aux besoins de ton affichage ;)

                          Mais, a priori, tu disposera de "tout ce dont tu as besoin" ;)

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                            7 décembre 2018 à 6:55:31

                            bonjour, merci pour votre reponse M. koala01 , en effet je suis entrain de repasser en vue la modelisation de ce probleme, en tenant compte de vos propositions et je penses que dans votre reponse ya pas mal de choses qui m'echappaient ou que j'avais minimaliser et dont je devrais revoir, je reviens a vous tres bientot en  attendant je dois relever le defis que vous m'avez lance ou du moins essayer , ca me mets vraimment au travail et j'aime ca .

                            pour ma position dans le projet, j'ai concu trois classes dont une pour la construction des etages, une pour le fonctionnement de l'ascenseur et l'autre pour lle personnage et entre temps c'est tout ca que je dois revoir en tenant compte de vos suggestions , mais je voudrais savoir si je pouvais gerer le fonctionnement de l'asssenceur donc les appels, et autres dans une classe autre que la classe ascenseur unpeu comme dans les collision ou on a une classe qui gere le personnage une classe qui gere parexemple le mur et une autre qui gere les collisions entre le personnage et les murs ?

                            merci bien  encore et a tres bientot.

                            -
                            Edité par Paul Pivot 7 décembre 2018 à 7:01:55

                            • Partager sur Facebook
                            • Partager sur Twitter
                            p_pivot
                              28 décembre 2018 à 11:28:54

                              bien salut! vous allez bien j'espere!

                              je reviens avec mon projet d'ascenseur a moitier fait mais j'ai touujours des problemes. voici une capture de ma position.

                              • Partager sur Facebook
                              • Partager sur Twitter
                              p_pivot
                                2 janvier 2019 à 18:22:32

                                Et ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                                  3 janvier 2019 à 11:02:59

                                  voici le code que j'ai utilise:

                                  #include <SFML/Graphics.hpp>
                                  #include <SFML/Audio.hpp>
                                  #include <iostream>
                                  #include <random>
                                  #include <time.h>
                                  #include "etages.hpp"
                                  #define  CREATOR 1994_PIVOT
                                  //#include "bouton.h"
                                  
                                  using namespace std;
                                  using namespace sf;
                                  
                                  #ifndef PERSONNE_H
                                  #define PERSONNE_H
                                  
                                  class Personne
                                  {
                                  	public:
                                  		Personne(const std::string & filePath, sf::Vector2f position, int width, int height, float speedPers, sf::Vector2i animation );
                                  		void MoveUp();
                                  		void MoveDown();
                                  		void MoveLeft();
                                  		void MoveRight();
                                  		sf::Sprite setTexturePersonne();
                                  		void animerPersonne(bool Fps);
                                  		sf::Sprite getPersonne();
                                  		//void getPersonne(sf::RenderTarget& target);
                                  		sf::Texture getTexture();
                                  
                                  	protected:
                                  		const int largeurPers; // Largeur
                                      	const int taillePers; // Hauteur
                                      	const float vitessePers; // vitesse de deplacement de la personne
                                      	enum direction{Down, Left, Right, Up};
                                      	sf::Vector2i anim;
                                      	//bool updateFps;
                                      	sf::Texture perso;
                                      	sf::Sprite personne;
                                      	sf::Clock time;
                                      	bool updateFps = true;
                                      	Etages e;
                                  };
                                  
                                  Personne::Personne(const std::string & filePath, sf::Vector2f position, int width, int height, float speedPers, sf::Vector2i animation)
                                  :largeurPers(width), taillePers(height), vitessePers(speedPers)
                                  {
                                  	anim = animation;
                                  	time.restart();
                                  	//updateFps = false;
                                  	if (!perso.loadFromFile(filePath))
                                  	{
                                  		std::cout<<"erreur lors du chargement du personnage. "<<std::endl;
                                  	}
                                  	else
                                  	{
                                  		//lisser la texture pour une meilleure qualite (facultatif)
                                  		perso.setSmooth(true);
                                  		personne.setTexture(perso);
                                  		personne.setPosition(position);
                                  	}
                                  }
                                  
                                  
                                  /**
                                   * Deplacement de la personne
                                   **/
                                  void Personne::MoveUp()
                                  {
                                  	// animation de la sprite vers le haut
                                  	updateFps = true;
                                  	anim.y = Up;
                                  	personne.move(0, -vitessePers);
                                  }
                                  
                                  void Personne::MoveDown()
                                  {	
                                  	// animation de la sprite vers le bas
                                  	updateFps = true;
                                  	anim.y = Down;
                                  	personne.move(0, vitessePers);
                                  }
                                  
                                  void Personne::MoveLeft()
                                  {
                                  	// animation de la sprite vers la gauche
                                  	updateFps = true;
                                  	anim.y = Left;
                                  	personne.move(-vitessePers, 0);
                                  	if (personne.getPosition().x <= 0 )
                                  	{
                                  		personne.setPosition(sf::Vector2f(900, personne.getPosition().y));
                                  	}
                                  	
                                  }
                                  
                                  void Personne::MoveRight()
                                  {
                                  	// animation de la sprite vers la droite
                                  	//le bonhomme est anime, 
                                  	updateFps = true;
                                  	anim.y = Right;
                                  	personne.move(vitessePers, 0);
                                  	if(personne.getPosition().x >= 900 )
                                  	{
                                  		personne.setPosition(sf::Vector2f(0, personne.getPosition().y));
                                  	}
                                  }
                                  
                                  /**
                                   * fonction qui retourne la personne (un getter)
                                   **/
                                  sf::Sprite Personne::getPersonne()
                                  {
                                  	return personne;
                                  }
                                  
                                  /**
                                   * fonction qui retourne la personne (un getter)
                                   **
                                  void Personne::getPersonne(sf::RenderTarget& target)
                                  {
                                  	target.draw(personne);
                                  }
                                  
                                  
                                  /**
                                   * fonction qui retourne la texture de la personne (un getter)
                                   **/
                                  sf::Texture Personne::getTexture()
                                  {
                                  	return perso;
                                  }
                                  
                                  /**
                                   *
                                   **/
                                  void Personne::animerPersonne(bool Fps)
                                  {
                                  	// animation  du personnage
                                  	if (Fps)
                                  	{
                                  		if (time.getElapsedTime().asMilliseconds() >= 50)
                                  		{
                                  			anim.x--;
                                  			if (anim.x * largeurPers >= perso.getSize().x)
                                  			{
                                  				anim.x = 2;
                                  			}
                                  			time.restart();
                                  			std::cout<<"stickman1 est a ( "<<personne.getPosition().x<<","
                                  					<<personne.getPosition().y<<")"<<std::endl
                                  					<<" et a l'etage : "<<e.getNumero() <<endl;
                                  		}
                                  	}
                                  	//setTexturePersonne();	
                                  }
                                  
                                  
                                  /**
                                   * decoupage de la sprite
                                   **/
                                  sf::Sprite Personne::setTexturePersonne()
                                  {
                                  	personne.setTextureRect(sf::IntRect(anim.x * largeurPers, anim.y * taillePers, largeurPers, taillePers));
                                  	return personne;
                                  }
                                  
                                  #endif
                                  
                                  #include <SFML/Graphics.hpp>
                                  #include <SFML/Audio.hpp>
                                  #include <iostream>
                                  #define  CREATOR 1994_PIVOT
                                  
                                  using namespace std;
                                  using namespace sf;
                                  
                                  #ifndef ETAGES_H
                                  #define ETAGES_H
                                  
                                  class Etages
                                  {
                                  	public:
                                  		Etages(int=0);
                                  		~Etages();
                                  		sf::Texture getTextureEtages();
                                  		void getEtages(sf::RenderTarget& target);
                                  		void draw(sf::RenderTarget& target);
                                  		bool openDoor(int=0);
                                  		bool closeDoor(int=0);
                                  		bool ascMoveUp();
                                  		bool ascMoveDown();
                                  		int getNumero(){ return numero ;}
                                  		sf::Sprite getCouvrePorteg(){return couvreporteg[0] ;}
                                  		sf::Sprite getCouvrePorted(){return couvreported[0] ;} 
                                  		sf::Sprite getBtnR1(){return btnR[0];}
                                  		sf::Sprite getBtnR2(){return btnR[1];}
                                  		sf::Sprite getBtnV1(){return btnV[0];}
                                  		sf::Sprite getBtnV2(){return btnV[1];}
                                  		sf::Sprite getAsc(){ return ascenseur;}
                                  		sf::Sprite getAmpR1(){return ampR[0];}
                                  		sf::Sprite getAmpR2(){return ampR[1];}
                                  		sf::Sprite getAmpV1(){return ampV[0];}
                                  		sf::Sprite getAmpV2(){return ampV[1];}
                                  		float get_Xbtns(){return Xbtn ;}
                                  		float get_Ybtn1(){return Ybtn ;}
                                  		float get_Ybtn2(){return Ybtn - hauteurEtage ;}
                                  
                                  	protected:
                                  		int num;
                                  		static int numero;
                                  		float speedAscenseur = 0.25;
                                  		float speedOCDoor = 0.5;
                                  		int Xbatiment = 200;
                                  		int Ybatiment = 350;
                                  		int largeurEtage = 600; // Largeur
                                      	int hauteurEtage = 315; // Hauteur
                                      	float largeurPorte = 93; 
                                  		float hauteurPorte = 220;
                                      	float Xporte = Xbatiment +  (largeurEtage / 3 ) + 15;
                                  		float Yporte = Ybatiment + 52.5;
                                  		float Xbtn = Xporte - 70;
                                  		float Ybtn = Yporte + hauteurPorte - 50 ;
                                  		float Xamp = Xporte + largeurPorte - 10;
                                  		float Yamp = Yporte - 35 ;
                                  
                                      	//const std::string & fichierEtage;
                                      	//std::string ETAGE_FILE_PATH("mur1.jpeg");
                                      	
                                  		//const sf::Vector2f position(20, 200);
                                      	sf::Texture textureEtages;
                                      	sf::Texture textureButonRg;
                                      	sf::Texture textureButonVt;
                                      	sf::Texture textureporteG;
                                      	sf::Texture textureporteD;
                                      	sf::Texture textureAscenseur;
                                      	sf::Texture textureCvrPrtD;
                                      	sf::Texture textureCvrPrtG;
                                      	sf::Sprite *etage; 
                                      	sf::Sprite *btnR;
                                      	sf::Sprite *btnV;
                                      	sf::Sprite *ampR;
                                      	sf::Sprite *ampV;
                                      	sf::Sprite *porteg; 
                                      	sf::Sprite *ported; 
                                      	sf::Sprite ascenseur; 
                                      	sf::Sprite *couvreported;
                                      	sf::Sprite *couvreporteg;
                                  
                                  };
                                  
                                  int Etages::numero = 0;
                                  
                                  Etages::Etages(int n)
                                  {
                                  
                                  	num = n;
                                  	etage = new sf::Sprite[num];
                                  	porteg = new sf::Sprite[num];
                                  	ported = new sf::Sprite[num];
                                  	//ascenseur = new sf::Sprite[num];
                                  	btnR = new sf::Sprite[num];
                                  	btnV = new sf::Sprite[num];
                                  	ampR = new sf::Sprite[num];
                                  	ampV = new sf::Sprite[num];
                                  	couvreporteg = new sf::Sprite[num];
                                  	couvreported = new sf::Sprite[num];
                                  
                                  	if (!textureEtages.loadFromFile("pivotim/mur31.tga"))
                                  	{
                                  		std::cout<<"erreur lors du chargement de l'etage. "<<std::endl;
                                  	}
                                  	if (!textureporteG.loadFromFile("pivotim/porteg.png"))
                                  	{
                                  		std::cout<<"erreur lors du chargement de l'etage. "<<std::endl;
                                  	}
                                  	if (!textureporteD.loadFromFile("pivotim/ported.png"))
                                  	{
                                  		std::cout<<"erreur lors du chargement de l'etage. "<<std::endl;
                                  	}
                                  	if (!textureAscenseur.loadFromFile("pivotim/ascenseur.png"))
                                  	{
                                  		std::cout<<"erreur lors du chargement de l'etage. "<<std::endl;
                                  	}
                                  	if (!textureButonRg.loadFromFile("pivotim/boutonr.tga"))
                                  	{
                                  		std::cout<<"erreur lors du chargement de l'etage. "<<std::endl;
                                  	}
                                  	if (!textureButonVt.loadFromFile("pivotim/butonv.tga"))
                                  	{
                                  		std::cout<<"erreur lors du chargement de l'etage. "<<std::endl;
                                  	}
                                  	if (!textureCvrPrtG.loadFromFile("pivotim/porteg.tga"))
                                  	{
                                  		std::cout<<"erreur lors du chargement de l'etage. "<<std::endl;
                                  	}
                                  	if (!textureCvrPrtD.loadFromFile("pivotim/ported.tga"))
                                  	{
                                  		std::cout<<"erreur lors du chargement de l'etage. "<<std::endl;
                                  	}
                                  
                                  	
                                  		//lisser la texture pour une meilleure qualite (facultatif)
                                  		textureEtages.setSmooth(true);
                                  		textureporteD.setSmooth(true);
                                  		textureporteG.setSmooth(true);
                                  		textureAscenseur.setSmooth(true);
                                  		textureButonVt.setSmooth(true);
                                  		textureButonRg.setSmooth(true);
                                  		textureCvrPrtD.setSmooth(true);
                                  		textureCvrPrtG.setSmooth(true);
                                  
                                  	if(num != 0)
                                  	{
                                  		for (int i = 0; i < num; ++i)
                                  		{
                                  			
                                  			etage[i].setTexture(textureEtages);
                                  			etage[i].setPosition(Xbatiment, Ybatiment - i * hauteurEtage);
                                  
                                  			porteg[i].setTexture(textureporteG);
                                  			porteg[i].setPosition( Xporte, Yporte - i * hauteurEtage);
                                  
                                  			ported[i].setTexture(textureporteD);
                                  			ported[i].setPosition((Xporte + largeurPorte ), Yporte - i * hauteurEtage);
                                  
                                  			ascenseur.setTexture(textureAscenseur);
                                  			ascenseur.setPosition(Xporte, Yporte);
                                  
                                  			btnR[i].setTexture(textureButonRg);
                                  			btnR[i].setPosition(Xbtn, Ybtn - i * hauteurEtage);
                                  
                                  			btnV[i].setTexture(textureButonVt);
                                  			btnV[i].setPosition(Xbtn, Ybtn - i * hauteurEtage);
                                  
                                  			couvreporteg[i].setTexture(textureCvrPrtG);
                                  			couvreporteg[i].setPosition(Xporte , Yporte - i * hauteurEtage);
                                  
                                  			couvreported[i].setTexture(textureCvrPrtD);
                                  			couvreported[i].setPosition((Xporte + largeurPorte ), Yporte - i * hauteurEtage);
                                  
                                  			ampR[i].setTexture(textureButonRg);
                                  			ampR[i].setPosition(Xamp, Yamp - i * hauteurEtage);
                                  
                                  			ampV[i].setTexture(textureButonVt);
                                  			ampV[i].setPosition(Xamp, Yamp - i * hauteurEtage);
                                  
                                  			++numero;
                                  		}
                                  	}
                                  }
                                  
                                  Etages::~Etages()
                                  {
                                  	delete []etage;
                                  	delete []ported;
                                  	delete[] porteg;
                                  	delete []couvreporteg;
                                  	delete []couvreported;
                                  	delete[] btnV;
                                  	delete[] btnR;
                                  	delete[] ampR;
                                  	delete[] ampV;
                                  }
                                  
                                  /**
                                   * fonction qui retourne l'etage (un getter)
                                   **/
                                  void Etages::getEtages(sf::RenderTarget& target)
                                  {
                                  	sf::Sprite personne2;
                                  	target.draw(ascenseur);
                                  	for (int i = 0; i < num; ++i)
                                  	{
                                  		/* code */
                                  		target.draw(porteg[i]);
                                  		target.draw(ported[i]);
                                  		target.draw(etage[i]);
                                  		//target.draw(couvreporteg[i]);
                                  		//target.draw(couvreported[i]);
                                  	}
                                  }
                                  
                                  /**
                                   * ouverture des portes
                                   **/
                                  bool Etages::openDoor(int n)
                                  {
                                  	//checkWallCollisions();
                                  	if(ascenseur.getPosition().y == porteg[n].getPosition().y)
                                  		if ( (porteg[n].getPosition().x + largeurPorte ) > Xporte  &&  ported[n].getPosition().x < (Xporte + largeurPorte * 2))
                                  		{
                                  			porteg[n].move( -speedOCDoor, 0 );
                                  			couvreporteg[n].move(-speedOCDoor, 0);
                                  			//porteg[0].setSize(sf::Vector2f(-(largeurPorte / 2) + 1), hauteurPorte)
                                  			ported[n].move(speedOCDoor, 0);
                                  			couvreported[n].move(speedOCDoor, 0);
                                  			//ported[0].setSize(sf::Vector2f((largeurPorte / 2) + 1 ), hauteurPorte)
                                  			return false;
                                  		}
                                  		else
                                  			return true;
                                  		return 0;
                                  }
                                  
                                  /**
                                   * ouverture des portes
                                   **/
                                  bool Etages::closeDoor(int n)
                                  {
                                  	/* code */
                                  	if( porteg[n].getPosition().x < Xporte  && ported[n].getPosition().x > (Xporte + largeurPorte))
                                  	{
                                  		porteg[n].move( speedOCDoor, 0 );
                                  		couvreporteg[n].move( speedOCDoor, 0);
                                  		//porteg[0].setSize(sf::Vector2f(-(largeurPorte / 2) + 1), hauteurPorte);
                                  		ported[n].move(-speedOCDoor, 0);
                                  		couvreported[n].move(-speedOCDoor, 0);
                                  		//ported[0].setSize(sf::Vector2f((largeurPorte / 2) + 1 ), hauteurPorte);
                                  		return false;
                                  	}
                                  	else
                                  		return true;
                                  }
                                  
                                  /**
                                   * monter de l'ascenseur vers l'etage superieur
                                   **/
                                  bool Etages::ascMoveUp()
                                  {
                                  	/* code */
                                  	if(closeDoor() == true)
                                  		if( ascenseur.getPosition().y > Yporte - hauteurEtage )
                                  		{
                                  			ascenseur.move(0, -speedOCDoor);
                                  			return false;
                                  		}
                                  		else
                                  			return true;
                                  		return 0;
                                  }
                                  
                                  /**
                                   * descente de l'ascenseur vers l'etage inferieur
                                   **/
                                  bool Etages::ascMoveDown()
                                  {
                                  	/* code */
                                  	if(closeDoor() == true)
                                  		if( ascenseur.getPosition().y < Yporte )
                                  		{
                                  			ascenseur.move(0, speedOCDoor);
                                  			return false;
                                  		}
                                  		else
                                  		{
                                  			std::cout<<"\a"<<endl;
                                  			return true;
                                  		}
                                  		return 0;
                                  }
                                  
                                  
                                  
                                  /**
                                   * fonction qui retourne la texture de l'etage (un getter)
                                   **/
                                  sf::Texture Etages::getTextureEtages()
                                  {
                                  	return textureEtages;
                                  }
                                  
                                  
                                  
                                  #endif
                                  
                                  #include <SFML/Graphics.hpp>
                                  #include <SFML/Window.hpp> 
                                  #include <iostream>
                                  #include <iomanip>
                                  #include <string>
                                  #include <time.h>
                                  #include "hpp/etage.hpp"
                                  #include "hpp/etages.hpp"
                                  #include "hpp/ascenseur.hpp"
                                  #include "hpp/personne.hpp"
                                  using namespace sf;
                                  using namespace std;
                                  
                                  #ifdef SFML_STATIC
                                  #endif //SFML_STATIC
                                  
                                  #pragma region variables
                                  
                                  	sf::RenderWindow window; //creation de l'objet fenetre
                                  	Etage E;
                                  	sf::Vector2i positionSouris, positionAsc;
                                  
                                  	sf::Font font;
                                  	char contenu[50] = "ASCENCEUR ULTRA MODERNE"; 
                                  	sf::Text text(contenu, font, 20);
                                  
                                  //== variables d'ascenseur en relation avec celles de l'etage =====
                                  	int X_BAT(E.getXbatiment());
                                  	int Y_BAT(E.getYbatiment());
                                  	float LARG_BAT(E.getLargeurBatiment());
                                  	float HAUT_BAT(E.getHauteurBatiment());
                                   	const float LARG_ASC = 93;
                                   	const float HAUT_ASC = 220;
                                   	float X_ASC = 500 - 250;
                                  	float Y_ASC = 564 - 254;
                                  	Vector2f POS_ASC(X_ASC, Y_ASC);
                                  	float ASC_SPEED(0.5);
                                  
                                  // ==== variables de la personne ========
                                  	//std::srand(std::time(0));
                                  	const string PERSO_FILE_PATH("../gest_ascenceur/img/stickman1.png");
                                  	float PERS_SPEED(1.0);
                                  	int LARG_PERS(32.0);
                                  	int TAILLE_PERS(48.0);
                                  	enum direction{Down, Left, Right,Up, Null};
                                  	sf::Vector2i animation(1,Down);
                                  	//bool updateFps = true;
                                  	float alleeX1 = X_BAT;
                                  	float alleeY1 = Y_BAT;
                                  	//float alleeX2 = ;
                                  	float alleeY2 = 316;
                                  	float fini = 400;
                                  
                                  	//int i;
                                  	//for (i = 0; i < E.getNum(); ++i)
                                  	//{
                                  		//float x = alleeX1 + LARG_BAT;
                                  		//float y = alleeY1 + i * HAUT_BAT;
                                  		//float X_PERS = rand()% alleeX1;
                                  		//float Y_PERS = alleeY1 + rand()%2;
                                  	Vector2f POS_PERS(20, 200);
                                  	//creation de la personne
                                  	Personne P(PERSO_FILE_PATH, POS_PERS, LARG_PERS, TAILLE_PERS, PERS_SPEED, animation );
                                  
                                  
                                  
                                  #pragma endregion variables
                                  
                                  #pragma region prototypes
                                  	void gestion_clavier();
                                  	void gestion_souris();
                                  	void fenetre_win();
                                  	void chargerPolice();
                                  #pragma endregion prototypes
                                  
                                  
                                  
                                  /*===================================================================================================
                                  	 									DEBUT DU PROGRAMME PRINCIPAL                       
                                  =====================================================================================================*/
                                  
                                  int main(int argc, char const *argv[])
                                  {
                                  	// appel de la fenetre
                                  	fenetre_win();
                                  
                                  	//contruction_etage();
                                  	Etages E(3);
                                  	float _Xbt = E.get_Xbtns();
                                  	float _Ybt1 = E.get_Ybtn1();
                                  	float _Ybt2 = E.get_Ybtn2();
                                  	//appel de l'objet ascenseur
                                  	Ascenseur A(POS_ASC, LARG_ASC, HAUT_ASC, ASC_SPEED, animation);
                                  
                                  	//chargement de la police
                                  	chargerPolice();
                                  
                                  	//sf::Clock time;
                                  	P.setAnimerPresonne(true);
                                  	
                                  	//===========================================
                                  	//  tant que la fenetre est ouverte
                                  	while(window.isOpen())
                                  	{
                                  		sf::Event evenement;
                                  		
                                  		//test des evenements
                                  		while(window.pollEvent(evenement))
                                  		{
                                  			//si on clique sur fermer
                                  			if (evenement.type == sf::Event::Closed)
                                  			{
                                  				//la fenetre se ferme
                                  				window.close();	
                                  				std::cout<<"La fenetre est fermee !"<<endl;
                                  			}
                                  			//si on appui sur une touche alors 
                                  			/*if (evenement.type != sf::Event::KeyPressed)
                                  			{
                                  				//le bonhomme est anime, 
                                  				//updateFps = true;
                                  			}
                                  			else //sinon
                                  			{
                                  				//il ne bouge meme pas
                                  				updateFps = false;
                                  			}*/
                                  		}
                                  
                                  		/* appel de la fonction de Gestion du clavier */
                                  		gestion_clavier();
                                  
                                  	
                                  		/* appel de la fonction de Gestion de la souris */
                                  		gestion_souris();
                                  
                                  		//recuperation des coordonnees de la souris
                                  		int sourisX = positionSouris.x;
                                  		int sourisY = positionSouris.y;
                                  
                                  		//recuperation des coordonnees de l'ascenseur
                                  		
                                  		// animation  du personnage
                                  		P.animerPersonne(true);
                                  		
                                  		// decoupage de la sprite personne
                                  		P.setTexturePersonne();		
                                  		
                                  		
                                  		/* On dessine, on affiche et met a jour */
                                  		window.clear(sf::Color(37, 86, 90));	// Effacement de la fenetre 
                                  		//P.getPersonne(window);
                                  		E.getEtages(window);
                                  		window.draw(P.getPersonne());
                                  		window.draw(E.getCouvrePorteg());
                                  		window.draw(E.getCouvrePorted());
                                  		//E.draw(window); //affichage des etages par classe
                                  		window.draw(text);
                                  
                                  
                                  
                                  /*================ depacement du personnage sur la trajectoire =====================*/
                                  		if (E.getAsc().getPosition().y > fini )
                                  		{
                                  			/* code */
                                  			window.draw(E.getAmpV1());
                                  			window.draw(E.getAmpR2());
                                  		}
                                  		else
                                  		{
                                  			window.draw(E.getAmpR1());
                                  			window.draw(E.getAmpV2());
                                  		}
                                  		
                                  		if (P.getPersonne().getPosition().x < 500 && P.getPersonne().getPosition().y < 606 )
                                  		{
                                  			/* code */
                                  			P.MoveDown();
                                  		}
                                  		if (P.getPersonne().getPosition().y == 606 && P.getPersonne().getPosition().x < 500)
                                  		{
                                  			/* code */
                                  			P.MoveRight();
                                  		}
                                  		if (P.getPersonne().getPosition().y == 606 && P.getPersonne().getPosition().x >= _Xbt )
                                  		{
                                  			/* code */
                                  			window.draw(E.getBtnV1());
                                  			window.draw(E.getBtnR2());
                                  
                                  			if (E.openDoor() == false)
                                  			{
                                  				/* code */
                                  				E.openDoor();
                                  			}
                                  		}
                                  		else
                                  		{
                                  			window.draw(E.getBtnR1());
                                  			window.draw(E.getBtnR2());
                                  		}
                                  		if (P.getPersonne().getPosition().x == 500 && E.openDoor() == true && P.getPersonne().getPosition().y > 564)
                                  		{
                                  			/* code */
                                  			//window.draw(E.getBtnV1());
                                  			P.MoveUp();
                                  		}
                                  		
                                  		if ( P.getPersonne().getPosition().x == 500 && P.getPersonne().getPosition().y == 564 )
                                  		{
                                  			/* code */
                                  			
                                  			if (E.closeDoor() == false)
                                  			{
                                  				/* code */
                                  				E.closeDoor();
                                  			}
                                  			//P.setAnimerPresonne(false);
                                  			
                                  			if (E.ascMoveUp() == false)
                                  			{
                                  				/* code */
                                  				E.ascMoveUp();
                                  				//P.getPersonne().setPosition(sf::Vector2f(500, 879));
                                  			}
                                  			/*if (personne.getPosition().x == 500 && personne.getPosition().y <= 564 )
                                  			{
                                  				personne.setPosition(sf::Vector2f(500, 879));
                                  			}*/
                                  			E.openDoor(1);
                                  		}
                                  
                                  	/*========================= fin de calcul de la trajectoire ========================*/
                                  		
                                  		
                                  		window.display(); //Affichage du contenu de la fenetre
                                  	}
                                  	return 0;
                                  }
                                  /*===================================================================================================
                                  	 									FIN DU PROGRAMME PRINCIPAL                       
                                  =====================================================================================================*/
                                  
                                  
                                  /**
                                   * Fonction de Gestion du clavier
                                   **/
                                  void gestion_clavier()
                                  {
                                  	if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
                                  	{
                                  		// animation de la sprite vers le haut
                                  		P.MoveUp();
                                  		std::cout<<"bouton haut appuye"<<endl;
                                  	}
                                  	else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
                                  	{
                                  		// animation de la sprite vers le bas
                                  		P.MoveDown();
                                  		std::cout<<"bouton Bas appuye"<<endl;
                                  	}
                                  	else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
                                  	{
                                  		// animation de la sprite vers la gauche
                                  		P.MoveLeft();
                                  		std::cout<<"bouton Gauche appuye"<<endl;
                                  	}
                                  	else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
                                  	{
                                  		// animation de la sprite vers la droite
                                  		P.MoveRight();
                                  		std::cout<<"bouton Droit appuye"<<endl;
                                  	}
                                  	if (P.getPersonne().getPosition().x <= 0 )
                                  	{
                                  		P.getPersonne().setPosition(sf::Vector2f(900, P.getPersonne().getPosition().y));
                                  	}
                                  	else if(P.getPersonne().getPosition().x >= 900 )
                                  	{
                                  		P.getPersonne().setPosition(sf::Vector2f(0, P.getPersonne().getPosition().y));
                                  	}
                                  	
                                  }
                                  //======================================================================
                                  
                                  
                                  /**
                                   *  fonction de gestion de la souris
                                   **/
                                  void gestion_souris()
                                  {
                                  	if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
                                  	{
                                  		//definition de la position de la souris
                                  		positionSouris = sf::Mouse::getPosition(window);
                                  		// donne la position du curseur
                                  		std::cout<<"bouton Gauche de la souris appuye au coordonnees: ( "<<positionSouris.x<<","<<positionSouris.y<<")"<<endl;
                                  	}
                                  	else if (sf::Mouse::isButtonPressed(sf::Mouse::Right))
                                  	{
                                  		std::cout<<"bouton Droit de la souris appuye"<<endl;
                                  	}
                                  }
                                  //======================================================================
                                  
                                  /**
                                   * chargement de la police
                                   **/
                                  void chargerPolice()
                                  {
                                  
                                  	// Chargement à partir d'un fichier sur le disque
                                  	if ( !font.loadFromFile("font/arial.ttf") )
                                  	{
                                  		// Traitement de l'erreur
                                  		std::cout<<" une erreur est survenue lors du chargement du fichier police "<<endl;
                                  	}
                                  	
                                  	//text.setRotation(45);
                                      text.setColor(sf::Color(255,55,255));
                                      text.setPosition(10,10);
                                  }
                                  
                                  
                                  /**
                                   * fonction de creation de la fenetre
                                   **/
                                  void fenetre_win()
                                  {
                                  	//instanciation de l'objet fenetre
                                  	window.create(sf::VideoMode(900, 700), " SIMULATEUR ASCENCEUR " , Style::Titlebar | Style::Resize | Style::Close);
                                  	// positionner la fenetre
                                  	window.setPosition(sf::Vector2i(180,0));
                                  	// definir la taille de la fenetre (facultatif et au choix)
                                  	window.setSize(sf::Vector2u(900,700));
                                  	//
                                  	window.setVerticalSyncEnabled(true);
                                  	// Limiter le nombre d'images par seconde (facultatif)
                                  	window.setFramerateLimit(60);
                                  	//===========================================
                                  	std::cout<<"la fenetre est bien ouverte !"<<endl;
                                  		//break;
                                  }
                                  //======================================================================
                                  
                                  /* Fonction consstruction de l'immeuble*/
                                  

                                  j'aimerai que quelqu'un essaye de le corriger svp et me dise pourquoi le bonhomme n'en resort pas de l'ascenseur

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  p_pivot
                                    3 janvier 2019 à 12:27:24

                                    On n'a pas tout le code (Classe Etage ? etc...) mais surtout, vous n'avez pas appliqué nos conseils.

                                    Vous mélangez l'affichage et les règles "métier", ça rend le code peu claire, des valeurs magiques dans tous les coins, utilisation de VLA (n'existant pas en C++ standard et maintenant obsolète en C), de l'allocation dynamique en-veux-tu-en-voilà, de variables globales, etc...

                                    Pour votre question de blocage, il vous dit quoi le débogueur, en pas à pas ?

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                                      5 janvier 2019 à 22:26:05

                                      EN effet ce sont ces trois fichiers la qui constituent le code , certains fichiers ont ete inclus juste pour des test et j'ai oublier de les retirer apres et le personnage est une sprite 4*4, la pluspart de mes images sont en .tga un format qui conserve la transparence et la plateforme ne supporte ces fichiers comment puis je vous faire part de ces dernieres?

                                      pour la classe etages c'est juste un nom et il faut aussi comprendre mon code c'est de la jonglerie pure, mais en bref le probleme est au niveau de la  definition de la trajectoire complete du personnage,

                                      le programme compile et fonctionne bien mais concernant la methode que vous m'avez apprise je l'appliquerai en entrainnement pour bien comprendre car le temps

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      p_pivot
                                        7 janvier 2019 à 14:12:04

                                        >le programme compile et fonctionne bien

                                        On serait pas ici si c'était le cas. :-°

                                        Vous ne nous avez pas suivi, votre code est compliqué, on va pas faire votre travail.

                                        Utilisez le débogueur pour voir où votre code dysfonctionne.

                                        Vous avez fait un très mauvais calcul avec votre "temps", maintenant, vous êtes en train de le perdre dans du déboguing. C'est le métier qui rentre : ne pas partir bille en tête.

                                        Votre code ne compile pas avec un compilateur correctement configuré, on va pas niquer nos environnement juste parce que vous ne voulez pas utiliser un débogueur.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                                        SFML et C++

                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                        • Editeur
                                        • Markdown