Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:



+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Besoin d'aide Projet Le Jeu de la Vie C++ SVP

  1. Ninikills

    Date d'inscription
    février 2017
    Âge
    22
    Messages
    1

    Besoin d'aide Projet Le Jeu de la Vie C++ SVP

    Bonjour , je suis en train de programmer un jeu de la vie, mais je me heurte a un problème lorsque je veux qu'un cellule morte devienne vivante et change de couleur lorsque je clic sur celle ci.*
    J'utilise SFML pour la fenêtre du jeu.
    Le code est assez long mais plutôt simple. j'espère que quelqu'un me donnera un coup de main je suis un peu desesperé j'imagine que cela doit être un problème assez simple auquel je n'ai pas du tout penser.*
    En gros dans mon main je detecte l'event mousebutton left is pressed, et j'utilise une de mes méthodes pour que la cellule sous le curseur passe de la mort a la vie, elle est aussi sensé passé de la couleur blanche a la couleur noire, or rien de ceci ne se passe.

    Il est ecrit ci dessous.
    Merci d'avance si vous décidez de vous y arrêter pour m'aider.


    Main
    #include <iostream>
    #include <SFML/Graphics.hpp>
    #include <SFML/Window.hpp>
    #include "Grid.h"
    *
    using namespace std;
    *
    *
    int main()
    {
    ****sf::RenderWindow window(sf::VideoMode(800,600,3 2),"GOL",sf::Style::Close);
    ****window.setFramerateLimit(1 0);
    *
    ****sf::Event e;
    *
    ****Grid grid(800,600);
    *
    *
    ****const int UPDATING=0, MODIFYING =1;
    ****int state=MODIFYING;
    *
    ****while(window.isOpen())
    ****{
    ********while(window.pollEvent (e))
    ********{
    ************if(e.type == sf::Event::Closed)
    ************{
    ****************window.close() ;
    ************}
    *
    ************if(e.type == sf::Event::KeyPressed)
    ************{
    ****************switch(e.key.c ode)
    ****************{
    ********************case sf::Keyboard::Escape:
    ************************window .close();
    ************************break;
    *
    ********************default:br eak;
    ****************}
    ************}
    *
    ************if(e.type == sf::Event::MouseButtonPressed)
    ************{
    ****************if(e.mouseButt on.button== sf::Mouse::Left)
    ****************{
    ********************int x;
    ********************int y;
    *
    ********************x=sf::Mous e::getPosition(window).x/20;
    ********************cout<<x;
    ********************y=sf::Mous e::getPosition(window).y/20;
    *
    ********************if(x >= 0 && y >= 0 && x <=39 && y <=29)
    ********************{
    ************************grid.M ettreCellA(!grid.cellVivanteA( x,y),x,y);
    ************************cout<< grid.cellVivanteA(x,y);
    ************************cout<< "hey";
    ************************
    ********************}
    *
    *
    ****************}
    ************}
    *
    *
    ********}
    *********
    *********
    *
    ********if(state==UPDATING)
    ********{
    ************grid.NextGeneratio n();
    ********}
    *
    *
    ********window.clear(sf::Color ::White);
    ********grid.draw(window);
    ********window.display();
    *
    *
    *
    *
    ****}
    *
    *
    ****return 0;
    }

    Cell.h(classe)
    #include <iostream>
    #include <SFML/Graphics.hpp>
    *
    *
    #define CELL
    #ifdef* CELL
    *
    using namespace sf;
    *
    class Cell
    {
    public:
    ********Cell();
    ********Cell(bool alive,int x,int y);
    ********bool cellVivante();
    ********void setCellstate(bool alive);
    ********void draw(sf::RenderWindow &window);
    ********sf::RectangleShape* getshape();
    *
    private:
    ****sf::RectangleShape m_shape;
    ****bool m_alive;
    *
    *
    };
    #endif // CELL

    Grid.h(classe)
    #define GRID
    #ifdef* GRID
    #include <iostream>
    #include <SFML/Graphics.hpp>
    #include "Cell.h"
    #include <vector>
    *
    *
    class Grid
    {
    *
    protected:
    *********int m_largeur;
    *********int m_hauteur;
    *********Cell m_cells[40][30];
    *
    public:
    ********Grid();
    ********Grid( int largeur, int hauteur);
    ********bool cellVivanteA(int x,int y);
    ********void MettreCellA(bool alive, int x,int y);
    ********void NextGeneration();
    ********void draw(sf::RenderWindow &window); //dessiner la fenetre
    *
    };
    #endif // GRID



    Cell.cpp*
    #include <iostream>
    #include "Cell.h"
    #include <SFML/Graphics.hpp>
    *
    using namespace std;
    *
    Cell::Cell()
    {
    *
    }
    *
    Cell::Cell(bool alive, int x , int y)
    {
    ****this->m_shape = sf::RectangleShape(sf::Vector2 f(20,20));
    ****this->m_shape.setPosition(x,y);
    ****this->m_alive=alive;
    *
    ****if(alive)
    ****{
    ********this->m_shape.setFillColor(sf::Colo r::Black);
    *
    ****}
    ****else
    ****{
    ********this->m_shape.setFillColor(sf::Colo r::White);
    ****}
    *
    *
    *
    }
    *
    bool Cell::cellVivante()
    {
    ****return m_alive;
    }
    *
    void Cell::setCellstate(bool alive)
    {
    ****if(alive)
    ****{
    ********this->m_shape.setFillColor(sf::Colo r::Black);
    ****}
    ****else
    ****{
    ********this->m_shape.setFillColor(sf::Colo r::White);
    ****}
    }
    *
    sf::RectangleShape* Cell::getshape()
    {
    ****return &m_shape;
    }
    *
    void Cell::draw(sf::RenderWindow &window)
    {
    ****window.draw(m_shape);
    }




    Grid.cpp
    #include <iostream>
    #include "SFML/Graphics.hpp"
    #include "Grid.h"
    *
    using namespace std;
    *
    Grid::Grid(int largeur, int hauteur )
    {
    *
    *****int x,y;
    *****for(x=0;x<m_largeur/20;x++)
    *****{
    *********for(y=0;y<m_hauteur/20;y++)
    *********{
    ************m_cells[x][y]=Cell(false,x,y);
    *********}
    *****}
    *
    *****this->m_hauteur=m_hauteur/20;
    *****this->m_largeur=m_largeur/20;
    }
    *
    bool Grid::cellVivanteA(int x,int y)
    {
    ***return m_cells[x][y].cellVivante();
    *
    *
    }
    *
    void Grid::MettreCellA(bool alive, int x ,int y)
    {
    ****m_cells[x][y].setCellstate(alive);
    *
    }
    *
    void Grid::draw(sf::RenderWindow &window)
    {
    ****int x,y;
    ****for(x=0;x<m_largeur;x++)
    ****{
    ********for(y=0;y<m_hauteur;y+ +)
    ********{
    ************m_cells[x][y].draw(window);
    ********}
    ****}
    }
    *
    void Grid::NextGeneration()
    {
    *
    }

    END

    -----

     


    • Publicité



  2. pm42

    Date d'inscription
    juillet 2015
    Messages
    4 178

    Re : Besoin d'aide Projet Le Jeu de la Vie C++ SVP

    La 1ère chose à faire est d'apprendre à utiliser la balise CODE du forum en lisant la doc puis de poster ton programme en l'utilisant.
    Là avec les *** c'est illisible et si quelqu'un voulait le faire tourner, il devrait les virer...
     

  3. JPL

    Date d'inscription
    septembre 2003
    Messages
    68 423

    Re : Besoin d'aide Projet Le Jeu de la Vie C++ SVP

    Donc (je voulais te le dire de suite mais j’ai été interrompu) poste le code avec les indentations normales et encadre-le avec [Code]...[/code], ce qui correspond à l’icône # dans l’éditeur en mode avancé.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac
     

  4. Chanur

    Date d'inscription
    septembre 2011
    Messages
    1 165

    Re : Besoin d'aide Projet Le Jeu de la Vie C++ SVP

    Je plussoie pm42 et Jack. Je n'ai pas essayé de lire en détail ton code.
    Mais je l'ai quand même un peu lu. Le problème vient que la méthode Cell::setCellstate() ne modifie pas m_alive.

    Cela dit, il y a plusieurs choses qui m'interpellent dans ton code :

    - il faut choisir entre français et anglais : tu as un attribut Cell::m_alive et une méthode Cell::cellVivante()
    le lecteur est tenu de comprendre le français ET l'anglais pour te lire.
    tu peux choisir l'anglais, pour que ton code soit lisible par tout le monde ou le français, pour que ce soit plus clair pour toi et pour faire d'un coup d'oeil la différence entre une fonction find_file (système) et une fonction chercher_fichier (perso). Peu importe, mais il faut choisir.

    - il faut définir les notions. Tu as une méthode Cell::setCellstate() sans dire nulle part ce qu'est l'état en question, et tu as dans le main() une variable state. Dans le premier cas "state" désigne le fait, pour une cellule d'être "alive" ou pas, dans le deuxième cas le fait que ton automate soit dans l'état UPDATING ou MODIFYING. Rien à voir. Si le double sens est inévitable (et ça ne semble pas le cas ici), il faut au minimum un commentaire pour l'expliquer.

    - quand une donnée est codée de différentes façons (par exemple ici m_alive qui est aussi codée comme couleur de remplissage d'un rectangle), il faut le dire explicitement et veiller à ce qu'il soit impossible que les deux diffèrent. C'est LE but de la méthode Cell::setCellstate(), sauf que justement elle ne le fait pas ...

    - il n'y a aucun commentaire ...
    il faut écrire un programme de telle façon qu'il soit lisible par quelqu'un qui connaisse à peine les rudiments du langage et rien du tout au problème traité : il faut TOUT expliquer.
    Dernière modification par Chanur ; 27/12/2017 à 21h19.
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.
     

  5. Jack

    Date d'inscription
    avril 2003
    Localisation
    Metz
    Messages
    16 226

    Re : Besoin d'aide Projet Le Jeu de la Vie C++ SVP

    Citation Envoyé par Chanur Voir le message
    Je plussoie pm42 et Jack.
    Rendons à César ce qui appartient à César: il s'agissait de JPL et non de moi
     


    • Publicité



  6. JPL

    Date d'inscription
    septembre 2003
    Messages
    68 423

    Re : Besoin d'aide Projet Le Jeu de la Vie C++ SVP

    Je vais changer de pseudo : appelez-moi César !
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac
     

  7. Jack

    Date d'inscription
    avril 2003
    Localisation
    Metz
    Messages
    16 226

    Re : Besoin d'aide Projet Le Jeu de la Vie C++ SVP

    Tu me fends le cœur.
     

  8. Chanur

    Date d'inscription
    septembre 2011
    Messages
    1 165

    Re : Besoin d'aide Projet Le Jeu de la Vie C++ SVP

    Citation Envoyé par Jack Voir le message
    Rendons à César ce qui appartient à César: il s'agissait de JPL et non de moi
    Mes humbles excuses !
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.
     

  9. JPL

    Date d'inscription
    septembre 2003
    Messages
    68 423

    Re : Besoin d'aide Projet Le Jeu de la Vie C++ SVP

    Dans sa grande bonté César les accepte et te pardonne !
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac
     

  10. brhmagupta

    Date d'inscription
    mai 2016
    Localisation
    Île de France
    Âge
    90
    Messages
    129

    Re : Besoin d'aide Projet Le Jeu de la Vie C++ SVP

    Bonjour,
    Voici le jeu de la vie de Conway programmé dans le langage EGO.
    Je crois que les instructions parlent d'elles-mêmes.
    La copie a soudé les labels aux instructions et en plus les a placés entre parenthèses en tête de ligne.

    ·Eff(1)·Pstyle(10)·Pinceau(3)· Rect(0,0,1151,863)·Pstyle(1)·P inceau(15)·DimTab(vie,40,40)·D imTab(inter,50,40)·Police(Aria l,25)[g:=2]
    ·Police(Arial,50)·Pos(280,20)J EU DE LA VIE DE CONWAY
    ·Police(Arial,30)·Pinceau(10)
    ·Objet(regle.tif,100,150,,2)
    ·Brosse(7)·Boite(267,165,877,2 00)
    ·Pinceau(5)·Pos(279,170)Exempl es de passage d'une génération à la suivante
    ·Police(Arial,30)·Pinceau(15)
    ·Pos(100,780)Appuyez sur RETOUR puis créez une société en cliquant sur les cases de votre choix.
    ·Pause(0)
    ·(recom)·Eff(12)·Pstyle(10)·Pi nceau(3)·Rect(0,0,1151,863)·Ps tyle(1)·Pinceau(11)
    ·Pos(180,10)Cliquez sur les cases pour créer une société puis sur la pastille rouge.
    ·DefAxes(155,10,20,-20)
    ·Pinceau(7)
    ·Rect(2,2,38,38)
    [i:=2]
    ·(horizon)·Aig([i],2,38,-90)
    [i:=i+1]
    ·Remonte(38,horizon)
    [i:=2]
    ·(vertical)·Aig(2,[i],38,0) .Aig(a,b,c,d) : Trace un segment de droite d'origine A,b de longueur c et faisant un angle d avec l'horizontale.
    [i:=i+1]
    ·Remonte(38,vertical)
    ·Pstyle(40)·Pinceau(9)
    ·Point(44,20)·Pstyle(1)
    ·(gener)·Inter()
    [x:=ewclicx , y:=ewclicy] Coordonnées x et y du clic souris.
    ·Ptc([x],[y],c)
    ·Si([c=9])·Brosse(12)·Boite(42,18,46,22 )·Saut(debut1)
    ·Si([c=7])·Saut(gener)
    ·Pinceau(11)·Brosse(11)·Disque ([tba(x)+0.5],[tba(y)+0.5],0.3,0.3)
    [vie{tba(x),tba(y)}:=1]
    ·Saut(gener)
    ·(debut1)·Axes(-)·Brosse(12)·Boite(170,8,1100, 40)·Pos(440,10)·Pinceau(10)Cli c souris pour arrêter.·Axes(+)
    ·(debut)
    ·TabCop(vie,inter)
    ·(retour)[i:=2 , j:=2 , autour:=0 , exit:=0]
    ·Evt(fini,2)·Police(Arial,10)· Pstyle(1)
    ·Brosse(12)·Boite(0,1,1,39)
    ·(tourne)
    ·Si([vie{i,j}=1 & vie{i-1,j-1}=1])[exit:=exit+1]
    ·Si([vie{i,j}=1 & vie{i-1,j}=1])[exit:=exit+1]
    ·Si([vie{i,j}=1 & vie{i-1,j+1}=1])[exit:=exit+1]
    ·Si([vie{i,j}=1 & vie{i,j+1}=1])[exit:=exit+1]
    ·Si([vie{i,j}=1 & vie{i,j-1}=1])[exit:=exit+1]
    ·Si([vie{i,j}=1 & vie{i+1,j}=1])[exit:=exit+1]
    ·Si([vie{i,j}=1 & vie{i+1,j-1}=1])[exit:=exit+1]
    ·Si([vie{i,j}=1 & vie{i+1,j+1}=1])[exit:=exit+1]
    ·Si([vie{i,j}=0 & vie{i-1,j-1}=1])[autour:=autour+1]
    ·Si([vie{i,j}=0 & vie{i-1,j}=1])[autour:=autour+1]
    ·Si([vie{i,j}=0 & vie{i-1,j+1}=1])[autour:=autour+1]
    ·Si([vie{i,j}=0 & vie{i,j+1}=1])[autour:=autour+1]
    ·Si([vie{i,j}=0 & vie{i,j-1}=1])[autour:=autour+1]
    ·Si([vie{i,j}=0 & vie{i+1,j}=1])[autour:=autour+1]
    ·Si([vie{i,j}=0 & vie{i+1,j-1}=1])[autour:=autour+1]
    ·Si([vie{i,j}=0 & vie{i+1,j+1}=1])[autour:=autour+1]
    ·Si([autour=3])[vie{i,j}:=2]
    ·Si([(exit<2 | exit>=4) & vie{i,j}=1])[inter{i,j}:=3]
    [exit:=0 , autour:=0]
    [i:=i+1]
    ·Si([i<40])·Saut(tourne)
    [i:=2 , j:=j+1]
    [exit:=0]
    ·Si([j<40])·Saut(tourne)
    [i:=2 , j:=2]
    ·(ajour)
    ·Si([vie{i,j}=2])[vie{i,j}:=1]
    ·Si([inter{i,j}=3])[vie{i,j}:=0]
    [i:=i+1]
    ·Si([i<40])·Saut(ajour)
    [i:=2 , j:=j+1]
    ·Si([j<40])·Saut(ajour)
    [i:=2 , j:=2]
    ·Police(Arial,20)
    ·(ajour1)
    ·Si([vie{i,j}=0])·Pinceau(12)·Brosse(12)·Disqu e([i+0.5],[j+0.5],0.35,0.35)
    ·Si([vie{i,j}=1])·Pinceau(11)·Brosse(11)·Disqu e([i+0.5],[j+0.5],0.3,0.3)
    [i:=i+1]
    ·Si([i<40])·Saut(ajour1)
    [i:=2 , j:=j+1]
    ·Si([j<40])·Saut(ajour1)
    ·(enjamb)
    ·TabR(inter,0)
    ·Axes(-)·Brosse(12)·Boite(470,830,100 0,850)·Pinceau(11)
    ·Police(Arial,25)
    ·Pos(500,830)GENERATION [g]
    [g:=g+1]
    ·Axes(+)
    ·Saut(retour)
    ·(fini)·Axes(-)
    ·Pstyle(40)·Pinceau(9)
    ·Point(100,420)·Pstyle(1)·Poli ce(Arial,30)
    ·Pos(45,480)·Pinceau(15)QUITTE R
    ·Pstyle(40)·Pinceau(10)
    ·Point(1045,420)·Pstyle(1)·Pin ceau(15)
    ·Pos(985,480)NOUVELLE·Pos(1000 ,520)SOCIETE
    ·(pasbon)·Inter()
    ·Ptc([ewclicx],[ewclicy],c)
    ·Si([c=9])·Fin()
    ·Si([c=10])·TabR(inter,0)·TabR(vie,0)[g:=1]·Saut(recom)
    ·Si([c<>9 & c<>10])·Saut(pasbon)
    Dernière modification par brhmagupta ; Aujourd'hui à 16h28.
    Si ta parole est plus forte que le silence, parle, sinon ne parle pas (Euripide)
     

  11. brhmagupta

    Date d'inscription
    mai 2016
    Localisation
    Île de France
    Âge
    90
    Messages
    129

    Re : Besoin d'aide Projet Le Jeu de la Vie C++ SVP

    Voici un exemple fourni par le programme EGO précèdent :
    vie.jpg
    Si ta parole est plus forte que le silence, parle, sinon ne parle pas (Euripide)
     


    • Publicité







Sur le même thème :


    301 Moved Permanently

    301 Moved Permanently


    nginx/1.2.1



 

Discussions similaires

  1. Projet de GPS (Besoin d'aide !)
    Par ELKB dans le forum Physique
    Réponses: 1
    Dernier message: 22/07/2014, 07h02
  2. besoin aide (projet led)
    Par kirou dans le forum Électronique
    Réponses: 14
    Dernier message: 02/02/2013, 16h41
  3. Projet sur le bus CAN ! besoin d'aide
    Par zhiliga dans le forum Électronique
    Réponses: 4
    Dernier message: 05/11/2010, 21h32
  4. besoin d'aide sur un projet
    Par laraki dans le forum Électronique
    Réponses: 2
    Dernier message: 02/03/2008, 03h37