Advertisement
AntonioVillanueva

ncurses mueve objeto con flechas de teclado

Feb 26th, 2019
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.55 KB | None | 0 0
  1. //instalar las ncurses antes      sudo apt-get install libncurses-dev
  2. //Dentro de un marco se dirige un jugador
  3. //compilacion  g++ -std=c++11 -o juego  juego.cpp -lncurses
  4. //Antonio Villanueva Segura
  5.  
  6. #include <iostream>
  7. #include <stdio.h>
  8. #include <ncurses.h>
  9. #include <string>
  10. #include <unistd.h> //usleep
  11. using namespace std;
  12.  
  13. /***********************************************************************/
  14. class juego {
  15.     public:
  16.         juego(string objeto="+");//Constructor
  17.         void run();//Bucle principal del juego
  18.     private:
  19.         int x,y;
  20.         int max_x,max_y;//Maximos del terminal
  21.         string objeto ;//Objeto que representa el jugador
  22.         WINDOW * win;//ncurses 
  23.         void mueve(int x=0,int y=0,string objeto ="*",bool limpia=false);//Mueve , imprime ,limpia un objeto
  24.         void dentroLimites(int &x,int &y);//Controla que el objeto este en los limites ,cuadro del juego       
  25.         void dibujaLados();//Marco,laterales del juego
  26. };
  27. /*----------------------------------------------------------------------*/
  28. juego::juego(string objeto):objeto(objeto){//Constructor con lista de inicializacion
  29.          win = initscr();
  30.         curs_set(FALSE); // No muestra el cursor
  31.         noecho();
  32.         cbreak();
  33.         timeout(1);
  34.         keypad(win, TRUE);
  35.         getmaxyx(win,max_y,max_x);      /* obtiene el numero de colummnas y lineas  */  
  36.         //Correccion para el interior del terminal
  37.         max_x-=1;
  38.         max_y-=1;
  39.        
  40.         x=max_x/2;//Jugador en el centro
  41.         y=max_y/2;
  42.     }
  43. /*----------------------------------------------------------------------*/
  44. void juego::mueve(int x,int y,string objeto,bool limpia){//Mueve , imprime ,limpia un objeto
  45.         if (limpia){erase();}
  46.         mvprintw(y,x,objeto.c_str());  //Imprime objeto en coordenada y,x    
  47.         refresh();
  48. }
  49. /*----------------------------------------------------------------------*/  
  50. void juego::dentroLimites(int &x,int &y){//Controla que el objeto este en los limites ,cuadro del juego
  51.     if (x<1){ x=max_x-1;}
  52.     if (x>max_x){ x=1;}
  53.    
  54.     if (y<1){ y=max_y-1;}
  55.     if (y>max_y-1){ y=1;}    
  56. }
  57. /*----------------------------------------------------------------------*/  
  58.  void  juego::dibujaLados(){//Marco del juego .Se dibuja cada vez
  59.          
  60.     for(int x=1; x<=max_x; x++){// desplazo  En X
  61.         mueve(x,1);//Linea superior de * en y=1
  62.         mueve(x,max_y);//Linea inferior
  63.     }
  64.  
  65.     for(int y=1; y<=max_y; y++){//desplazo En Y
  66.         mueve(1,y);//Lateral Izq. *      
  67.         mueve(max_x,y);//Lateral Derch. *
  68.     }
  69.  }
  70.  
  71. /*----------------------------------------------------------------------*/  
  72.  void juego::run(){//Bucle principal del juego
  73.      while (true){
  74.         mueve(x,y,objeto,true);//Mueve el "objeto" jugador  , borrando el trazado anterior
  75.         dibujaLados();//Dibuja marco,laterales del juego        
  76.        
  77.         switch(getch()) {//Mueve el objeto en x e y en funcion de las flechas y cambia la forma del obj. en funcion de la direccion
  78.             case KEY_LEFT:  x--;objeto="<"; break;
  79.             case KEY_RIGHT: x++;objeto=">"; break;
  80.             case KEY_UP:    y--;objeto="^"; break;
  81.             case KEY_DOWN:  y++;objeto="v"; break;      
  82.         }
  83.        
  84.         dentroLimites(x,y);//Controla que el objeto jugador este en los limites del cuadro del juego
  85.         usleep(10000);//retardo
  86.     }
  87.  }
  88.    
  89. /***********************************************************************/
  90. /***********************************************************************/
  91. int main (){
  92.     juego partida;//Instancia de la clase juego
  93.     partida.run();
  94.     return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement