Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.02.2012, 09:25   #1
windvor
 
Регистрация: 29.02.2012
Сообщений: 3
Сообщение Создание интерфейса пользователя в текстовом режиме (С++)

Создание интерфейса пользователя в текстовом режиме. Библиотека PDCurses. (С++)
Задание:
В текстовом режиме экрана реализуйте возможность рисования (какими-либо символами) прямоугольников с помощью клавиш управления курсором.
Помогите пожалуйста.
windvor вне форума Ответить с цитированием
Старый 01.03.2012, 13:18   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

windvor

Помогите написать программу

за студентов программы пишут в платном разделе.
Rififi вне форума Ответить с цитированием
Старый 01.03.2012, 13:22   #3
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Чтобы вам ПОМОГЛИ, надо самому хоть что-то начать делать. Если вам это лениво, то ждите, пока не появится добрый человек, который напишет это за вас. А тему поднимать не нужно. Расценивается как флуд.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 01.03.2012, 13:37   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Могу предложить простетское решение под Винду:
Код:
// Псевдографика.cpp: определяет точку входа для консольного приложения.
//http://www.programmersforum.ru/showthread.php?t=189687

#include "stdafx.h"
#include <Windows.h>
#include <conio.h>
COORD pos;
HANDLE display;

void rect(int len,int wid){
	COORD p=pos;
	SetConsoleCursorPosition(display,p);	printf("%c",0xda);for(int i=0;i<len;i++) printf("%c",0xC4);printf("%c",0xbf);p.Y++;
	for(int j=0;j<wid;j++){
	 SetConsoleCursorPosition(display,p);	printf("%c",0xB3);for(int i=0;i<len;i++) printf("%c",' ');printf("%c",0xb3);p.Y++;
	}
	SetConsoleCursorPosition(display,p);	printf("%c",0xc0);for(int i=0;i<len;i++) printf("%c",0xC4);printf("%c",0xD9);
	
}

int _tmain(int argc, _TCHAR* argv[])
{
	system("cls");
    display = GetStdHandle(STD_OUTPUT_HANDLE);
	pos.X=0;	pos.Y=0;
	int ln=10,wd=10;
	rect(10,10);
	for(char c=getch();c!=27;c=getch()){
		switch(c){
			case 'd':{pos.X++;break;}
			case 'a':{pos.X--;break;}
			case 's':{pos.Y++;break;}
			case 'w':{pos.Y--;break;}
			case '1':{ln--;break;}			case '2':{ln++;break;}
			case '3':{wd--;break;}			case '4':{wd++;break;}
		};
		system("cls");
		rect(ln,wd);
	}
	return 0;
}
Цитата:
то ждите, пока не появится добрый человек
Это я. Добрый Э-э-э-э-х. Я здесь
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.03.2012, 22:00   #5
windvor
 
Регистрация: 29.02.2012
Сообщений: 3
По умолчанию

Stilet, спасибо огромное
windvor вне форума Ответить с цитированием
Старый 29.03.2012, 20:42   #6
windvor
 
Регистрация: 29.02.2012
Сообщений: 3
По умолчанию

Помогите с решением задачи. Вроде сделал, а программа не запускается...
Вот неработающий код...
Код:
    #include <ncurses.h>
    #include <stdlib.h>
     
    void start(void);
    void draw_rect(int, int, int, int);
     
    int main(void)
    {
        bool start_draw = FALSE;
        int last_row = 0, last_col = 0;
       
        start();
       
        for(;;)
        {
            int c = getch();
            int row, col;
     
            if(c == 'q' || c == 'Q')
                break;
     
            getyx(stdscr, row, col);
           
            switch(c)
            {
            case KEY_LEFT:
                move(row, col - 1);
                break;
            case KEY_RIGHT:
                move(row, col + 1);
                break;
            case KEY_UP:
                move(row - 1, col);
                break;
            case KEY_DOWN:
                move(row + 1, col);
                break;
            case 'c': case 'C':
                start_draw = FALSE;
                clear();
                refresh();
                move(row, col);
                break;
            case ' ':
                if(start_draw == FALSE)
                {
                    last_row = row;
                    last_col = col;
                    addch(' ' | A_REVERSE);
                    refresh();
                }
                else
                {
                    int same_row = last_row == row;
                    int same_col = last_col == col;
                   
                    if(same_row && same_col)
                    {
                        addch(' ');
                        refresh();
                    }
                    else if(same_row || same_col)
                    {
                        continue;
                    }
                    else
                    {
                        mvaddch(last_row, last_col, ' ');
                        draw_rect(last_row, last_col, row, col);
                        refresh();
                    }
                }
               
                start_draw = !start_draw;
     
                break;
            }
        }
       
        endwin();
        exit(0);
    }
     
    void start(void)
    {
        initscr();
        keypad(stdscr, TRUE);
        nonl();
        cbreak();
        noecho();
       
        if(has_colors())
        {
            start_color();
            init_pair(1, COLOR_GREEN, COLOR_BLACK);
            attrset(COLOR_PAIR(1));
        }
        else
        {
            endwin();
            fputs("Your terminal doesn't support colors\n", stderr);
            exit(1);
        }
    }
     
    #define MIN_MAX(X, Y, MIN, MAX)                                 \
        do                                                          \
        {                                                           \
            if((X) < (Y))                                           \
            {                                                       \
                MIN = X;                                            \
                MAX = Y;                                            \
            }                                                       \
            else                                                    \
            {                                                       \
                MIN = Y;                                            \
                MAX = X;                                            \
            }                                                       \
        } while(0)                                                 
           
    void draw_rect(int last_row, int last_col, int row, int col)
    {
        int left, right, top, bottom, lwidth, lheight;
     
        MIN_MAX(last_row, row, top, bottom);
        MIN_MAX(last_col, col, left, right);
     
        lheight = bottom - top - 1;
        lwidth = right - left - 1;
     
        mvaddch(top, left, ACS_ULCORNER);
        hline(ACS_HLINE, lwidth);
        mvaddch(top, right, ACS_URCORNER);
        mvvline(top + 1, left, ACS_VLINE, lheight);
       
        mvaddch(bottom, left, ACS_LLCORNER);
        hline(ACS_HLINE, lwidth);
        mvaddch(bottom, right, ACS_LRCORNER);
        mvvline(top + 1, right, ACS_VLINE, lheight);
    }

Последний раз редактировалось windvor; 29.03.2012 в 20:45.
windvor вне форума Ответить с цитированием
Старый 29.03.2012, 21:47   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ошибки какие выдает?
Цитата:
#include <ncurses.h>
Это что без нее никак?
I'm learning to live...

Последний раз редактировалось Stilet; 29.03.2012 в 21:49.
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закрытие окна в текстовом режиме olegozavr Паскаль, Turbo Pascal, PascalABC.NET 0 30.04.2011 22:46
Работа с экраном в текстовом режиме. LxDm Помощь студентам 1 24.04.2011 18:03
Меню(Графика в текстовом режиме) winnix Общие вопросы C/C++ 3 15.05.2008 00:32