1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|
1 | |
Консоль, кубизм, минимализм, как быть? (графика и алгоритмы)26.06.2013, 11:07. Показов 4620. Ответов 19
Метки нет (Все метки)
Добрый день.
Я пытаюсь придумать решение своей проблемы, но не знаю в какую сторону двигаться. Суть такая: мне нужно нарисовать шахматное поле. При этом, использовать не WFAрр, а обычную консоль. Возник вопрос, как мне нарисовать доску и фигуры так, чтобы картинки можно было перемещать и использовать для алгоритмов? Ну, например. Вот я нарисую пешкоподобную фигурку в закрашенном или незакрашенном квадратике. А как сказать программе, что это пешка? Вопрос в том, что мне не нужно с использованием картинок, мне нужно "вся работа в консоли". Пожалуйста, если у кого-то есть мысли и идеи по поводу решения данной постановки задачи, я был бы оченгь рад их послушать!
0
|
26.06.2013, 11:07 | |
Ответы с готовыми решениями:
19
Графика + консоль. Как? Как реализовать вывод графика в консоль с использованием массивов? Кубизм Минимализм 21 века |
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 539
|
|||||||||||
26.06.2013, 11:32 | 2 | ||||||||||
Вы хотите именно в консоли рисовать фигуры? символами текста можно. Так например:
0
|
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|
26.06.2013, 21:17 [ТС] | 3 |
@Kukurudza, типа того, только это отображение массива, а я предполагал использовать графику, подключение графической библиотеки.
*таким примерно методом я реализовывал морской бой -- да, это проще и удобней, но в шахматах получается ещё и цвет фигуры, т.е., придётся больше букв, а это не совсем бы хотелось, если честно. **можно взять вариант с регистром букв... Ну, это уже на крайний случай, если никакая мысль не осенит совсем.
0
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 539
|
|
27.06.2013, 07:33 | 4 |
Задача академическая? то есть надо сделать именно так и все?
вообще в консоли можно рисовать разную геометрию, мы занимались таким на первом курсе, лет 6 назад. могу кинуть лабы старые. как прикрепить туда текстуру не знаю, да и консоль для этого не предназначена так то. MFC попробуйте на худой конец, хотя это мертвая технология. DirectX не? Просто вы пытаетесь слетать на Марс на самокате без колес...
1
|
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|
27.06.2013, 13:12 [ТС] | 5 |
@Kukurudza, нет-нет. Ну вот смотрите. например, в паскале можно рисовать всякие квадратики кружочки и тд и тп.
Я уверен, что в С++ тоже можно, в консоли. Эдакий кубизм. Но мне бы хотелось, чтобы какую-то группу объектов объединить и представлять как на матрице показали вы. Т.е., если просто квадрат, (закрашенный или нет), то 0 на матрице внутри. Если там стоит пешка (прям нарисую поточечно пешку), то отметим её (в матрице, в алгоритме) как 1. Если пешка тёмная светлая. то или 1 или 7. Вопрос в том, как сказать "что это пешка" и занести её в матрицу? Возник сейчас вариант: если я поле всё расчерчу ровно и чётко, например, 800 точек на 800, где на 1 клетку будет точка 100х100 (например), то мне нужно будет считывать каждую такую 100х100, проверять её как-то с "шаблонами картинок", если шаблоны картинок совпали, то в матрицу заносим определённую инфу. Хотя, начальная инфа в матрице уже будет занесена, и максимум что организовать. так это дальнейшее движение. т.е., смену шаблонов, отдельных кусков графики. допустим, вы передвигаете 1 фигуру -- мне нужно заменить, по сути, 2 клетки. вот как бы это так красиво организовать, чтобы не перерисовывать всё -- было бы шикарно. В общем, вопросов куча, не знаю как правильно бы это всё оформить. **всё, теперь главное разобрался, что привязка к графике не самая роль. Теперь вопрс о графике консольной мучает -- как проще нарисовать, чтобы заменять в этой системе только 2 клетки, а не все 64 заного перерисовывать?
0
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 539
|
|
27.06.2013, 13:26 | 6 |
Вы правильно подметили что вам дана изначальная позиция. вы ее знаете. за один ход действительно может измениться только две клетки, причем по известному закону (закон ну в смысле известный ход). то есть сравнивать кусочки 100на100 это не нужно.
а как рисовать. ну первое что напрашивается это выделить функции рисования для заданных координат на экране (координат всего 8на8 = 64 штуки): у вас будут следующие функции рисования: нарисовать_белую_пешку_на_черной_клетке(х, у) нарисовать_белую_пешку_на_белой_клетке(х, у) ну и так далее для каждой фигуры-клетки и тогда проходя по вашей матрице позиций в соответствии с номерочком (1-белая пешка, 7-черная или как там) вы будете вызывать нужную функцию перерисовки.
0
|
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|
27.06.2013, 13:35 [ТС] | 7 |
А, т.е., всё равно все функции вызывать.
Интересно, а можно сделать так: допустим, у меня нарисована начальная позиция. И у меня есть да, как вы сказали, рисование клеток с определённым видом фигуры, её цветом и на какой она клетке. И ещё есть просто нарисовать клетку. Заниматься наложением картинки на картинку можно? т.е., допустим, на координатном квадратике: 200х200 (для первой координаты) и 300х300, стоит пешка. не важно что и как там, просто клетка с пешкой как единая картинка. и вот я схожу b2-b4. Допустим тогда, можно ли запустить 2 функции? т.е., одна из функций нарисвует новую клетку b4 с пешкой (там была порсто клетка) а на старой клетке с пешкой сделает просто клетку? т.ен., чтобы не использовать все функции от условия и всё перерисовывать? Эдакая замена существующего, наложение картинки на картинку возможно? Или в консоли такое нельзя сделатьи поэтому, как не крути, всё равно 64 клетки придётся перерисовывать?
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
27.06.2013, 13:42 | 8 |
Зря ты так уверен
консоль это не черное окошко консоль это класс устройств которые могут работать с текстом например дисплей на часах то же может быть консолью да есть библиотеки которые могут выводить графику например у Borland C 3.1 была "graphic.h" но она была заточена под ДОС и очень платформа зависима в чем причина рисовать в консоли? почему не окна? если нужно платформо независимый код, используй Qt потом можно скомпилить и под Винду и под Линукс и под Мак
0
|
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|
27.06.2013, 13:50 [ТС] | 9 |
ValeryS, проще рисовать))) Зачем мне OpenGL, например, поиск картинок для доски и тд и тп, когда вот функции написал и всё круто. так сказать, "олд упрощение". Я не спорю, что через OpenGL было бы и лучше, и красивей, и качественней (графика), но при дальнейшей работе с проектом мне не нужно это. Т.е., у меня этот проект (шахматы) одна из частей другого проекта. где использование форм может быть проблематичным. Поэтому, упрощаю работу везде и на всём, на чём можно.
Да, может это и не очень правильно, но тут. я считаю, главное ведь как будут шахматы работать, а не как это представить в консоли или в форме, верно?
0
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 539
|
|
27.06.2013, 13:53 | 10 |
можно.
но действительно как я уже написал, куда проще этим заниматься directx'ом например. времени затратишь 2-3 дня на изучение нужного материала. столько же, сколько и на консольную графику.
1
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
27.06.2013, 14:01 | 11 |
т.е самому изобретать алгоритм рисования линий
окружностей,заливки и много чего еще проще чем использовать готовые библиотеки? прикинь алгоритм заливки замкнутой фигуры причем OpenGL или там DirectX работает напрямую с железом и оптимизирован а тебе придется работать только на программном уровне для этого и придуманы DLL Тогда не заморачивайся с рисованием а используй шахматную запись например Л a1-a6 так и проще будет вводить ходы а с графикой тебе нужно будет или мышь использовать или курсор гонять
0
|
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|
27.06.2013, 14:44 [ТС] | 12 |
@ValeryS, изобрести алгоритм рисования для меня, ИМХО, проще, чем использовать готовое.
Пробелма в том, что этот проект для ОС.
0
|
погромист
415 / 251 / 30
Регистрация: 27.08.2012
Сообщений: 550
|
||||||
27.06.2013, 14:53 | 13 | |||||
Вот максимум, что можно выжать из символов аски в консоли.
Кликните здесь для просмотра всего текста
Добавлено через 3 минуты Код ужасен для примера, писал давно для своих нужд, так что извиняйте
1
|
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|
27.06.2013, 15:26 [ТС] | 14 |
@coloc, это символы, хотя я тоже об этом думал!
Права, у меня выползла тьма ошибок, надо убдет библиотеки подправить, я работаю за VS 2010. Спасибо вам за пример!!
0
|
погромист
415 / 251 / 30
Регистрация: 27.08.2012
Сообщений: 550
|
|
27.06.2013, 15:30 | 15 |
@YYwww, покажите ошибки
0
|
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|
27.06.2013, 15:48 [ТС] | 16 |
Ой, прошу прощения, там случайно одна из цифр-строчек с этого форума попала между библиотеками. нашёл, исправил, всё работает!
О, да у вас неплохо получилось! Единственное. что было бы неплохо, это малость ув. картинку. Прокомментируйте алгоритм вашей работы, вкратце, пожалуйста. *т.е., что вы делали. чтобы так получилось.
0
|
погромист
415 / 251 / 30
Регистрация: 27.08.2012
Сообщений: 550
|
|
27.06.2013, 15:59 | 17 |
Алгоритм не сложный:
Сперва создаем двумерный вектор( массив ) из фигур enum figure, где описаны все шахматные фигуры двух цветов. Потом в перегруженном операторе программа проходит по двум циклам, которые выводят элементы этого вектора на экран. Конструкция свитч выбирает цвет в зависимости от фигуры и выводит ее на екран. В конструкторе присваивается всем элементам вектора определенные фигуры.
1
|
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|
27.06.2013, 16:04 [ТС] | 18 |
о, более-менее понятно! Большое вам спасибо, @coloc!
0
|
погромист
415 / 251 / 30
Регистрация: 27.08.2012
Сообщений: 550
|
||||||
27.06.2013, 16:13 | 19 | |||||
Кликните здесь для просмотра всего текста
1
|
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|
27.06.2013, 16:20 [ТС] | 20 |
@coloc,
Спасибо вам огромное!!!
0
|
27.06.2013, 16:20 | |
27.06.2013, 16:20 | |
Помогаю со студенческими работами здесь
20
C++ Консоль. Графика На консоль выводит, а в файл нет. В чем может быть дело? Циклические алгоритмы: дописать формулу и сделать построение графика Как должна быть организована сеть офиса? Что должно быть настроено обязательно, а чего быть не должно? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |