2009-10-27 6 views
7

Более простой жизньNcurses новичок - начиная с GNU C

Я возвращаюсь в C, чтобы помочь оживить мое программирование мочки. В последний раз, когда я учился программировать, я учился в колледже, работая с Turbo C на MSDOS. Простые анимации ASCII стали одержимостью, когда я нашел дружественного Borland <conio.h>. Было много веселья с функциями gotoxy и textcolor, и незадолго до того, как я писал такие игры, как змея и понг. Это был очень полезный способ выучить язык, и каждая игра подтолкнула меня дальше, когда я стал более амбициозным.

Ncurses

я хотел бы начать с аналогичными проектами типа игры. Сегодня, хотя, я нахожусь на mac с пыльной машиной linux в углу. Я мог бы запустить свой любимый Turbo C в dosbox (достаточно вездесущая платформа), но я хочу изучить C, чтобы я мог разработать что-то, что скомпилировано естественно на любой BSD или платформе unix. Мне сказали, что ncurses - это путь вперед, но сайт GNU в значительной степени прошел через мою голову. В тот же день у меня была моя дружеская функция textmode, и я был выражен в print вдали от понга. ncurses кажется намного более мощным.

Свист

Там должно быть много людей, которые уже были в этой ситуации. Я ищу подходящий учебник или ресурс, который поможет мне справиться с тем, что такое ncurses и как с ним работать. Любые советы или подобные истории также представляли бы большой интерес!

+0

Я добавил к моему ответу, ваш комментарий конечной точки и нажмите о Ncurses окон. Ваш вопрос сильно изменился с тех пор, как я впервые ответил, хотя я не знаю, как посоветовать учебник ncurses. – caf

ответ

5

Yup, ncurses - это библиотека, которую вы ищете. В качестве примера здесь (п) проклинает эквивалент gotoxy:

ИМЯ

ход, wmove - перемещение проклинает курсор окна

СИНТАКСИС

#include <curses.h> 

    int move(int y, int x); 
    int wmove(WINDOW *win, int y, int x); 

ОПИСАНИЕ

Эти процедуры перемещают курсор, связанный с окном, на строка y и столбец x. Эта процедура не перемещает физический курсор терминала до тех пор, пока не будет вызвано обновление. Указанная позиция - относительно верхнего левого угла окна, которая равна (0,0).

Добавление:

В вашем комментарии вы спрашиваете о проклятиях окон - я не думаю, что я могу улучшить то, что страница Ncurses человек говорит об этом, так что я просто процитирую:

библиотека Ncurses позволяет манипуляцию структур данных, называемых окон, которые можно рассматривать в качестве двумерных массивов символов, представляющих все или часть a ЭЛТ-экран. Отображается окно по умолчанию stdscr, которое является размером экрана терминала . Другие могут быть созданы с помощью newwin.

Обратите внимание, что curses не обрабатывает перекрывающиеся окна, это делается панель (3CURSES). Это означает, что вы можете использовать stdscr или разделить экран на черепичные окна и не использовать stdscr вообще. Смешивание двух результатов приведет к непредсказуемым и нежелательным эффектам , .

Windows относится к переменным , объявленным как ОКНО *. Эти данные структур обрабатываются с помощью процедур, описанных здесь и в другом месте на страницах руководства ncurses. Среди те самые основные процедуры: move and addch. Более общие версии этих подпрограмм: , включая имена, начинающиеся с w, , позволяющие пользователю указать окно. Процедуры, начинающиеся с w , влияют на stdscr.

После использования подпрограммы для манипулирования окна, обновление называется, говоря проклятья, чтобы сделать экран CRT пользователя выглядеть stdscr. Символы в Окно на самом деле имеет тип chtype, (данные символа и атрибута), так что другая информация о персонаже также может храниться с каждым символом .

Итак, в общем, вы можете смело игнорировать всю вещь окна и просто использовать окно stdscr.

+1

спасибо, указывая на аспект окна, помог мне понять, в чем вопрос «должен быть». Что такое окно?Это похоже на виртуальную страницу, которая переключается или транслируется на консоль? Меня это смущает. – deau

+0

Примечание. Возможно, вы захотите использовать '#include ', чтобы убедиться, что вы фактически получаете медсестер, а не устаревшую версию проклятий, но опять же один из включенных файлов может быть псевдонимом. Никогда не знаешь. – Xenon

2

Ну, в UNIX-подобных системах, таких как BSD и Linux, вы определенно хотите использовать ncurses, поскольку эмуляторы терминала делают вашу жизнь действительно несчастной, если вы этого не делаете.

Возможно, вы должны написать себе простую оболочку, содержащую необходимую функциональность и реализовать ее по-разному для разных ОС. В Windows есть несколько console functions, которые вы можете использовать, чтобы часть не была слишком сложной.

1

Вот небольшая программа, которая поможет вам начать работу.

#include <curses.h> 

int main(void) { 
    int ch; 

    /* The whole program needs error-checking */ 
    initscr(); 
    noecho(); 
    cbreak(); 
    printw("Hit Ctrl+C to exit ...\n\n"); 
    for (;;) { 
    ch = getch(); 
    printw("Value of char: %d (%02x)\n", ch, ch); 
    } 
    endwin(); 
    return 0; 
} 

Не забудьте сообщить компоновщику, чтобы добавить библиотеку libcurses.

gcc ... -lcurses 
+0

хорошо играл! Самая полезная программа! – deau

1

Существует библиотека, обеспечивающая Turbo C, как консоли IO для Linux: TurboC также связаны: CONIO for DevC++

+0

приятно, спасибо большое – deau