Advertisement
AntonioVillanueva

Pelota que rebota test en ncurses

Dec 1st, 2017
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.32 KB | None | 0 0
  1. //instalar las ncurses antes sudo apt-get install libncurses-dev
  2. //compilacion  g++ -std=c++11 -o pelota pelota.cpp -lncurses
  3. //Estudio de una pelota que rebota en la pantalla en ncurses
  4. //Antonio Villanueva Segura
  5. #include <ncurses.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <unistd.h> //usleep
  9. #include <string>
  10.  
  11. WINDOW *win; //ventana curses
  12. using namespace std ;
  13. class pelota{
  14.     public:
  15.  
  16.     pelota(int x,int y,string obj);
  17.     void run ();
  18.    
  19.     private:
  20.     void initVideo();//inicializa video ncurses
  21.     void move (int &x,int &y);//logica del movimiento
  22.     void print (int &x,int &y);//imprime objeto
  23.     int x,y,max_x,max_y;//coordenadas y maximos
  24.     bool dir_x,dir_y;//direccion
  25.     string objeto;//objeto a mover
  26. };
  27.  
  28. /***********************************************************************/
  29.     pelota ::pelota(int x=1,int y=1,string obj="°"):x(x),y(y),dir_x(true),dir_y(true),objeto(obj){
  30.         initVideo();
  31.         move(x,y);     
  32.     }
  33. /***********************************************************************/
  34.     void pelota::initVideo(){//inicializa video ncurses
  35.         win=initscr(); /* Crea la ventana curses mode*/
  36.         clear();  /* Borra la pantalla entera bajo ncurses */
  37.         refresh(); /* Actualiza la ventana con los cambios */
  38.         curs_set(FALSE); // Don't display a cursor
  39.         noecho();
  40.         cbreak();
  41.         keypad(win, TRUE);
  42.         getmaxyx(win,max_y,max_x);      /* get the number of rows and columns */
  43.     }
  44. /***********************************************************************/
  45.     void pelota::move (int &x,int &y){//logica del movimiento
  46.        
  47.         dir_x ? x++: x--;
  48.         dir_y ? y++: y--;
  49.        
  50.        
  51.         if (x>max_x-1){dir_x^=dir_x;}
  52.         if (y>max_y-1){dir_y^=dir_y;}  
  53.  
  54.         if (x<=1){dir_x^=1;}
  55.         if (y<=1) {dir_y^=1;}
  56.     }
  57.  
  58. /***********************************************************************/
  59.     void pelota::run (){
  60.         while (true){
  61.             move(x,y);
  62.             print(x,y);        
  63.         }
  64.     }
  65. /***********************************************************************/
  66.     void pelota::print (int &x,int &y){//imprime objeto
  67.         erase();   
  68.         mvprintw(y,x, objeto.c_str()); 
  69.         refresh();
  70.         usleep(100000);
  71.     }
  72.    
  73. /***********************************************************************/
  74. /***********************************************************************/
  75. int main (){
  76.     pelota p;//construccion por defecto
  77.     //pelota p(1,1,"0");//construccion con parametros
  78.     p.run();
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement