![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 25.12.2013
Сообщений: 12
|
![]()
Обычно я просто гуглю и нахожу то, что надо, но в этот раз такой способ не прокатил...
Собственно в чём вопрос: реально ли, пользуясь стандартными библиотеками винды и дельфи, выводить в консольном режиме символы разных цветов (желательно произвольных) так, чтобы каждый символ имел свой собственный цвет? (не свойства->цвет текста-> выбрать один из нескольких, а один символ - один #RRGGBB) Просто неделю до Нового Года вообще ничего не делать как-то не комильфо, а просто играть в компьютер - явно не выход, даже если есть прорва других занятий... А почему дельфи - это единственный на данный момент язык, которым я более-менее владею. P.S. Немног граммар-наци. Еще освоиться не успел, а уже критикую... При регистрации над строкой, где надо ответить на вопрос - "Семь в квадрате (цифрой)" или "Тридцать три процента от трехсот (цифрой)", надо, по-хорошему, заменить "цифрой" на "числом" ![]() |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]() Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 25.12.2013
Сообщений: 12
|
![]()
Благодарю, это как раз почти то, что мне было нужно. Насколько я понял, второй параметр SetConsoleTextAttribute записывается как [0..15] + [0..15]*16 и представляет из себя все комбинации цветов текста и цветов фона?
Да, действительно, на лекциях этого нет, а если искать, то надо иметь хоть отдалённое представление об искомом предмете... Спасибо! |
![]() |
![]() |
![]() |
#4 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]()
Могу добавить, что соответствующий раздел Platform SDK носит название Console API, там же описаны константы цвета, в Delphi -- в модуле Windows (WinAPI.Windows в модных версиях), если не путаю.
В разработке: воспроизводственный контур ИТ
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 25.12.2013
Сообщений: 12
|
![]()
Уф.
Бьюсь уже часа полтора, но не нашел ни малейшей зацепки. Ситуация такая: имеется объект-массив, в котором может измениться произвольная ячейка. Так при изменении, скажем, с 10 на 10-5 = 5, значение меняется, но при повторном вычитании пятёрки она вычитается из тех же самых десяти... Собственно, сам код (тут ограничение в 5000 символов, поэтому архивом): Код:
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 25.12.2013
Сообщений: 12
|
![]()
Ну, и чтоб два раза не встатвать, вопорс:
Как мне сделать _нормальный_ посимвольный ввод? без кучи лишних энтеров, а как в классическом Borland Pascal'е? |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 25.12.2013
Сообщений: 12
|
![]()
Всё, разобрался. Я грешил на передачу не по адресу, а по значению в какой-то процедуре, но никак не мог отыскать это место.
И только что, после питья чая, я понял - я искал то что надо, но не там, где надо! Код:
|
![]() |
![]() |
![]() |
#8 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Во-первых, имхо, теме место в "создание и обсуждение игр" (даже если это студзадание)
Во-вторых, Вам серьёзно помогут ресурсы, направленные на создание рогаликов - из русскоязычных, пожалуй единственный www.rlgclub.ru В-третьих, конкретно для дельфи есть годные решения по "опаскаливанию" консольной работы, см. например сюда http://programmersforum.ru/showthread.php?t=224636 да и вообще можно пройтись поиском по форуму - уже многое обсуждалось (в т.ч русский текст в консоли, если надумаешь). По указанному направлению есть и ответ на вопрос как сделать readkey (правда там модуль староват, и виндовые декларации в новых дельфях чутка поменялись, если сами не разберётесь, как там пофиксить несколько строк, могу посодействовать) Ну и ещё, вот кодревью: 1. обязательно использовать устаревший object ? о class не думали ? Между прочим, проблема которую описываете в последнем посте, как раз бы решалась за счёт "компиляторного механизма" классов и их экземпляров (экземпляры и есть указатели и их присвоение это не копирование данных, а присвоение указателя), и вы бы не искали её так долго. 2. в чём проблема константы размеров мира использовать в декларации массива? что за //due do strange errors, change values in Tworld.world: array[...] too! 3. Зачем извечная копипаста GetStdHandle(STD_OUTPUT_HANDLE) ? может надо просто запомнить в переменную? Хотя если задействовать модуль из совета выше, то эти все функции вообще уйдут в небытие, останутся только "говорящие" 4. тут нет выхода за размер массива если стоять на "нижнем" слое? while (world[player.x,player.y,player.z+1].value=0) или мир окружён непроходимыми границами , которые в массиве есть и на них нельзя встать , вроде в коде не увидел чего-то такого. 5. довольно много копипасты и непонятного , "магического" кода, я понимаю, что с этим сложновато бороться на начальном этапе, и всё же советую избавляться от копипасты потихоньку - больше разбивать на подпрограммы и вводить типы. http://www.gunsmoker.ru/2011/01/blog-post.html 6. Ну и, как обычно, индентация и кодстайл, http://www.gunsmoker.ru/2010/07/blog-post.html зы. c:='ы'; лол |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 25.12.2013
Сообщений: 12
|
![]()
Спасибо за развернутую и конструктивную критику.
Да, с выбором раздела я облажался; дошло это до меня не сразу, а тема уже была опубликована. Ну, если мыслить логически, всё верно: я одновременно и новичок в программировании, и студент, и мне нужна помощь. Соответственно, почему бы и не поместить в раздел "Новички в программировании > Помощь студентам"... За все ссылки - спасибо, в частности, за последние две - нашёл ещё большее количество недоразумений у себя в коде; с удивлением обнаружил, что моё форматирование кода для более приятного чтения, оказывается, основано на уже существующем стандарте, осталось лишь "доделать" мелкие неприятности (после нового года покажу этот стандарт одногруппникам, пусть радуются ![]() Спасибо и за ревью ![]() 1. Вот насчет object'ов и class'ов, думаю, вина института: до вашего комментария я полагал, что object'ы - наследие Паскаля для консольного режима, а class'ы - для VCL режима Дельфи. Сейчас я поменяю и верну эту кривую часть кода с указателем в нормальное состояние. 2. А проблема с массивами и константами есть: вот на такой строчке Код:
Код:
Возможно, проблема кроется в кривости самой IDE, которой я пользуюсь: это Borland Turbo Delphi 2005 года, запущенная на седьмой винде, из-за чего приходится каждые несколько десятков строчек нажимать Ctrl+S. Даже в институте на Windows Server 2003 постоянно вылетают сообщения типа "Personality is noy supported", "Invalid pointer operation" при перемещении каретки в текстовом поле посредством мыши, "Access read violation at address ..." при проверке компилятором правильности кода... Так что пытаясь кодить в такой штуке, меня корректность моего кода волнует меньше, чем осознание того, что сейчас я напишу ещё одну строчку, а оно возьмёт и внезапно вылетит... Особенно странно выглядит табличка при запуске Код:
4. ![]() 6. А еще у меня в IDE нет автоматического форматирования, так что всё ручками (ну или оно та-ак глубоко запрятано...) Последний раз редактировалось Xobotun; 28.12.2013 в 15:26. |
![]() |
![]() |
![]() |
#10 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
1. Обджект, класс никак не связаны с консольным или всл-режимом. Это легко определить логическим путём - ведь есть программы не консольные и не оконные (которые выполняют свою работу и закрываются, без участия пользователя) - какие там были бы доступны средства ООП, если обджекты и классы уже заняты ? Из такой постановки следует, что связи быть не должно.
Посему, если будете идти по пути изучения ооп на классах (а сейчас это стандарт, особенно для дельфи), то вот http://delphikingdom.ru/lyceum/seminar.asp?ID=6 там ООП начиная с 3 главы, но бывает полезно прочитать вообще всё. 2. Я догадался по комментарию, о чём и написал ) Оказывается, проблема действительно есть, а причина - типизированные константы, уберите :byte в декларации констант и всё будет гуд, тем более что компилятор (емнип) сам определяет достаточные размеры для констант в исполняемом файле, смысл пользоваться типизированными константами есть только в небольшом количестве задач. Трубодельфи не трогал, но читал что жутко глючная. Мой выбор дельфи2007, бывает, конечно, подлагивает, но в целом, очень редки опасные лаги, зато для меня самый оптимальный инструмент, ибо сие есть самая последняя неюникодная иде. С фичами типа рефакторинга, xml-документация с кодинсайтом, управления билд-конфигурациями и билд-ивентами, есть inline и ReportMemoryLeaksOnShutDown. Иногда использую дельфихе2, когда юникодность нужна или неважна, там есть и другие полезные фичи, типа профилировщика (какая-то из крупных редакций). 3,4,5 уже так понимаю, сами проработаете и частично проработали, так что молодцом. Единственно, ничего не сказали про модуль spcrt ? пробовали ? readkey мастхев. 6. автоформатирование в иде появилось в дельфихе , но оно доступно через плагины/эксперты, подробно описывал тут http://programmersforum.ru/showthread.php?t=248866 в статье по ссылке, что я давал в первом посте, вроде тоже есть Теперь по обновлению кода. 1. Не увидел уменьшения магии. Совет - прочитать про enumerations , как минимум сюда : dirt,copper,silver,gold,diamond,air и сюда: value, color, life они просятся 2. Из того , что легко отрефакторить - Много однотипного кода для перемещения, я бы сделал функцию для wasd принимающую dx dy - уже прилично бы сократив код и издержки на его модификацию. довольно много кода по управлению консолью однотипного, тоже можно было бы обернуть удобно, хотя может использование модуля spcrt и так сократит эти издержки. 3. По сути игры - я бы советовал юзать не полный рандом, а с определённой закономерностью - чтобы образовывались "залежи" 4. И ещё не понятно, чего делать, ну углубился, поднялся, накопал плюшек и получил очки. Чего ещё пока не понятно, и вечно перспектива не долететь до верха ) если жадничать с бурением |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
выполнить в консольном режиме на С++ | Артур31 | Помощь студентам | 6 | 09.11.2012 17:07 |
написать программу из формул Delphi в консольном режиме | Ramil999 | Помощь студентам | 9 | 05.10.2011 06:43 |
Програма для Delphi в консольным режиме | dima992 | Помощь студентам | 3 | 08.02.2011 14:10 |
Задача на работу с массивом + char (Delphi в консольном режиме) | [COOLER] | Помощь студентам | 9 | 02.01.2010 20:16 |
Как сделать границы формы другого цвета,формы?? | Дима я | Общие вопросы Delphi | 3 | 22.06.2009 07:24 |