Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //instalar las ncurses antes sudo apt-get install libncurses-dev
- //Dentro de un marco se dirige un jugador
- //compilacion g++ -std=c++11 -o juego juego.cpp -lncurses
- //Antonio Villanueva Segura
- #include <iostream>
- #include <stdio.h>
- #include <ncurses.h>
- #include <string>
- #include <unistd.h> //usleep
- using namespace std;
- /***********************************************************************/
- class juego {
- public:
- juego(string objeto="+");//Constructor
- void run();//Bucle principal del juego
- private:
- int x,y;
- int max_x,max_y;//Maximos del terminal
- string objeto ;//Objeto que representa el jugador
- WINDOW * win;//ncurses
- void mueve(int x=0,int y=0,string objeto ="*",bool limpia=false);//Mueve , imprime ,limpia un objeto
- void dentroLimites(int &x,int &y);//Controla que el objeto este en los limites ,cuadro del juego
- void dibujaLados();//Marco,laterales del juego
- };
- /*----------------------------------------------------------------------*/
- juego::juego(string objeto):objeto(objeto){//Constructor con lista de inicializacion
- win = initscr();
- curs_set(FALSE); // No muestra el cursor
- noecho();
- cbreak();
- timeout(1);
- keypad(win, TRUE);
- getmaxyx(win,max_y,max_x); /* obtiene el numero de colummnas y lineas */
- //Correccion para el interior del terminal
- max_x-=1;
- max_y-=1;
- x=max_x/2;//Jugador en el centro
- y=max_y/2;
- }
- /*----------------------------------------------------------------------*/
- void juego::mueve(int x,int y,string objeto,bool limpia){//Mueve , imprime ,limpia un objeto
- if (limpia){erase();}
- mvprintw(y,x,objeto.c_str()); //Imprime objeto en coordenada y,x
- refresh();
- }
- /*----------------------------------------------------------------------*/
- void juego::dentroLimites(int &x,int &y){//Controla que el objeto este en los limites ,cuadro del juego
- if (x<1){ x=max_x-1;}
- if (x>max_x){ x=1;}
- if (y<1){ y=max_y-1;}
- if (y>max_y-1){ y=1;}
- }
- /*----------------------------------------------------------------------*/
- void juego::dibujaLados(){//Marco del juego .Se dibuja cada vez
- for(int x=1; x<=max_x; x++){// desplazo En X
- mueve(x,1);//Linea superior de * en y=1
- mueve(x,max_y);//Linea inferior
- }
- for(int y=1; y<=max_y; y++){//desplazo En Y
- mueve(1,y);//Lateral Izq. *
- mueve(max_x,y);//Lateral Derch. *
- }
- }
- /*----------------------------------------------------------------------*/
- void juego::run(){//Bucle principal del juego
- while (true){
- mueve(x,y,objeto,true);//Mueve el "objeto" jugador , borrando el trazado anterior
- dibujaLados();//Dibuja marco,laterales del juego
- 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
- case KEY_LEFT: x--;objeto="<"; break;
- case KEY_RIGHT: x++;objeto=">"; break;
- case KEY_UP: y--;objeto="^"; break;
- case KEY_DOWN: y++;objeto="v"; break;
- }
- dentroLimites(x,y);//Controla que el objeto jugador este en los limites del cuadro del juego
- usleep(10000);//retardo
- }
- }
- /***********************************************************************/
- /***********************************************************************/
- int main (){
- juego partida;//Instancia de la clase juego
- partida.run();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement