forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Консоль и рисование (http://forum.boolean.name/showthread.php?t=15960)

impersonalis 03.12.2011 21:10

Консоль и рисование
 
Хотелось бы скрасить практику у студентов, дав им более зрелищные задания (простые игры, визуализация распределений, набивший оскомину остров и т.п.). Единственная проблема - уровня подготовки для создания приложений с оконным интерфейсом под Windows они пока не располагают. Кто что может посоветовать (библиотеки) для рисования "под DOS", т.е. в консоли эмулятора. Ну или напишите "ты тупой делать надо /указание что надо делать/".
Спасибо.

PS.: если это имеет значение, то функционал должен быть реализован в рамках не проприетарного ПО (основная IDE - C::B).

ABTOMAT 03.12.2011 21:36

Ответ: Консоль и рисование
 
Нас парили тупыми и скучными заданиями.
Пусть теперь и они попарятся.

ffinder 03.12.2011 21:47

Ответ: Консоль и рисование
 
гугли escape последовательности.
можно менять цвет чернил, фона, переводить курсор по экрану.

impersonalis 04.12.2011 00:32

Ответ: Консоль и рисование
 
Цитата:

Сообщение от ffinder (Сообщение 212192)
гугли escape последовательности.
можно менять цвет чернил, фона, переводить курсор по экрану.

Опа. До сих пор сталкивался с весьма скромным списком оных (порядка 10-ти, примерно это) и там не было ничего про смену цвета.

Upd: веротяно имелись в виду такие последовательности:
http://symmetrica.net/archive/tips2.htm
Код:

printf("\033[30mЧерный \033[0m\n");
Занятно (я просто недолюбливаю эту Си-функцию) - не знал про это. Но хотелось бы ещё такие возможности как: точки, линии, прямоугольники, круги.

Спасибо.

ffinder 04.12.2011 00:41

Ответ: Консоль и рисование
 
Цитата:

Сообщение от impersonalis (Сообщение 212216)
Занятно (я просто недолюбливаю эту Си-функцию) - не знал про это. Но хотелось бы ещё такие возможности как: точки, линии, прямоугольники, круги.

занятно, что к С эта функция не имеет ни малейшего отношения вообще.
консоль это эмулятор терминалов VT-100 и VT-220, которые использовались при работе с мейнфреймами и получали по сети байты, которые должны были рисоваться на экране.

а круги и линии - кури алгоритмы Брезенхэма для отрезков и окружностей.

impersonalis 04.12.2011 00:47

Ответ: Консоль и рисование
 
Цитата:

Сообщение от ffinder (Сообщение 212217)
занятно, что к С эта функция не имеет ни малейшего отношения вообще.
консоль это эмулятор терминалов VT-100 и VT-220, которые использовались при работе с мейнфреймами и получали по сети байты, которые должны были рисоваться на экране.

а круги и линии - кури алгоритмы Брезенхэма для отрезков и окружностей.

Не совсем понял замечание про Си. Поясни, пожалуйста.
Указанные алгоритмы я и сам могу эти воссоздать - дело в том, что визуализировать результат их работы, не имея функции закрашивания пикселя, проблематично.

impersonalis 04.12.2011 00:53

Ответ: Консоль и рисование
 
Вероятно недоразумение вызвано сокращённой формулировкой мысли. Нетриальная версия:
Цитата:

Не знал этих возможностей системной функции принтф, заголовочный файл которой имеется в том числе в наборе стандартных библиотек С\С++ IDE, т.к. обычно использую ввод\вывод через потоки, более принятый в С++ (в то в время, как использование принтфа - в Си). Отменяет ли минимизация тела враппера факт его наличия и отмену преобразование объекта из "системная функция" в "функция языка" - не мне судить. Вероятно, я ошибаюсь, т.к., раз вы на это указываете, то, скорее всего, располагаете некоторой неизвестной мне информацией.

pozitiffcat 04.12.2011 01:06

Ответ: Консоль и рисование
 
QBasic ?
либо ncurses под windows c++
ЗЫ. большинство студентов (90 %) не свяжут свою жизнь с программированием - так что
Цитата:

Нас парили тупыми и скучными заданиями.
Пусть теперь и они попарятся.

FireOwl 04.12.2011 01:29

Ответ: Консоль и рисование
 
Так может потому и не связали 90%, что их
Цитата:

парили тупыми и скучными заданиями
.

По теме. В Turbo C была встроенная библиотека graphics. Она позволяла рисовать простую графику. Пример:
http://www.softwareandfinance.com/Tu...P/Scatter.html

ffinder 04.12.2011 01:36

Ответ: Консоль и рисование
 
Цитата:

Сообщение от impersonalis (Сообщение 212220)
Не совсем понял замечание про Си. Поясни, пожалуйста.

поясняю: байты, которые ты пишешь в поток вывода функцией printf это БИНАРНЫЙ СЕТЕВОЙ ПРОТОКОЛ вот этой железки: http://ru.wikipedia.org/wiki/VT220
а окно консоли - это эмулятор вышепреведенной железки.
т.е. prinft тут к escape последовательностям вообще не причем.

Цитата:

Сообщение от impersonalis (Сообщение 212220)
Но хотелось бы ещё такие возможности как: точки, линии, прямоугольники, круги.

ну и очевидно, что в ТЕКСТОВОЙ КОНСОЛИ рисовать пиксели невозможно в приниципе.

pax 05.12.2011 18:12

Ответ: Консоль и рисование
 
В консоли можно рисовать еще вот так
http://ascgendotnet.jmsoftware.co.uk/
)

Harter 06.12.2011 02:09

Ответ: Консоль и рисование
 
impersonalis,
Извини, если сильно не по теме.
Я в консоле рисовал графики функций и не скажу, что это сильно запарно, даже, наоборот, занимательно. А на днях знакомый сделал пятнашки. Это к тому, что есть довольно интересные консольные задачи без применения графики. Возможно, ты посмотришь в эту сторону.

impersonalis 10.12.2011 00:47

Ответ: Консоль и рисование
 
Пересмотрел кучу (большую!) разнообразных библиотек для вывода графики в консоль (с её переключением в графический режим - спасибо за указание на принципиальную ошибку, ffinder).
Часть вообще не запустилась. Настройка и сборка проекта с другими - сами по себе могут тянуть на курсовую работу для неподготовленного студента.
Поэтому, возвращаемся к псевдографике.
Сперва рассматривал вариант, более близкий к предложенному ffinder-ом. А именно: управление непосредственно терминалом (при помощи функции system).
Подробнее:
ать
ыть

Потом решил всё же использовать более завёрнутые функции (на некотором уровне "те же яйца", но на уровне цпп-кода более привычно, имхо)
опаньки
В К::Б вроде всё пашет. Но, не расходимся: обладателей студии попрошу потестить семпл, когда руки дойдут.
Ещё раз спасибо всем принимавшим участие в обсуждении!

impersonalis 10.12.2011 01:24

Ответ: Консоль и рисование
 
Вложений: 1
Ух ты - руки дошли
Код:

#include <conio.h>
#include <iostream>
#include <windows.h>

using namespace std;

int main(){
    SetConsoleTitle("boolean");

    WORD ATTR;
    COORD POS;
    HANDLE CH=GetStdHandle(STD_OUTPUT_HANDLE);

    for(int items=0;items<100;items++){
        ATTR=FOREGROUND_BLUE*(rand()%2) | FOREGROUND_GREEN | FOREGROUND_INTENSITY*(rand()%2) | BACKGROUND_BLUE*(rand()%2);
        POS.X=rand()%70;
        POS.Y=rand()%20;
        SetConsoleTextAttribute(CH,ATTR);
        SetConsoleCursorPosition(CH,POS);

        cout<<char(1+rand()%6)<<endl;
    }
    POS.X=0;
    POS.Y=21;
    SetConsoleCursorPosition(CH,POS);
    getch();
        return 0;
}

Просьба потестить (укажите свою иде, используемый компилятор, ОС).
Код может потребовать доработки под конкретную конфигурацию. Картинка может отличаться от приведённой, т.к. параметры используемого в качестве ГПСЧ ЛКГ у разных компиляторов разные.
Спасибо!

У меня уже готовы два задания, для которых такой функционал вывода достаточен.

Harter 10.12.2011 02:25

Ответ: Консоль и рисование
 
Вложений: 3
На втором и третем скрине
Цитата:

1 warning C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.
Заменил на _getch - всё ок.

ОС: XP SP 3.
Visual C++ 6, Visual Studio 2005, Visual Studio 2008.


Часовой пояс GMT +4, время: 13:35.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot