Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: tca153 en 29 Agosto 2021, 02:00 am



Título: ayuda con ncurses
Publicado por: tca153 en 29 Agosto 2021, 02:00 am
buen dia a todos, estoy haciendo un programa algo tonto con ncurses, un juego, y una de las clases me esta dando problemas, la de manejo de pantalla, tengo 2 problemas que son:
1-cuando se ejecuta la ventana del terminal siempre es muy chica, de alrededor de1/4 a 1/3 del area de la pantalla, en ese momento las zonas que dibujo en pantalla estan bien, pero cuando la maximizo quedan chicas.
2-para realizar un mapa uso 9 sub ventanas llamadas bloques, pero resulta que estas no me toman los atributos de color, lo demas anda.
El mas importante seria el primero, necesitaria saber como arrancar ya con la pantalla maximizada por soft, si es que se puede (lei por ahi que si y tambien vi una funciones llamadas resizeterm y resize_term que no se si tendran algo que ver) y adaptar la escala al nuevo tamaño de forma automatica (tambien he podido ver que puedo interceptar el evento de maximizado como una pulsacion con getch()). lo otro seria mas por prolijidad

Código:
#ifndef PANTALLA_H
    #define PANTALLA_H
    #include <ncurses.h>

    class Pantalla
    {
        private:
            WINDOW *mapa, *dialogo, *inventario, *bloques[9];
        public:
            Pantalla();
            ~Pantalla();
            int Mapa(void);
            int Dialogo(void);
            int Inventario(void);
    };

#endif // PANTALLA_H

Código:
#include "Pantalla.h"
#include <ncurses.h>
#include <iostream>

Pantalla::Pantalla()
{
    int8_t i;
    initscr();
    start_color();
    cbreak();
    noecho();
    keypad(stdscr,TRUE);
    init_pair(1,COLOR_RED,COLOR_GREEN);
    init_pair(2,COLOR_RED,COLOR_WHITE);
    init_pair(3,COLOR_BLUE,COLOR_YELLOW);
    init_pair(4,COLOR_BLACK,COLOR_RED);
    init_pair(5,COLOR_BLACK,COLOR_CYAN);
    mapa=subwin(stdscr,22,38,1,1);

    if(mapa == NULL)
    {
        endwin();
        std::cout << "imposible crear ventana";
        getch();
        return;
    }
    dialogo=subwin(stdscr,10,38,1,41);
    if(dialogo == NULL)
    {
        delwin(mapa);
        endwin();
        std::cout << "imposible crear ventana";
        getch();
        return;
    }
    inventario=subwin(stdscr,10,38,13,41);
    if(inventario == NULL)
    {
        delwin(mapa);
        delwin(dialogo);
        endwin();
        std::cout << "imposible crear ventana";
        getch();
        return;
    }
    for(i=0;i<3;i++)
    {
        bloques[i]=subwin(mapa,5,7,5,9+(7*i));
        bloques[i+3]=subwin(mapa,5,7,10,9+(7*i));
        bloques[i+6]=subwin(mapa,5,7,15,9+(7*i));
    }
    for(i=0;i<9;i++)
    {
        box(bloques[i],0,0);
    }
    attron(COLOR_PAIR(1));
    bkgd(COLOR_PAIR(1));
    attroff(COLOR_PAIR(1));
    wattron(mapa,COLOR_PAIR(2));
    wbkgd(mapa,COLOR_PAIR(2));
    wattroff(mapa,COLOR_PAIR(2));
    wattron(dialogo,COLOR_PAIR(3));
    wbkgd(dialogo,COLOR_PAIR(3));
    wattroff(dialogo,COLOR_PAIR(3));
    wattron(inventario,COLOR_PAIR(4));
    wbkgd(inventario,COLOR_PAIR(4));
    wattroff(inventario,COLOR_PAIR(4));
    box(mapa,0,0);
    box(dialogo,0,0);
    box(inventario,0,0);
    refresh();
    getch();
}

Pantalla::~Pantalla()
{
    delwin(mapa);
    delwin(dialogo);
    delwin(inventario);
    endwin();
}