12/05/2004 в 00:23 были начаты работы по созданию русской IF-платформы для написания игр с текстовым вводом команд. От DOS'а пришлось отказаться в пользу Win32. Пишется всё на Delphi.
По состоянию на сегодняшний день дела идут удовлетворительно. Вот только вывод информации на экран в консольном приложении под Win95 происходит немного тормознуто (реанимировал для тестов свой старенький компьютер: CPU:486 160МГц/Mem:40MB/S3 Virge DX 2MB/HDD:426MB).
Если кто знает, как в консольном приложении использовать свои шрифты (в полноэкранном режиме), просьба сообщить — буду очень признателен.
Постараюсь по возможности сообщать о ходе работ...
Неактивен
Помимо низкоуровневых модулей для работы с экраном, клавиатурой, сжатыми данными и т.п. закончен модуль для вывода на экран определённым образом размеченного текста (типа html, но в тексте). Все теги разметки на русском языке, как, впрочем, и весь внутренний язык будущей платформы.
Для примера несколько тегов:
<ПО.ЦЕНТРУ></ПО.ЦЕНТРУ>
<СПРАВА></СПРАВА>
<ПО.ШИРИНЕ></ПО.ШИРИНЕ>
<ЦВЕТ></ЦВЕТ>
а также:
<КЛ.ЛЮБАЯ>
<КЛ.ВВОД>
и многие другие.
Неактивен
Olegus t.Gl. написал:
Если кто знает, как в консольном приложении использовать свои шрифты (в полноэкранном режиме), просьба сообщить — буду очень признателен.
А почему консоль на дельфи? Только оттого, что с VCL добавляется лишних 250-300КБ ? ;D
Тогда посмотри тут:
http://xcl.cj.net
http://kol.mastak.ru
Скачай KOL и MCK. Работаешь с ними как с VCL (или ПОЧТИ как с VCL), а экзешники выходят по 25-50 КБ. Я не шучу!
Неактивен
Консоль ради текста. Мне нужен текстовый ввод/вывод информации.
Неактивен
Постой... Или это я не соображу ???
Самое примитивное: кидаешь на форму TMemo и TEdit. Через первое выводишь текст, через второе - читаешь команды.
Если нужна "классика" - задаешь форме, memo и edit'у черный цвет, а текст выводишь белым. Убираешь все borders. Делаешь memo readonly=true. Пресекаешь все попытки передать фокус ввода memo.
Неактивен
А зачем это нужно? Мне ведь нужна работа в текстовом режиме. Вот я и работаю с консольным приложением. Зачем весь этот мудрёж с формами и т.п.?
Неактивен
Под DOS я рисовал свои шрифты и без особых проблем подключал их. Как сделать это под Win32, я не знаю.
Что касается выравнивания и т.п., то это делается просто: либо текст выводится с нужной позиции, либо (если выраванивание "по ширине") промежутки между словами дополняются пробелами...
Неактивен
Под DOS я рисовал свои шрифты и без особых проблем подключал их. Как сделать это под Win32, я не знаю.
В ДОС все было по-другому... В консольном приложении под винду в делфи даже нет доступа к классу TApplication Короче, нет у меня пока идей на этот счет. Может быть, через WinApi можно?
Что касается выравнивания и т.п., то это делается просто: либо текст выводится с нужной позиции, либо (если выраванивание "по ширине") промежутки между словами дополняются пробелами...
А как вычислять ширину окна? Заранее просчитать кол-во символов, которые умещаются в одну строку при разных разрешениях экрана? Хотя и разрешение не определишь...
Вообщем, даже не знаю :-/
По-моему, использование моего варианта - не мудрёж, а обоснованный уход от большинства проблем. А про большой размер исполняемых файлов я уже рассказал.
P.S. 6 постов в теме за один день! Просто чат какой-то выходит
Неактивен
Nash, судя по всему, с консольными приложениями работать тебе не приходилось, иначе ты бы знал, что всех этих проблем (ширина экрана и т.п.) не существует.
Что касается процесса, то в настоящее время идёт работа над транслятором-компилятором (или типа того — я не особо силён в терминологии), который будет переводить исходники игры в некий промежуточный код, который будет проигрываться отдельной программой. Не могу не выразить восхищение методом обратной польской записи, предложенного миру математиком (само собой польским) Я. Лукашевичем. Столь компактные правила, реализущие столь стройную и гибкую систему!.. Разве что в бухгалтерском учёте я встречал нечто подобное.
Неактивен
Nash, судя по всему, с консольными приложениями работать тебе не приходилось, иначе ты бы знал, что всех этих проблем (ширина экрана и т.п.) не существует.
Почему же? Приходилось, но совсем немного Для простых задач, вроде "прочитать файл - обработать данные - записать результаты в файл". А для работы с текстом - тут ты прав.
Сейчас вот пересмотрел хелп по WinApi. Кажется, шрифт в консоли поменять никак нельзя. Цвет можно, кодовую страницу - можно.
Что скажут другие?..
Что касается процесса, то в настоящее время идёт работа над транслятором-компилятором (или типа того — я не особо силён в терминологии), который будет переводить исходники игры в некий промежуточный код, который будет проигрываться отдельной программой. Не могу не выразить восхищение методом обратной польской записи, предложенного миру математиком (само собой польским) Я. Лукашевичем. Столь компактные правила, реализущие столь стройную и гибкую систему!.. Разве что в бухгалтерском учёте я встречал нечто подобное.
Очень интересно!
Проблема компиляции - это то, что волнует меня сейчас превыше всего. Не подскажешь ли какую ссылку на ресурс, с которого ты брал правила метода обратной польской записи, пожалуйста? Или это книга?
Неактивен
Гениальное в своей лаконичности изложение основных принципов метода обратной польской записи: http://algolist.manual.ru/syntax/revpn.php
Главное пропустить первые абзацы. Суть начинается со слов "Во-втоpых, получение обpатной польской записи из исходного выpажения...". Прилагаемый там исходник не смотрел.
Неактивен
Кстати, о компиляции.
Можешь посмотреть здесь http://compilers.iecc.com/crenshaw/
Очень хороший гайд (кстати, где-то там лежит весь цикл статей в одном архиве, ~300Кб. Если инет повременный ).
Собственно, весь ресурс очень неплох. Жаль, вопросы, которые там рассматриваются, по большей части: как компилировать один из имеющихся языков в exe.
Неактивен
Движки, я так понимаю :-/
Извини, Гранд, я очень ценю твою работу по русификации TADS'а, но полноценного IF по-русски так ведь не получишь
Проблем тут две:
1) за нашу работу никто не платит (иначе она была бы закончена эдак лет 5 назад)
2) все мы стремимся натянуть на себя лавровый венок, поэтому работаем по одиночке или малыми группами...
Olegus
Держись!
Такие люди, как ты, и сдвигают дело с мертвой точки. К сожалению, помочь не могу, учеба...
Неактивен
Nash написал:
Извини, Гранд, я очень ценю твою работу по русификации TADS'а, но полноценного IF по-русски так ведь не получишь (
Почему?
Неактивен
Ребята, перво-наперво давайте определимся. В настоящее время я пишу именно движок. Причём пишу его пока что для себя. И начал писать я его потому, что написание игры на существующих языках программирования — вещь очень проблематичная (у меня есть две-три вещи, которые заброшены из-за того, что я начал просто путаться в нагромождении кода). Так что если-таки у меня хватит сил доделать то, что я затеял, в первую очередь вы получите не сам движок, а игру.
Неактивен
Gottlieb_Leberecht написал:
Почему?
Кажется, мы удаляемся от главной темы. Вкратце, если TADS вдруг кардинально поменяют, придется все заново переводить.
На повестке дня остается вопрос: можно ли в консольном приложении (скомпилированном в делфи) менять ШРИФТ текста?
Olegus
С трудом сдерживаю себя...Цитата А.Новичкова из статьи о Rational Rose:
"Тут на ум приходит еще одно традиционное для России высказывание разработчика: “мне проще все написать заново”. И ведь пишут…"
Вот вам и вся фабула эпохи русского IF. В цитате - это упрек, здесь - нет. Лично я ЗА то, чтобы кто-то из нас написал платформу, которая будет иметь нормальный парсер, понимать падежи, иметь русский синтаксис etc.
Ждем игру!
Неактивен
Я извиняюсь, за то что-то вклиниваюсь с офф-топиком, но действительно интересно.
Кажется, мы удаляемся от главной темы. Вкратце, если TADS вдруг кардинально поменяют, придется все заново переводить.
1) Почему придётся всё заново переводить? Тебя что-то не устраивает в текущей версии, которая (не перевод библиотек, а оригинал, естественно) доводилась до ума в течение десяти лет?
2) TADS2 УЖЕ не поменяется — его разработка завершена. Разрабатывается дальше только TADS3.
Вот вам и вся фабула эпохи русского IF. В цитате - это упрек, здесь - нет. Лично я ЗА то, чтобы кто-то из нас написал платформу, которая будет иметь нормальный парсер, понимать падежи, иметь русский синтаксис etc.
А чем конкретно тебя не устраивают русифицированные Inform и TADS2? Обе системы понимают нормальный русский язык и выдают ответы на нормальном русском языке. Возможно, парсинг падежей/ещё что-то выполнены не очень элегантно, но есть ли лучшие способы? И потом, нужны ли они, если всё и так нормально работает?
Неактивен
Nash: "Кажется, мы удаляемся от главной темы."
Тема у нас заявлена как: "В общем, дело поехало...". По-моему, она настолько общая, что от неё черезвычайно трудно отклониться
Nash: "Вкратце, если TADS вдруг кардинально поменяют, придется все заново переводить."
ТАДС кариданльно не поменяется. Он и раньше менялся с сохранением обратной совместимости, а теперь вообще почти не обновляется. Автор занят разработкой новой версии (уже около 4 лет, причем, он - профессиональный программист ).
Nash: "Лично я ЗА то, чтобы кто-то из нас написал платформу, которая будет иметь нормальный парсер, понимать падежи, иметь русский синтаксис etc."
Я это всё, конечно, понимаю, и уважаю подобное рвение. Просто я знаю: не бывает игр без движка, но бывают движки без игр. Как я понял, Олегус, от которого зависит организация конкурса, делает игру для участия в нем. И я тревожусь: дождемся ли мы этого события?
Неактивен
Тема у нас заявлена как: "В общем, дело поехало...". По-моему, она настолько общая, что от неё черезвычайно трудно отклониться
Шутки - шутками, а тема-то была создана, для того, чтобы Олегус информировал нас о ходе работ над своим движком.
Сомневаюсь, что он одобрит наши очередные плачи по поводу нежелания нас самих писать игры...
Как я понял, Олегус, от которого зависит организация конкурса, делает игру для участия в нем. И я тревожусь: дождемся ли мы этого события?
Надеюсь, все у него получится. Пускай не сразу, но выйдет. (трижды стучу по дереву)
Olegus
Я понимаю, ты решил писать трансляцию исходника с нуля? Не переводить синтаскис твоего языка, скажем на Паскаль, и трансляции его с помощью Pascal Web Script'a или Innerfuse Pascal Script?
Неактивен
Давайте наведём немного порядка в обсуждаемых вопросах.
Во-первых, организация конкурса от меня не зависит. Но это вовсе не значит, что если вдруг его потребуется провести, то я не помогу.
Во-вторых, игру я пишу не для конкурса. Поэтому его проведение никак не привязано к срокам её выхода.
В-третьих, раздел (а не тема!) называется "Разработка русской IF платформы". Поэтому тема не такая уж общая...
Неактивен
Nash написал:
Olegus
Я понимаю, ты решил писать трансляцию исходника с нуля? Не переводить синтаскис твоего языка, скажем на Паскаль, и трансляции его с помощью Pascal Web Script'a или Innerfuse Pascal Script?
Я не настолько крут. Будет компилятор для получения кода игры в определённом формате, и будет виртуальная машина (так это вроде называется) для проигрывания этого кода.
Неактивен
Я не настолько крут. Будет компилятор для получения кода игры в определённом формате, и будет виртуальная машина (так это вроде называется) для проигрывания этого кода.
Я же не имел в виду, собираешься ли ты приводить исходник к exe, а именно схему работы с интерпретатором. И что, ты считаешь - это не круто?
Анализ исходника ты пишешь сам. А значит должен сам проверять уровни вложенности открывающих и закрывающих операторов, вести таблицы переменных и функций, вычислять те же арифметические выражения (Лукашевича ведь еще надо как-то на паскале написать!). Поверь мне - это более чем круто.
Неактивен
Вроде как получилось реализовать работу с массивами, пока предусмотрено только три вида массива: одномерный ("Список"), двумерный ("Таблица"), трёхмерный ("Кирпич", название рабочее, если кто придумает что-то подходящее — сообщите).
Неактивен
Olegus t.Gl. написал:
Вроде как получилось реализовать работу с массивами, пока предусмотрено только три вида массива: одномерный ("Список"), двумерный ("Таблица"), трёхмерный ("Кирпич", название рабочее, если кто придумает что-то подходящее — сообщите).
Если трехмерный - то "Куб". ИМХО, мненонически самое правильное название...
Неактивен
Nash написал:
Если трехмерный - то "Куб". ИМХО, мненонически самое правильное название...
Тогда уж параллелепипид, он, в отличие от куба, может иметь разную длину сторон
Хорошо звучит - параллелепипид данных. Только написать его правильно многим будет непросто
Неактивен
Olegus t.Gl. написал:
Будет компилятор для получения кода игры в определённом формате, и будет виртуальная машина (так это вроде называется) для проигрывания этого кода.
Все это, естественно, отсутсвует в RTADS и Русском Inform.
Честно скажу, я не ожидаю от "системы" многого. О сроках разработки я уж не говорю — _годы_ покажут.
Т.о. мое отношение к разработке (и трате на это сил) негативное.
Неактивен
GrAndrey
Тогда уж параллелепипид, он, в отличие от куба, может иметь разную длину сторон
Трехмерный массив с разной длиной сторон? А зачем он будет нужен в IF? (я вот даже сомневаюсь, будет ли вообще востребован трехмерный массив, но если автору не трудно его реализовать - пускай будет на всяк случай ).
А куб звучит попроще
Только написать его правильно многим будет непросто
Да ну, написать (объявить, я понимаю?) несложно. Это ж не динамические массивы...
Stas Starkov
Все это, естественно, отсутсвует в RTADS и Русском Inform.
??? А что тогда из себя представляет файл *.gam, например?
Честно скажу, я не ожидаю от "системы" многого. О сроках разработки я уж не говорю — _годы_ покажут.
Т.о. мое отношение к разработке (и трате на это сил) негативное.
А альтернатива?
Неактивен
Nash:
>>Да ну, написать (объявить, я понимаю?) несложно. Это
>>ж не динамические массивы...
Нет, правильно написать слово параллелепипид
Stas Starkov
Quote:Все это, естественно, отсутсвует в RTADS и Русском Inform.
>> ??? А что тогда из себя представляет файл *.gam,
>> например?
Памятка: сарказм - это не старческая болезнь, и не опухоль. Это такие реплики, которые будучи записанными на форуме, часто неправильно воспринимаются. Вспоинается давнишняя тема :
https://forum.ifiction.ru/viewtopic.php?pid=7289#p7289
Неактивен
Дважды неверно понять собеседника - это еще надо постараться
Да, "параллелепипед" - это очень сложное слово, а потому "куб". Спасение для развращенных мышкой пользователей.
Памятка: сарказм - это не старческая болезнь, и не опухоль
Ну хорошо. Вот покажете мне, как без лишней головной боли воплотить РЕАЛЬНУЮ многообъектность в RTADS, да еще чтоб отдельные экземпляры ОДНОГО объекта можно было перекидывать из контейнера в контейнер...придется согласиться, что разработка русской платформы никому не нужна.
Неактивен
Nash написал:
Ну хорошо. Вот покажете мне, как без лишней головной боли воплотить РЕАЛЬНУЮ многообъектность в RTADS, да еще чтоб отдельные экземпляры ОДНОГО объекта можно было перекидывать из контейнера в контейнер...придется согласиться, что разработка русской платформы никому не нужна.
Все это без проблем делается в Python/Hydra
Неактивен
Nash написал:
Ну хорошо. Вот покажете мне, как без лишней головной боли воплотить РЕАЛЬНУЮ многообъектность в RTADS, да еще чтоб отдельные экземпляры ОДНОГО объекта можно было перекидывать из контейнера в контейнер...придется согласиться, что разработка русской платформы никому не нужна.
И покажу:
myachik : item sdesc = "мячик" rdesc = "мячика" ddesc = "мячику" vdesc = "мячик" tdesc = "мячиком" pdesc = "мячике" adjective = 'небольшой' 'резиновый#t' 'небольшого' 'небольшому' 'небольшому#d' 'небольшим' 'небольшим#t' 'небольшом' 'резиновый' 'резиновый#t' 'резинового' 'резиновому' 'резиновому#d' 'резиновым' 'резиновым#t' 'резиновом' noun = 'мячик' 'мячика' 'мячику' 'мячиком' 'мячике' 'мячику#d' 'мячиком#t' ldesc = "Небольшой резиновый мячик." isHim = true ; /* Внутри какой-либо из процедур, создаем экземпляры объекта. В данном примере, внутри процедуры осмотра стартовой комнаты, если она произодится впервые */ startroom: room ldesc = { if (!startroom.issen) { local myachik1 = new myachik; myachik1.moveInto(startroom); /* Далее можно поменять его свйоства. Например, добавить новые имена, позволяющие различать созданные объекты */ } } ;
Для любого, кто хотя бы поверхностно ознакомился с языком RTADS, этот код будет довольно понятен. С динамически созданными объектами система будет обращаться совершенно так-же, как и зарнее созданными.
P.S. Мячик описан за 10 секунд при помощи все того-же легендарного "Генератора" ;D
Неактивен
Погодите, но вот же отрывок из мануала по RTADS:
Еще одной из вариаций на ту же тему является набор неотличимых друг от друга объектов. Например, мы хотим реализовать спичечный коробок, полный спичек. Игрок должен иметь возможность взять одну спичку из коробка, чтобы зажечь ее.
Однако, поскольку TADS требует индивидуального набора лексических свойств для каждого объекта, нам придется-таки наложить некоторые ограничения на действия игрока. В частности, в каждый конкретный момент времени игрок сможет держать в руках только одну спичку - все остальные спички должны оставаться в коробке.
А если у меня есть патронташ и я хочу брать произвольное кол-во патронов, чтобы зарядить их в мой боевой пистолет? Дальше в мануале идет страница исходного кода решения со спичками. И это если позволено брать только одну спичку из коробка. Мне придется городить вдвое больше?
ЗЫ. Не судите слишком строго, RTADS я знаю действительно поверхностно...
Неактивен
Nash написал:
Погодите, но вот же отрывок из мануала по RTADS:
А если у меня есть патронташ и я хочу брать произвольное кол-во патронов, чтобы зарядить их в мой боевой пистолет? Дальше в мануале идет страница исходного кода решения со спичками. И это если позволено брать только одну спичку из коробка. Мне придется городить вдвое больше?
ЗЫ. Не судите слишком строго, RTADS я знаю действительно поверхностно...
В TADS есть понятие неразличимых объектов (они имеют флаг isEquivalent и общий суперкласс). Только что динамически создал 25 патронов. Брать их получается только по одному. Буду писать анализ для числительных.
Неактивен
"Куб" так "куб". Трехмерный массив может пригодится для моделирования пространства.
Насчёт переменных: в моей платформе определения переменной с указанием типа будет не нужно (хотя нужна будет инициализация или типа того) — её тип будет определяться присвоенным значением. В выражениях будет происходить автоматическое приведение типов и т.п.
Все массивы будут динамическими. Можно, конечно, загнуть насчёт двумерных и трёхмерных массивов разной формы (треугольник, пирамида и т.п.), но немного подумав я это решил отложить.
P.S. Не думайте, что описанные фичи отняли бОльшую часть времени (на тему — ковыряясь в мелочах, забыл о главном)...
P.P.S. Различные примеры из других платформ весьма интересны и познавательны, однако не стоит превращать эту тему в FAQ по этим платформам. В то же время, я ни в коем случае не запрещаю некоторую отвлечённость в разговоре. Но придерживайтесь меры...
Неактивен
Насчёт переменных: в моей платформе определения переменной с указанием типа будет не нужно (хотя нужна будет инициализация или типа того) — её тип будет определяться присвоенным значением.
Да, с одной стороны - это есть правильно и проще. С другой - довольно сложно проследить, где же в первый раз была объявлена переменная И усложняется контроль над ошибками в компиляторе.
Но это все к спору между сторонниками паскаля и си.
А будут ли в платформе функции (именно функции, а не процедуры)? И еще - переменные будут делиться на локальные и глобальные (с учетом подключаемых библиотек)?
Неактивен
Поскольку переменная может менять тип при присвоении значения другого типа, то вопрос, где она была впервые объявлена не стоит так уж остро. Другое дело, что из-за подобного подхода ряд ошибок будет проявляться не на этапе компиляции, а на этапе выполнения кода, — это действительно проблема, но тут уж ничего не поделаешь.
Возможность создания своих процедур и функций будет (вот только стоит ли разделять эти понятия?..), будет также разделение переменных на глобальные и локальные, будет возможность подключения модулей, т.е. кусков кода (или откомпилированных модулей, что сделать реально, но нужно хорошенько продумать) из внешних файлов.
Неактивен
Nash написал:
Погодите, но вот же отрывок из мануала по RTADS:
А если у меня есть патронташ и я хочу брать произвольное кол-во патронов, чтобы зарядить их в мой боевой пистолет? Дальше в мануале идет страница исходного кода решения со спичками. И это если позволено брать только одну спичку из коробка. Мне придется городить вдвое больше?
(Так вот что ты имел в виду... Точнее надо формировать техническое задание. :-) )
То, чего ты хочешь, не реализовано ни в одной (насколько я знаю) системе IF кроме TADS3! Это просто объяснимо — это весьма сложно сделать и при этом сделать "правильно". Плюс к тому, необходимость в подобной функциональности возникает не часто и, как ты сам видел, это ограничения _можно_ обойти.
А можно узнать, имеется ли данная вещь хотя бы в списке желаемого в "IF платформе"? А в RTADS это _уже_ возможно, пусть и не без труда (чужого, кстати, — код-то уже написан добрыми иностранцами).
Неактивен
То, чего ты хочешь, не реализовано ни в одной (насколько я знаю) системе IF кроме TADS3!
А в RTADS это _уже_ возможно, пусть и не без труда (чужого, кстати, — код-то уже написан добрыми иностранцами).
Так "не реализовано" или "возможно"?
Плюс к тому, необходимость в подобной функциональности возникает не часто
А я вот хочу реализовать деньги, как монеты, а не "нечто виртуальное"...Да и вообще - если писать игру с ролевым уклоном, там большинство предметов попадает в категорию клонов, с которыми практически нереально работать, динамически генеря их во время игры...
Неактивен
Дело хоть и медленно, но продвигается. Пока всё на стадии проектирования с программными "набросками" реализации некоторых алгоритмов. Так, вроде удалось разобраться и спроектировать работу со свойствами и методами объектов платформы...
В настоящее время работаю над реализацией в платформе работы как с типизированными переменными, так и с переменными без типа.
Изрядное количество хлопот доставляет реализация операций присваивания и сравнения на равенство через один знак "=". Обозначать эти операции по-разному (как в C или Delphi/Pascal'е) на мой взгляд не очень разумно.
Неактивен
dennis написал:
Использование РАЗНЫХ символов для присваивания и сравнения в C/C++/Inform — отнюдь не роскошь. Это бинарные операции, могут использоваться в любых контекстах, и иначе различить их нельзя.
Ясное дело, что не роскошь. Говоря проще, в C/C++/PHP/т.п. различие в обозначении этих операций обусловлено в первую очередь тем, что в этих языках можно использовать операции и сравнения, и присвоения в рамках одного действия (или как это там называется).
Я при проектировании платформы от этого сознательно отказался.
Неактивен
Работа идёт, хотя лето, солнце и т.п. несколько снижают темп...
Неактивен
По поводу консоли в Win32:
В 98 окнах изменение шрифта консоли - только извне, ручками.
В Вин2000 и ВинХР - таких возможностей не предусмотрено вообще. На то она и консоль.
Жаль, что нельзя менять шрифт. Хотя и несколько странно...
Неактивен
Uten написал:
По поводу консоли в Win32:
В 98 окнах изменение шрифта консоли - только извне, ручками.
В Вин2000 и ВинХР - таких возможностей не предусмотрено вообще. На то она и консоль.
Как это нельзя? Свойства, шрифт. Правда только два (наверно, можно ещё установить), но размеры на любой вкус.
Неактивен
GrAndrey написал:
Как это нельзя? Свойства, шрифт. Правда только два (наверно, можно ещё установить), но размеры на любой вкус.
Да, сорри, с Вин2к/ХР я погорячился.
Но это ничего не меняет, поскольку шрифт является свойством самой консоли, а не консольного приложения.
Насколько я помню в том же ДОСе небыло возможности изменить шрифт (не начертание, а размер), да и начертание - только обходными методами, которые не применимы к винде по определению.
У меня была прога, заменяющая стандартный ДОСовский шрифт, со встроенным "графическим" редактором. Использовал для улучшения графики в "рогалике". К сожалению, забыл как называется, а найти у себя уже не могу. С ДОС-игрой под виндами будет работать, если запустить их в одной консоли (запустить по очереди через батник).
Неактивен
Под DOS я и сам использовал самодельные шрифты. Написал даже редактор шрифтов. Под винды это, увы, непременимо.
Неактивен
GrAndrey написал:
У меня была прога, заменяющая стандартный ДОСовский шрифт, со встроенным "графическим" редактором. Использовал для улучшения графики в "рогалике". К сожалению, забыл как называется, а найти у себя уже не могу. С ДОС-игрой под виндами будет работать, если запустить их в одной консоли (запустить по очереди через батник).
Под ВинХР работает?
И все таки я не пойму. Зачем менять начертание шрифта в консоли, неужели цвета недостаточно?
С другой стороны есть тот же RichEdit, если так хочется "продвинутого" форматирования и прочих прибамбасов.
Кстати в HKEY_CURRENT_USERConsole лежат настройки консоли.
Менять из программы их нужно ДО открытия консольного окна.
Uten написал:
Кстати в HKEY_CURRENT_USERConsole лежат настройки консоли.
Менять из программы их нужно ДО открытия консольного окна.
А если программа открывается уже в консоли? Например, в FAR'e?
Неактивен
В любом случае это совсем не то, что я мне нужно.
Неактивен
Недавно, копаясь в kernel32.dll нашел следующие функции:
SetConsoleFont
SetConsolePalette
SetConsoleIcon
в Win32Sdk о них ни слова.
Это то что нужно?
Не знаю. Но вряд ли.
Неактивен
Ну как у вас там? Месяц прошел, а новостей не слышно... ??? :-/
Как это ни удивительно, но дело идёт...
Неактивен
В настоящее время идёт доработка транслятора базового языка платформы в байт-код. После этого будет создана "виртуальная машина" для проигрывания этого байт-кода, а следом за этим пойдёт реализация работы с объектами платформы: сложными типами данных, предметами, локациями, словарями, парсером и т.п. (и усложнение виртуальной машины)... Дел много, но они движутся в нужном направлении...
Неактивен
Кое-что вырисовывается...
Минимальный (и традиционный) текст программы выглядит так:
{Программа} {НачалоРаботы} НаЭкран("Привет, мир!"); {КонецРаботы} {КонецПрограммы}
Объектный файл (типа ассемблерного представления байт-кода) получается такой:
; Объектный файл создан компилятором xXxxxxxx.Xx (c) 2004-2005 Olegus t.Gl. ; Дата компиляции: 03.04.05 00:22:18 ; ; ТАБЛИЦА СТРОКОВЫХ РЕСУРСОВ STRING 0 , Привет, мир! ; ;СТАРТОВЫЙ МОДУЛЬ ;Тело модуля 1: FUNC_NEWSTACK 2: PUSHS 0 3: ADD_PARAM 4: FUNC_CALL_INT 23001 ;КОНЕЦ СТАРТОВОГО МОДУЛЯ
Работа на этом останавливаться не собирается...
Неактивен
Olegus, I am glad to see you work!
Это выглядит понятно! А как будет смотреться что-то посложнее?
Неактивен
А что именно интересует?
В настоящее время завершается рзработка базового уровня: арифметические, логические и строковые операции и функции, операторы ветвления, операторы циклов, работа с процедурами и функциями.
Работа с объектами: локациями, предметами, персонажами, словарём и т.п., будет начата в ближайшее время.
Неактивен
Потихонечку работа движется. Не так быстро, как хотелось бы, но всё же... Базовый язык — это всё-таки основа.
Неактивен
Однако, работа над контролем за ошибками, которые может допустить программист, — адский и очень кропотливый труд...
Кроме того продолжается работа над процедурами и функциями, создаваемыми программистом.
Неактивен
К сожалению, но ничего конкретного сообщить нечего. Продолжается работа над реализацией процедур и функций (с произвольным числом параметров, с параметрами по умолчанию и т.п.)
Неактивен
Судя по приведенному выше фрагменту кода, синтаксис будет похож на Бейсик. Это, безусловно, будет большим плюсом в плане освоения системы. Единственное, что тревожит как программиста - нумерация строк, поскольку это может (по собственному опыту знаю) привести к нерациональному использованию аналога команды "goto", что очень осложняет разработку более-менее серьезной программы.
Тем не менее, платформа выглядит перспективной. В любом случае - удачи в разработке. Подобная программа может серьезно изменить ситуацию в нашем (да простят меня остальные читатели форума) "IF-болоте".
Неактивен
ifn00b написал:
Единственное, что тревожит как программиста - нумерация строк, поскольку это может (по собственному опыту знаю) привести к нерациональному использованию аналога команды "goto", что очень осложняет разработку более-менее серьезной программы.
А причём здесь нумерация строк? Они пронумерованы в объектном файле (для контроля и только), в исходниках для goto ("перейти") будут использоваться метки.
Неактивен
Переделка объектной (или как там её) модели на "Глобальный контекст — Модуль объекта — Модуль процедуры/функции" занимает очень много времени и сил. Однако в результате как-то само собой решились вопросы использования констант, а также предупреждения о неиспользовании тех или иных переменных. К тому же сдвинулась с места работа с созданием процедур и функций. Отшлифовался немного вопрос видимости переменных, а также процедур и функций. Доработан вопрос возможности перекрытия переменных, процедур и функций Глобального (общего) модуля переменными, процедурами и функциями локальных модулей.
Рутина, но без её реализации подойти к самому интересному: объектам игрового мира, невозможно...
Неактивен
Прошёл год с объявления о начале работ. Дел было сделано не так уж мало, но и недостаточно для каких-либо демонстраций. В 2004 году по ряду причин (часто личного характера) работа топталась на одном месте. Основной прорыв был сделан в начале 2005 года, после чего можно с уверенностью говорить о том, что результат всё-таки будет.
Неактивен
Дела идут со скрипом, времени настолько мало, что не удаётся даже толком высыпаться. Однако ко второй годовщине с начала работ, что-нибудь да приготовлю...
Неактивен
Не сочтите за неуважение к Вашей разработке, просто продложение:
Может быть, попробовать реализовать простое подмножество языка Смолток? Там есть все, что нужно. Кроме того, еще в начале 90х под ДОС был создан русский интерпретатор, с переведенными на наш язык ключевыми словами/библиотекой класов, можно на на этот вариант Смолтока и соориентироваться.
P.S. Вобще, выдержать четкую границу между автором-писателем и автором-программистом достаточно трудно. Ведь при большом желании написать собственную текстовую игру вполне можно освоить какой-нибудь Phyton или тот же Smalltalk. А чтобы текстовый движок не сковывал фантазию автора, придется все более и более приближать его к функциональности обычного универсального языка программирования.
Успехов!
P.S. А сейчас вобще довольно грустная тенденция просматривается в современном искусстве, в том числе и компьютерном. Упор на технологичность, в ущерб собственно творчеству. Предочитают делать свои языки, движки, системы автоматической генерации и тд... избегая главного.
Не сочтите за критику Вашей работы, просто некоторые размышления...
Неактивен
Про Смолтолк - идея хорошая.
Меня лично удручают процедурные (де факто, хотя номинально они вроде как ООП) движки типа ТАДСа.
Расстраивает их многословность для описания простых вещей. И библиотеки поддержки (парсеры, объекты мира) раздуваются до невероятных пределов. От библиотеки TADS3 я вообще в шоке. А автору ИЛ это, вроде как, предлагается освоить (хотя бы часть), прежде чем что-то писать.
В этом смысле Смолтолк был бы кстати. С парадигмой Смолтолка (чистого ООП), как показала практика, и школьники разбираются играючи.
Но нужен фреймворк, потому как в Смолтолке средств для парсинга русского языка нету :-)
> еще в начале 90х под ДОС был создан русский интерпретатор
С этим как раз проблем нет. Вот взять хотя бы тот же сквик. Подо все основные платформы существует.
Для разработки вполне можно использовать полную версию с морфом (gui) и прочими причиндалами, а код экспортировать в минимальный образ. Те же школьники испанские на нём интерактивные книжки из подручных объектов и морфов клепали чуть ли не на второй день знакомства.
Проблема в одном - кто займётся? Софтом под сквик, который школьники осваивают так просто, Алан Кей сотоварищи занимаются. А он Смолтолк знает хорошо. Как-никак, авторство обязывает :-)
Касательно использования Смолтока для interactive fiction. По-моему, это замечательная идея, причем даже не потому, что Смолток более "объектно-ориентированный". Главное, за что я люблю Смолток -- это отсутствие цикла перекомпилляции -- вы "просто меняете методы"; возможность исправить ошибку и немедленно отправить программу выполнять дальше; возможность "поговорить" с любым объектом через Инспектор. Кроме того, на Смолтоке очень здорово "начинать" проекты. Скажем, создавая мир вы можете вначале обойтись без базы данных, а хранить мир с которым вы работаете прямо в рабочем пространстве. Он будет сохраняться и восстанавливаться вместе с образом виртуальной машины.
Мне не нравится Ваша идея делать собственную реализацию Смолтока. Во-первых, хорошая реализация Смолтока -- это нехилый труд. То есть если вам очень хочется писать интерпретатор Смолтока -- милости прошу и делиться информацией, но тогда причем здесь IF? Главное, что есть уже несколько реализаций весьма высокого качества, из которых я близко знаю упомянуть две:
(1) VisualWorks -- промышленного качества платформа, свободная для некоммерческого использования. Живет под самыми разными операционками. Очень мощная виртуальная машина с JIT и прочими наворотами.
(2) Squeak -- бесплатный, тоже переносимый, и с большим сообществом готовых помочь пользователей. Squeak, причем, является платформой для Croquet -- системы распределенной виртуальной реальности. Я понимаю, что IF -- это немного другое, но, возможно, стоит посмотреть на то, как в Croquet делается распределение объектов (архитектура TeaTime).
Пара заключительных слов. В этот топик я попал потому, что мониторю через Google Alerts упоминания Смолтока. Отвечать на годовой+ давности сообщения я стал в надежде, что "кто-нибудь поймет, кто-нибудь услышит". Кроме того, я неравнодушен к IF. Чтобы было понятно мое отношение к Smalltalk -- я член команды, которая пишет на нем авиационные тренажеры (и, на общественных началах -- активный пропагандист этого языка)
Всем творческих успехов!
Grue написал:
Может быть, попробовать реализовать простое подмножество языка Смолток? Там есть все, что нужно. Кроме того, еще в начале 90х под ДОС был создан русский интерпретатор, с переведенными на наш язык ключевыми словами/библиотекой класов, можно на на этот вариант Смолтока и соориентироваться.
Неактивен