Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Pytanie] C++ NCurses/PDCurses błąd przy wychodzeniu z aplikacji


Rekomendowane odpowiedzi

Opublikowano

Witam. Mam taki kod:

 

 









#include <curses.h>

WINDOW *Game, *Menu, *ScoreBoard;

int Key = 0, i, Choose = 0;
char* chooses[3] = {"New Game", "Score Board", "Quit"};

int choose(int klawisz, int poz);

void menu(int pos);

void game(int key);

void scoreBoard(int key);

int main()
{
    //start
    initscr();
    cbreak();
    keypad(stdscr, TRUE);
    noecho();
    curs_set(0);
    start_color();
    init_pair(10, COLOR_GREEN, COLOR_BLACK);
    int State = 0;//0 - menu, 1 - game, 2 - score board, 3 - quit
    do
    {
        Key = getch();
        if(State == 0)
        {
            Choose = choose(Key, Choose);
            menu(Choose);
            if(Choose == 0 && Key == 10)
            {
                clear();
                State = 1;
            }
            else if(Choose == 1 && Key == 10)
            {
                clear();
                State = 2;
            }
            else if(Choose == 2 && Key == 10)
            {
                clear();
                State = 3;
            }
        }else if(State == 1){
            //game
        }else if(State == 2){
            //score board
        }else{
            break;
        }
        refresh();
    }while(State != 3 && Key != 27);
    clear();
    endwin();
    nocbreak();
    return 0;
}
void game(int key)
{

}
void scoreBoard(int key)
{

}
void menu(int cho)
{
    Menu = newwin(5, 15, LINES /2-5, COLS /2-10);
    wclear(Menu);
    for(i = 0; i < 3; i++)
    {
        if(i == cho)
        {
            wattron(Menu, COLOR_PAIR(10));
        }
        mvwprintw(Menu, i+1, 2, "%s\n", chooses[i]);
        if(i == cho)
        {
            wattroff(Menu, COLOR_PAIR(10));
        }
    }
    box(Menu, 0, 0);
    wrefresh(Menu);
}
int choose(int key, int cho)
{
    if(key == KEY_UP)
    {
        cho--;
        if(cho == -1) cho = 2;
    }
    else if(key == KEY_DOWN)
    {
        cho++;
        if(cho == 3) cho = 0;
    }
    else
        return 0;
    return cho;
}

 

 

Błąd polega na tym, że jeżeli dam [Quit] w menu to aplikacja się nie zamyka. Robi to dopiero po naciśnięciu [ESC]. Próbowałem wszystkiego (co pamiętam) i nic nie działa. Proszę o pomoc. w NCueses/PDCueses jestem zielony, dopiero zaczynam eksperymentować z tą biblioteką.

Opublikowano

getch() zwraca kod wciśniętego znaku. Zapisuję go dozmiennej globalnej int Key. Ale nie o to chodziło, możesz mi pomóc rozwiązać ten problem?

Opublikowano

Cale to podejscie jest nielogiczne i zbyt pogmatwane. getch zwraca char wiec do chara go przypisuj to raz. Odrazu po otrzymaniu klawisza wykonuj akcje. Operuj na tym co dostaniesz, nie potrzeba ustawiac drugiej flagi. Uprosc to normalnie i zrob z ifow switcha dla lepszej czytelnosci.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...