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] nCurses bląd w funkcji wnoutrefresh(WINDOW*);


Rekomendowane odpowiedzi

Opublikowano

Witam ponownie. Znów mam problem z biblioteką NCurses/PDCurses. Tym razem z funkcją wnoutrefresh(); Przy każdym wywołaniu w f-cji scoreBoard() wywala błąd:

Kod:

 





#include <curses.h>//nagłówek z pdcurses
#include <vector>
#include <sstream>
#include "Config.hpp" //moja boblioteka do konfigów
using namespace std;
WINDOW * Game;
WINDOW * ScoreBoard;
WINDOW * Menu;
typedef map < int, vector < string > > mVector;
int choose( int key, int cho );
void menu( int cho );
void game( int key );
void scoreBoard();
mVector readScore();
int main()
{
    int Choose = 0, Key, State = 0; //0 - menu, 1 - game, 2 - score board, 3 - quit
    initscr();
    cbreak();
    keypad( stdscr, TRUE );
    noecho();
    curs_set( 0 );
    start_color();
    init_pair( 10, COLOR_GREEN, COLOR_BLACK );
    do
    {
        Key = getch();
        switch( State )
        {
        case 0:
            if( Choose == 0 && Key == 10 )
            {
                State = 0;
                clear();
            }
            else if( Choose == 1 && Key == 10 )
            {
                State = 2;
            }
            else if( Choose == 2 && Key == 10 )
            {
                State = 3;
                clear();
                break;
                break;
            }
            Choose = choose( Key, Choose );
            menu( Choose );
            break;
        case 1:
            break;
        case 2:
            {
                if( Key == ' ' )
                {
                    State = 0;
                    clear();
                }
                mVector Score = readScore();
                string nick;
                string score;
                ScoreBoard = newwin( 14, 19, LINES / 2 - 14, COLS / 2 );
                wclear( ScoreBoard );
                wattron( ScoreBoard, COLOR_GREEN );
                mvwprintw( ScoreBoard, 1, 1, "- < S C O R E > -" );
                wattroff( ScoreBoard, COLOR_GREEN );
                for( int i = 1; i < 11; i++ )
                {
                    nick = Score[ i ][ 0 ];
                    score = Score[ i ][ 1 ];
                    mvprintw( 0, 0, "%s", nick.c_str() );
                    if( nick.size() < 8 )
                    {
                        do
                        {
                            nick += " ";
                        } while( nick.size() < 8 );
                        
                    }
                    score = Score[ i ][ 1 ];
                    if( i == 10 )
                         mvwprintw( ScoreBoard, i + 1, 1, "%d.%s : %s", i, nick.c_str(), score.c_str() );
                    else
                         mvwprintw( ScoreBoard, i + 1, 1, "%d. %s : %s", i, nick.c_str(), score.c_str() );
                    
                }
                box( ScoreBoard, 0, 0 );
                wrefresh( ScoreBoard );
                break;
            }
        case 3:
            break;
            break;
        }
        refresh();
    } while( Key != 27 && State != 3 );
    
    refresh();
    clear();
    endwin();
    return 0;
}
void game( int key )
{ }
mVector readScore()
{
    mVector Score;
    Config score( "score.conf", true );
    string i;
    ostringstream ss;
    vector < string > temp;
    for( int j = 1; j < 11; j++ )
    {
        ss << j;
        i = ss.str();
        temp.push_back( score.get( i + ".nick" ) );
        temp.push_back( score.get( i + ".score" ) );
        Score[ j ] = temp;
    }
    return Score;
}
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;
}
void menu( int cho )
{
    const char * chooses[ 3 ] = { "New Game", "Score Board", "Quit" };
    Menu = newwin( 5, 15, LINES / 2 - 5, COLS / 2 - 10 );
    wclear( Menu );
    for( int 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 );
}
void scoreBoard()
{
    mVector Score = readScore();
    string nick;
    string score;
    ScoreBoard = newwin( 14, 19, LINES / 2 - 14, COLS / 2 - 13 );
    wclear( ScoreBoard );
    wattron( ScoreBoard, COLOR_GREEN );
    mvwprintw( ScoreBoard, 1, 1, "- < S C O R E > -" );
    wattroff( ScoreBoard, COLOR_GREEN );
    for( int i = 1; i < 11; i++ )
    {
        nick = Score[ i ][ 0 ];
        score = Score[ i ][ 1 ];
        mvprintw( 0, 0, "%s", nick.c_str() );
        if( nick.size() < 8 )
        {
            do
            {
                nick += " ";
            } while( nick.size() < 8 );
            
        }
        score = Score[ i ][ 1 ];
        if( i == 10 )
             mvwprintw( ScoreBoard, i + 2, 1, "%d.%s : %s", i, nick.c_str(), score.c_str() );
        else
             mvwprintw( ScoreBoard, i + 2, 1, "%d. %s : %s", i, nick.c_str(), score.c_str() );
        
    }
    box( ScoreBoard, 0, 0 );
    wnoutrefresh( ScoreBoard ); //!!Tu jest błąd!! tylko nie wiem dlaczego.
}

 

 

 

Bląd:

 

 











#0 10005AB6 wnoutrefresh() (D:\---_DA~2\C__~1\CBFiles\Game\bin\Debug\pdcurses.dll:??) 
#1 004037AC scoreBoard() (D:\- - - [ D A T A ] - - -\C++\CBFiles\Game\main.cpp:180) 
#2 00402D49 main() (D:\- - - [ D A T A ] - - -\C++\CBFiles\Game\main.cpp:46)

 

 

 

@edit Można zamknąć. Znalazłem błąd, a raczej kilka.

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...