Partage
  • Partager sur Facebook
  • Partager sur Twitter

snake game

oriente objet

    11 juin 2018 à 23:43:49

    Slt a tous,

    j'essaye depuis un moment de coder le jeu connu sous le nom de "snake game" en c++ oriente objet ms il ne fonctionne pas entierement. Au fait, les touches de controle (a,  w, s et d) soit (gauche, haut, bas et droite) fonctionnent mais la tete de mon serpent materialise ici par 0 ne se deplace sur ma carte qd l'une de ces touches est appuyee. Ci-joint les differentes classes et enfin le fichier main.cpp.

    //Classe de configuration
    #ifndef DEF_SETUP
    #define DEF_SETUP
    enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN };
    class Setup
    {
    public:
    	Setup();
    	~Setup();
    	bool getStatus() const;
    	int getWidth() const;
    	int getHeight() const;
    	void setStatus(bool status);
    	eDirection m_dir;
    private:
    	const int m_width = 20;
    	const int m_height = 20;
    	int m_score;
    	bool m_gameOver;
    };
    #endif // !DEF_SETUP
    
    #include "Setup.h"
     
    Setup::Setup() : m_gameOver(false), m_dir(STOP), m_score(0)
    {
    	
    }
    
    
    Setup::~Setup()
    {
    }
    
    bool Setup::getStatus() const
    {
    	return m_gameOver;
    }
    
    int Setup::getWidth() const
    {
    	return m_width;
    }
    
    int Setup::getHeight() const
    {
    	return m_height;
    }
    
    
    void Setup::setStatus(bool status)
    {
    	m_gameOver = status;
    }
    
    // Classe de dessiner la carte
    #ifndef DEF_DRAW
    #define DEF_DRAW
    #include <iostream>
    #include <Windows.h>
    #include <ctime>
    #include "Setup.h"
    
    class Draw
    {
    public:
    	Draw();
    	~Draw();
    	void createMap();
    	int m_x, m_y, m_fruitX, m_fruitY;
    private:
    	Setup mySet;
    };
    #endif // !DEF_DRAW
    
    
    
    // Source file
    #include "Draw.h"
    
    
    using namespace std;
    
    Draw::Draw()
    {
    	srand(time(0));
    	m_x = mySet.getWidth() / 2;
    	m_y = mySet.getHeight() / 2;
    	m_fruitX = rand() % mySet.getWidth();
    	m_fruitY = rand() % mySet.getHeight();
    }
    
    
    Draw::~Draw()
    {
    }
    
    
    void Draw::createMap()
    {
    	system("cls");
    	for (int i = 0; i < mySet.getWidth() + 1; i++)
    	{
    		cout << "#";
    	}
    	cout << endl;
    
    	for (int i = 0; i < mySet.getHeight(); i++)
    	{
    		for (int j = 0; j < mySet.getWidth(); j++)
    		{
    			if (j == 0 || j == (mySet.getWidth() - 1))
    				cout << "#";
    			if (i == m_y && j == m_x)
    				cout << "0";
    			else if (i == m_fruitY && j == m_fruitX)
    				cout << "F";
    			else
    				cout << " ";
    		}
    		cout << endl;
    	}
    	for (int i = 0; i < mySet.getWidth() + 1; i++)
    	{
    		cout << "#";
    	}
    	cout << endl;
    
    
    }
    
    // Classe pour deplacer le serpent
    
    #ifndef DEF_LOGIC
    #define DEF_LOGIC
    #include <iostream>
    #include "Setup.h"
    #include "Draw.h"
    
    using namespace std;
    class Logic
    {
    public:
    	Logic();
    	~Logic();
    	void snakeMove();
    private:
    	Setup e;
    	Draw p;
    };
    #endif // !DEF_LOGIC
    
    // source file
    #include "Logic.h"
    
    
    Logic::Logic()
    {
    }
    
    
    Logic::~Logic()
    {
    }
    
    void Logic::snakeMove()
    {	
    	switch (e.m_dir)
    	{
    	case LEFT:
    		p.m_x--;
    		break;
    	case RIGHT:
    		p.m_x++;
    		break;
    	case UP:
    		p.m_y++;
    		break;
    	case DOWN:
    		p.m_y--;
    		break;
    	default:
    		break;
    	}
    }
    
    // Classe pour les touches de controle
    #ifndef DEF_INPUT
    #define DEF_INPUT
    #include <iostream>
    #include <conio.h>
    #include "Setup.h"
    #include "Draw.h"
    
    using namespace std;
    class Input
    {
    public:
    	Input();
    	~Input();
    	void snakeControl();
    	//void snakeMove();
    private:
    	Setup b;
    	Draw a;
    	int m_var;
    };
    #endif // !DEF_INPUT
    
    
    //source file
    #include "Input.h"
    
    
    Input::Input()
    {
    	m_var = 10;
    }
    
    
    Input::~Input()
    {
    }
    
    void Input::snakeControl()
    {
    	if (_kbhit()) 
    	{
    		switch (_getch())
    		{
    			case 'a':	
    				 b.m_dir = LEFT;
    				break;
    			case 'd':
    				b.m_dir= RIGHT;
    				break;
    			case 'w':
    				b.m_dir = UP ;
    				break;
    			case 's':
    				b.m_dir = DOWN;
    				break;
    			case 'x':
    				b.setStatus(true);
    				break;
    			default:
    				break;
    		}
    	}
    }

    Le main.cpp ci-dessous:

    #include <iostream>
    #include "Setup.h"
    #include "Draw.h"
    #include "Input.h"
    #include "Logic.h"
    
    using namespace std;
    int main()
    {
    	Setup s;
    	Draw d;
    	Input i;
    	Logic l;
    	while (!s.getStatus())
    	{
    		d.createMap();
    		i.snakeControl();
    		l.snakeMove();
    	}
    	return 0;
    }


    Je vous remercie d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      13 juin 2018 à 21:42:54

      Pour faire un jeu en console, utilise plutôt une bibliothèque à l'instar de Pdcurse ou ncurse, je pense que ce sera mieux que des simple getchar
      • Partager sur Facebook
      • Partager sur Twitter
      http://cpp-rendering.io : Vous trouverez tout ce dont vous avez besoin sur Vulkan / OpenGL et le rendu 3D !

      snake game

      × 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