IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SFML Discussion :

Analyse de code


Sujet :

SFML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 27
    Par défaut Analyse de code
    Bonjour,

    Je souhaiterais avoir votre "expertise" sur ce code que j'ai fait, je sais que certaines choses doivent-être immonde, mais je souhaite m'améliorer. Si je viens poster ces juste qu'à mon petit niveau d'avancement, le code me parait déjà très lourd et très peu maintenable, donc je voudrais des conseils. Je remercie d'avance tous ceux qui auront pris la peine de m'aider.


    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    #include <cstdlib>
    #include <iostream>
    #include <SFML/Graphics.hpp>
    #include <unistd.h>
    #include <list>
     
     
    using namespace sf;
    using namespace std;
    #include <SFML/Graphics.hpp>
    #include "Carte.h"
    #include "personnage.h"
    #include "Selection.h"
     
     
     
    int main()
    {
        sf::RenderWindow window(sf::VideoMode(500, 500), "Test 1 ",sf::Style::Fullscreen);
        sf::RectangleShape rectangle;
        Carte CarteJeu;
     
        rectangle.setOutlineThickness(1);
        rectangle.setOutlineColor(sf::Color::Blue);
        rectangle.setFillColor(sf::Color(0, 0, 255, 64));
     
        int posOriginelSelectX = 0,posOriginelSelectY = 0,originDecalageX = 0,diffPosXDecalage=0;
        bool isDragging = false;
     
        window.setActive(false); // Désactive context opengl
     
        list<Personnage> listPerso;
     
        for (int i=0;i<1;i++)
        {
            listPerso.push_back(Personnage (350,250,1,100,150) );/*
            listPerso.push_back(Personnage (300,250,1,100,150) );
            listPerso.push_back(Personnage (250,250,1,100,150) );
            listPerso.push_back(Personnage (200,250,1,100,150) );
            listPerso.push_back(Personnage (150,250,1,100,150) );
            listPerso.push_back(Personnage (100,250,1,100,150) );*/
        }
     
     
        cout<<listPerso.size();
     
     
        window.setFramerateLimit(50);
     
     
        originDecalageX = CarteJeu.GetPosDecalageX();
     
        while (window.isOpen())
        {
     
     
            sf::Vector2i localPosition = sf::Mouse::getPosition(window);
     
            sf::Event event;
     
    /*
            diffPosXDecalage = 0;
            diffPosXDecalage = CarteJeu.GetPosDecalageX()-originDecalageX;
     
     
            list<Personnage>::iterator p = listPerso.begin();
            while(p != listPerso.end()) {
                p->SetX(diffPosXDecalage);
                p++;
            }
     
     
            originDecalageX = CarteJeu.GetPosDecalageX();*/
     
            while (window.pollEvent(event))
            {
     
     
                if (event.type == sf::Event::Closed)
                {
                    window.close();
                }
     
     
                if (event.key.code == sf::Keyboard::Escape)
                {
                    window.close();
                }
     
                if (event.key.code == sf::Keyboard::Down)
                {
                    CarteJeu.Down();
                }
     
                if (event.key.code == sf::Keyboard::Up)
                {
                    CarteJeu.Up();
                }
                if (event.key.code == sf::Keyboard::Left)
                {
                    CarteJeu.Left();
                }
     
                if (event.key.code == sf::Keyboard::Right)
                {
                    CarteJeu.Right();
                }
     
     
     
     
                Mouse::Button button = event.mouseButton.button;
     
     
     
                int coordSourisX(event.mouseButton.x);
                int coordSourisY(event.mouseButton.y);
     
     
                if (event.type == sf::Event::Closed)
                {
                    window.close();
                }
     
                if (event.key.code == sf::Keyboard::Escape)
                {
                    window.close();
                }
     
     
     
              if (event.type == sf::Event::MouseButtonPressed)
              {
     
                posOriginelSelectX = localPosition.x;
                posOriginelSelectY = localPosition.y;
                rectangle.setPosition(posOriginelSelectX, posOriginelSelectY);
     
     
                isDragging = true;
              }
     
                if (event.type == sf::Event::MouseButtonReleased)
                {
                    coordSourisX=event.mouseButton.x;
                    coordSourisY=event.mouseButton.y;
     
                    list<Personnage>::iterator p = listPerso.begin();
                    while(p != listPerso.end()) {
     
     
                        p->isInside(posOriginelSelectX,posOriginelSelectY,coordSourisX,coordSourisY);
                        p->draw(window);
                        p++;
                    }
     
                    isDragging = false;
     
                    if(button == Mouse::Right)
                    {
     
                        list<Personnage>::iterator p = listPerso.begin();
     
                        while(p != listPerso.end()) {
                            if(p->getFocus()== 1 )
                            {
                                coordSourisX=event.mouseButton.x;
                                coordSourisY=event.mouseButton.y;
     
                                p->setObjectifDefinie(coordSourisX,coordSourisY);
                                p->draw(window);
                                p++;
     
                            }
                            else
                            {
                                cout << "pas objet focus ";
                                p++;
                            }
     
                        }
                    }
     
                }
     
            }
     
     
     
            window.clear(sf::Color::Black);
     
            CarteJeu.draw(window);
     
     
            list<Personnage>::iterator p = listPerso.begin();
            while(p != listPerso.end()) {
     
                p->TrouverObjectif();
                p->draw(window);
                p++;
            }
     
            if (isDragging)
            {
     
              rectangle.setSize(sf::Vector2f(localPosition.x - posOriginelSelectX,
                                             localPosition.y - posOriginelSelectY));
              window.draw(rectangle);
            }
     
     
     
            window.display();
     
     
     
     
        }
     
     
     
        return 0;
    }
    carte.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #pragma once
    #include "SFML/Graphics.hpp"
     
     
    using namespace sf;
    using namespace std;
     
    class Carte
    {
        public:
        Carte();
        ~Carte();
        void draw(sf::RenderWindow &window );
        int setPosDecalageX(int decalageX);
        int setPosDecalageY(int decalageY);
        int GetPosDecalageX();
        int GetPosDecalageY();
     
        void Up();
        void Down();
        void Right();
        void Left();
     
        private:
        int tailleTuile = 10, maxX, maxY,maxHauteur,maxLargeur,posDecalageX=0,posDecalageY=0;
        int  TableauCarte[500][500];
     
     
     
        sf::Texture TTile1,TTile2,TTile3;
        sf::Sprite ImageTile1,ImageTile2,ImageTile3;
        sf::View Vu;
     
     
     
    };
    carte.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    #include <stdlib.h>
    #include <iostream>
    #include "Carte.h"
    #include <time.h>
    #include <fstream>
     
    using namespace std;
     
     
    Carte::Carte()
    {
     
     
     
     
     
     
        maxHauteur = sf::VideoMode::getDesktopMode().width;
        maxLargeur = sf::VideoMode::getDesktopMode().height;
        maxX = maxHauteur/tailleTuile;
        maxY = maxLargeur/tailleTuile;
        TableauCarte[maxX][maxY];
     
     
     
        if(!TTile1.loadFromFile("Tile.png"))
        {
            cout << "Impossible de charger la tile 1";
        }
     
        TTile1.setSmooth(true); //Active l'antialiasigue
        ImageTile1.setTexture(TTile1);
     
        if(!TTile2.loadFromFile("Tile2.png"))
        {
            cout << "Impossible de charger la tile 2";
        }
     
        TTile2.setSmooth(true); //Active l'antialiasigue
        ImageTile2.setTexture(TTile2);
     
        if(!TTile3.loadFromFile("Tile3.png"))
        {
            cout << "Impossible de charger la tile 3";
        }
     
        TTile3.setSmooth(true); //Active l'antialiasigue
        ImageTile3.setTexture(TTile3);
     
     
     
     
     
        // Lecture map
        ifstream fichier("map2.txt", ios::in);
        string ligne,s,ligne2;
        int p=0,k=0,i=0;
     
        if(fichier)
        {
            while (!fichier.eof())
            {
     
                getline(fichier,ligne);
     
                for(int i=0;i<ligne.length();i++)
                {
     
     
                    if(ligne[i]=='^')
                    {
                        p++;
                        k=-1;
                    }
                    else
                    {
                        TableauCarte[k][p] = ligne[i];
                        cout <<ligne[i];
     
                    }
                    k++;
     
                }
     
            }
        }
        else
        {
            cout << "Pas moyen de charger la map";
        }
        fichier.close();
     
     
     
     
     
     
     
     
    }
     
     
    Carte::~Carte()
    {
     
    }
     
    void Carte::draw(sf::RenderWindow &window)
    {
     
        for (int i=0; i<maxX; i++){
     
            for (int j=0; j<maxY; j++){
     
                if(TableauCarte[i][j]=='a')
                {
                    ImageTile1.setPosition(180*i+posDecalageX,178*j+posDecalageY);
                    ImageTile1.setScale(0.3,0.3);
                    window.draw(ImageTile1);
     
                }
                if(TableauCarte[i][j]=='b')
                {
                    ImageTile1.setPosition(180*i+posDecalageX+178,178*j+posDecalageY);
                    ImageTile1.setScale(0.3,0.3);
                    ImageTile1.setRotation(90);
                    window.draw(ImageTile1);
                    ImageTile1.setRotation(0);
                    ImageTile1.setPosition(0,0);
     
                }
                if(TableauCarte[i][j]=='c')
                {
                    ImageTile2.setPosition(180*i+posDecalageX,178*j+posDecalageY);
                    ImageTile2.setScale(0.3,0.3);
                    window.draw(ImageTile2);
                    ImageTile2.setPosition(0,0);
                }
     
                if(TableauCarte[i][j]=='d')
                {
                    ImageTile2.setRotation(90);
                    ImageTile2.setPosition(180*i+posDecalageX+178,178*j+posDecalageY);
                    ImageTile2.setScale(0.3,0.3);
                    window.draw(ImageTile2);
                    ImageTile2.setRotation(0);
                    ImageTile2.setPosition(0,0);
                }
                if(TableauCarte[i][j]=='e')
                {
                    ImageTile2.setPosition(180*i+posDecalageX+178,178*j+posDecalageY+178);
                    ImageTile2.setScale(0.3,0.3);
                    ImageTile2.setRotation(180);
                    window.draw(ImageTile2);
                    ImageTile2.setRotation(0);
     
     
                }
                if(TableauCarte[i][j]=='f')
                {
                    ImageTile2.setPosition(180*i+posDecalageX,178*j+posDecalageY+178);
                    ImageTile2.setScale(0.3,0.3);
                    ImageTile2.setRotation(270);
                    window.draw(ImageTile2);
                    ImageTile2.setRotation(0);
                    ImageTile2.setPosition(0,0);
                }
                if(TableauCarte[i][j]=='g')
                {
                    ImageTile3.setPosition(180*i+posDecalageX,178*j+posDecalageY+178);
                    ImageTile3.setScale(0.3,0.3);
                    ImageTile3.setRotation(270);
                    window.draw(ImageTile3);
                    ImageTile3.setRotation(0);
                    ImageTile3.setPosition(0,0);
                }
     
            }
        }
     
     
     
     
     
     
    }
     
    int Carte::GetPosDecalageX()
    {
        return posDecalageX;
    }
    int Carte::GetPosDecalageY()
    {
        return posDecalageX;
    }
     
    int Carte::setPosDecalageX(int decalageX)
    {
        posDecalageX=decalageX;
    }
    int Carte::setPosDecalageY(int decalageY)
    {
        posDecalageY=decalageY;
    }
     
     
     
    void Carte::Up()
    {
        setPosDecalageY(posDecalageY=posDecalageY+10);
    }
     
    void Carte::Down()
    {
        setPosDecalageY(posDecalageY=posDecalageY-10);
    }
     
    void Carte::Right()
    {
        setPosDecalageX(posDecalageX=posDecalageX-10);
    }
     
    void Carte::Left()
    {
        setPosDecalageX(posDecalageX=posDecalageX+10);
    }
    personnage.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #pragma once
    #include "SFML/Graphics.hpp"
     
     
    using namespace sf;
    using namespace std;
     
    class Personnage
    {
        public:
        Personnage( int posX, int posY,int Image,int tailleX,int tailleY);
        ~Personnage();
        int GetPosX();
        int GetPosY();
        int TrouverObjectif();
        int setObjectifDefinie(int posObjectifX, int posObjectifY);
        void SetX(float AddX);
        void SetY(float AddY);
        void SetFocus(int newFocus);
        void draw(sf::RenderWindow &window );
        int isInside(int posOriginelSelectX,int posOriginelSelectY,int coordSourisX, int coordSourisY);
        int getFocus();
        int coordonneFind(int coordX, int coordY);
     
     
        private:
        float posX, posY, Image;
        int ObjectifX, ObjectifY, tailleX,tailleY;
        int focus =0;
     
        sf::CircleShape Focus;
        sf::Texture TP1;
        sf::Sprite P1;
     
    };
    carte.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    #include <stdlib.h>
    #include <iostream>
    #include "Carte.h"
    #include <time.h>
    #include <fstream>
     
    using namespace std;
     
     
    Carte::Carte()
    {
     
     
     
     
     
     
        maxHauteur = sf::VideoMode::getDesktopMode().width;
        maxLargeur = sf::VideoMode::getDesktopMode().height;
        maxX = maxHauteur/tailleTuile;
        maxY = maxLargeur/tailleTuile;
        TableauCarte[maxX][maxY];
     
     
     
        if(!TTile1.loadFromFile("Tile.png"))
        {
            cout << "Impossible de charger la tile 1";
        }
     
        TTile1.setSmooth(true); //Active l'antialiasigue
        ImageTile1.setTexture(TTile1);
     
        if(!TTile2.loadFromFile("Tile2.png"))
        {
            cout << "Impossible de charger la tile 2";
        }
     
        TTile2.setSmooth(true); //Active l'antialiasigue
        ImageTile2.setTexture(TTile2);
     
        if(!TTile3.loadFromFile("Tile3.png"))
        {
            cout << "Impossible de charger la tile 3";
        }
     
        TTile3.setSmooth(true); //Active l'antialiasigue
        ImageTile3.setTexture(TTile3);
     
     
     
     
     
        // Lecture map
        ifstream fichier("map2.txt", ios::in);
        string ligne,s,ligne2;
        int p=0,k=0,i=0;
     
        if(fichier)
        {
            while (!fichier.eof())
            {
     
                getline(fichier,ligne);
     
                for(int i=0;i<ligne.length();i++)
                {
     
     
                    if(ligne[i]=='^')
                    {
                        p++;
                        k=-1;
                    }
                    else
                    {
                        TableauCarte[k][p] = ligne[i];
                        cout <<ligne[i];
     
                    }
                    k++;
     
                }
     
            }
        }
        else
        {
            cout << "Pas moyen de charger la map";
        }
        fichier.close();
     
     
     
     
     
     
     
     
    }
     
     
    Carte::~Carte()
    {
     
    }
     
    void Carte::draw(sf::RenderWindow &window)
    {
     
        for (int i=0; i<maxX; i++){
     
            for (int j=0; j<maxY; j++){
     
                if(TableauCarte[i][j]=='a')
                {
                    ImageTile1.setPosition(180*i+posDecalageX,178*j+posDecalageY);
                    ImageTile1.setScale(0.3,0.3);
                    window.draw(ImageTile1);
     
                }
                if(TableauCarte[i][j]=='b')
                {
                    ImageTile1.setPosition(180*i+posDecalageX+178,178*j+posDecalageY);
                    ImageTile1.setScale(0.3,0.3);
                    ImageTile1.setRotation(90);
                    window.draw(ImageTile1);
                    ImageTile1.setRotation(0);
                    ImageTile1.setPosition(0,0);
     
                }
                if(TableauCarte[i][j]=='c')
                {
                    ImageTile2.setPosition(180*i+posDecalageX,178*j+posDecalageY);
                    ImageTile2.setScale(0.3,0.3);
                    window.draw(ImageTile2);
                    ImageTile2.setPosition(0,0);
                }
     
                if(TableauCarte[i][j]=='d')
                {
                    ImageTile2.setRotation(90);
                    ImageTile2.setPosition(180*i+posDecalageX+178,178*j+posDecalageY);
                    ImageTile2.setScale(0.3,0.3);
                    window.draw(ImageTile2);
                    ImageTile2.setRotation(0);
                    ImageTile2.setPosition(0,0);
                }
                if(TableauCarte[i][j]=='e')
                {
                    ImageTile2.setPosition(180*i+posDecalageX+178,178*j+posDecalageY+178);
                    ImageTile2.setScale(0.3,0.3);
                    ImageTile2.setRotation(180);
                    window.draw(ImageTile2);
                    ImageTile2.setRotation(0);
     
     
                }
                if(TableauCarte[i][j]=='f')
                {
                    ImageTile2.setPosition(180*i+posDecalageX,178*j+posDecalageY+178);
                    ImageTile2.setScale(0.3,0.3);
                    ImageTile2.setRotation(270);
                    window.draw(ImageTile2);
                    ImageTile2.setRotation(0);
                    ImageTile2.setPosition(0,0);
                }
                if(TableauCarte[i][j]=='g')
                {
                    ImageTile3.setPosition(180*i+posDecalageX,178*j+posDecalageY+178);
                    ImageTile3.setScale(0.3,0.3);
                    ImageTile3.setRotation(270);
                    window.draw(ImageTile3);
                    ImageTile3.setRotation(0);
                    ImageTile3.setPosition(0,0);
                }
     
            }
        }
     
     
     
     
     
     
    }
     
    int Carte::GetPosDecalageX()
    {
        return posDecalageX;
    }
    int Carte::GetPosDecalageY()
    {
        return posDecalageX;
    }
     
    int Carte::setPosDecalageX(int decalageX)
    {
        posDecalageX=decalageX;
    }
    int Carte::setPosDecalageY(int decalageY)
    {
        posDecalageY=decalageY;
    }
     
     
     
    void Carte::Up()
    {
        setPosDecalageY(posDecalageY=posDecalageY+10);
    }
     
    void Carte::Down()
    {
        setPosDecalageY(posDecalageY=posDecalageY-10);
    }
     
    void Carte::Right()
    {
        setPosDecalageX(posDecalageX=posDecalageX-10);
    }
     
    void Carte::Left()
    {
        setPosDecalageX(posDecalageX=posDecalageX+10);
    }
    selection.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    #include "SFML/Graphics.hpp"
     
    using namespace sf;
    using namespace std;
     
     
    class SelectionRectangle
    {
        public:
        SelectionRectangle( );
        ~SelectionRectangle();
        void run(sf::RenderWindow &window);
        void Draw(sf::RenderWindow &window);
     
     
     
        private:
        RectangleShape rectangleSelect;
        int posOriginelSelectX = 0,posOriginelSelectY = 0;
        bool isDragging = false;
        sf::Event event;
     
     
     
    };
    Selection.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    #include <stdlib.h>
    #include <iostream>
    #include "Selection.h"
    #include <time.h>
     
     
    SelectionRectangle::SelectionRectangle( )
    {
     
     
      rectangleSelect.setOutlineThickness(1);
      rectangleSelect.setOutlineColor(sf::Color::Blue);
      rectangleSelect.setFillColor(sf::Color(0, 0, 255, 64));
     
     
     
    }
    SelectionRectangle::~SelectionRectangle()
    {
     
    }
     
    void SelectionRectangle::run(sf::RenderWindow &window)
    {
     
        while (window.pollEvent(event))
        {
             sf::Vector2i localPosition = sf::Mouse::getPosition(window);
     
            if (event.type == sf::Event::Closed)
            {
                window.close();
            }
     
            if (event.type == sf::Event::MouseButtonPressed)
            {
     
                posOriginelSelectX = localPosition.x;
                posOriginelSelectY = localPosition.y;
                rectangleSelect.setPosition(posOriginelSelectX, posOriginelSelectY);
     
                isDragging = true;
            }
     
            if (event.type == sf::Event::MouseButtonReleased)
            {
                isDragging = false;
     
            }
     
        }
     
        if (isDragging)
        {
            sf::Vector2i localPosition = sf::Mouse::getPosition(window);
            rectangleSelect.setSize(sf::Vector2f(localPosition.x - posOriginelSelectX,
                                                localPosition.y - posOriginelSelectY));
            window.draw(rectangleSelect);
        }
    }
    Après, j'aimerais avoir un peu plus de précision pour savoir comment bien gérer les objets créer, et où placer les boucles évenementiels ainsi que comment bien gérer plusieurs objet en parralèle pour pouvoir faire potentielement de la gestion de collision. Et si vous avez tout lu et que vous es arrivé là, merci .

    Cordialement Spiritus,

  2. #2
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut
    Salut, voici ce que j'ai pu voir:

    main.cpp:
    _ Tu fais un using namespace sf, alors que tu le précise dans tout le main, donc le using est inutile.
    _ Ce bout de code apparait 2 fois dans ta gestion d'évennement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (event.type == sf::Event::Closed)
                {
                    window.close();
                }
     
                if (event.key.code == sf::Keyboard::Escape)
                {
                    window.close();
                }
    _ Ce bout de code est inutile, il faut que tu fasse l'initialisation dans le bout de code correspondant à un evennement de souris (ce que tu fais après donc double initialisation):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Mouse::Button button = event.mouseButton.button;
                int coordSourisX(event.mouseButton.x);
                int coordSourisY(event.mouseButton.y);
    _ à la fin de ton main, tu ne détruit pas tes objet, tu as donc des fuites de mémoires.

    Carte.h:
    _ Meme remarque pour le using namespace

    CArte.cpp:
    _ Dans le constructeur, cette ligne induira un sgfault si maxX ou maxY est supérieur à 500, de plus cette ligne n'effectue rien, que voulais-tu faire?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        TableauCarte[maxX][maxY];
    _ Ce bout de code est immonde, tu affectes dans le passage d'argument, puis re-affecte dans la fonction setPosDecalageY, une des deux affectation est inutile, et peu induire des erreurs de lecture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       setPosDecalageY(posDecalageY=posDecalageY+10);
    Personnage.h:
    _ Meme remarque pour le using namespace

    Personnage.cpp:
    il est passé ou? Oo.

    SelectionRectangle n'est utilisé nul part, est-ce normal?

    Et enfin d'une manière général:
    _ Tu n'as pas mis de protection de multi-inclusion dans tes header:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifndef NOM_HH
    #define NOM_HH
     
    ....
     
    #endif
    _ Essaye d'améliorer l'indentation de ton code, ça simplifiera sa lecture.
    _ Rajoute des commentaire pour la même raison.
    _ Supprime, les blocs de blanc, c'est inutile, par contre, laisse un espace blanc pour séparer les unité de traitement, pour la compréhension du code.
    _ Ton main est beaucoup trop long, et effectue trop de traitement.
    _ La gestion des événement devrait être exporter dans une fonction.
    _ Quand tu compile, rajoute les option -WAll -WError, et corrige tout les warning que tu pourrais avoir, ça t'évitera des problèmes.
    _ Rajoute une breve description de ce que fais ton programme, car on ne pourra pas corriger le fonctionnel si on ne sait pas ce que doit faire ton programme .

    Voila c'est à peu près tout ce que j'ai vu .

Discussions similaires

  1. Outil d'analyse de code
    Par Bloon dans le forum Outils
    Réponses: 8
    Dernier message: 07/08/2007, 09h04
  2. Analyse de code
    Par ecocentric dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 11/02/2005, 01h09
  3. [WSAD 5 ] - Analyse de code
    Par nicoswiss dans le forum Eclipse Java
    Réponses: 8
    Dernier message: 13/08/2004, 10h21
  4. [ Code ] Analyse de code - Attribut Inutile
    Par geegee dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 19/05/2004, 09h07
  5. Cherche lien info... sur l'analyse du code
    Par Alec6 dans le forum Qualimétrie
    Réponses: 3
    Dernier message: 03/03/2004, 14h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo