12/05/2004 в 00:23 были начаты работы по созданию русской IF-платформы для написания игр с текстовым вводом команд. От DOS'а пришлось отказаться в пользу Win32. Пишется всё на Delphi.
По состоянию на сегодняшний день дела идут удовлетворительно. Вот только вывод информации на экран в консольном приложении под Win95 происходит немного тормознуто (реанимировал для тестов свой старенький компьютер: CPU:486 160МГц/Mem:40MB/S3 Virge DX 2MB/HDD:426MB).
Если кто знает, как в консольном приложении использовать свои шрифты (в полноэкранном режиме), просьба сообщить — буду очень признателен.
Постараюсь по возможности сообщать о ходе работ...
Неактивен
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, я не знаю.
В ДОС все было по-другому... В консольном приложении под винду в делфи даже нет доступа к классу TApplication Короче, нет у меня пока идей на этот счет. Может быть, через WinApi можно?
Что касается выравнивания и т.п., то это делается просто: либо текст выводится с нужной позиции, либо (если выраванивание "по ширине") промежутки между словами дополняются пробелами...
А как вычислять ширину окна? Заранее просчитать кол-во символов, которые умещаются в одну строку при разных разрешениях экрана? Хотя и разрешение не определишь...
Вообщем, даже не знаю :-/
По-моему, использование моего варианта - не мудрёж, а обоснованный уход от большинства проблем. А про большой размер исполняемых файлов я уже рассказал.
P.S. 6 постов в теме за один день! Просто чат какой-то выходит
Неактивен
Nash, судя по всему, с консольными приложениями работать тебе не приходилось, иначе ты бы знал, что всех этих проблем (ширина экрана и т.п.) не существует.
Почему же? Приходилось, но совсем немного Для простых задач, вроде "прочитать файл - обработать данные - записать результаты в файл". А для работы с текстом - тут ты прав.
Сейчас вот пересмотрел хелп по WinApi. Кажется, шрифт в консоли поменять никак нельзя. Цвет можно, кодовую страницу - можно.
Что скажут другие?..
Что касается процесса, то в настоящее время идёт работа над транслятором-компилятором (или типа того — я не особо силён в терминологии), который будет переводить исходники игры в некий промежуточный код, который будет проигрываться отдельной программой. Не могу не выразить восхищение методом обратной польской записи, предложенного миру математиком (само собой польским) Я. Лукашевичем. Столь компактные правила, реализущие столь стройную и гибкую систему!.. Разве что в бухгалтерском учёте я встречал нечто подобное.
Очень интересно!
Проблема компиляции - это то, что волнует меня сейчас превыше всего. Не подскажешь ли какую ссылку на ресурс, с которого ты брал правила метода обратной польской записи, пожалуйста? Или это книга?
Неактивен
Спасибо большое!
Неактивен
Кстати, о компиляции.
Можешь посмотреть здесь http://compilers.iecc.com/crenshaw/
Очень хороший гайд (кстати, где-то там лежит весь цикл статей в одном архиве, ~300Кб. Если инет повременный ).
Собственно, весь ресурс очень неплох. Жаль, вопросы, которые там рассматриваются, по большей части: как компилировать один из имеющихся языков в exe.
Неактивен
Движки, я так понимаю :-/
Извини, Гранд, я очень ценю твою работу по русификации TADS'а, но полноценного IF по-русски так ведь не получишь
Проблем тут две:
1) за нашу работу никто не платит (иначе она была бы закончена эдак лет 5 назад)
2) все мы стремимся натянуть на себя лавровый венок, поэтому работаем по одиночке или малыми группами...
Olegus
Держись!
Такие люди, как ты, и сдвигают дело с мертвой точки. К сожалению, помочь не могу, учеба...
Неактивен
Gottlieb_Leberecht написал:
Почему?
Кажется, мы удаляемся от главной темы. Вкратце, если TADS вдруг кардинально поменяют, придется все заново переводить.
На повестке дня остается вопрос: можно ли в консольном приложении (скомпилированном в делфи) менять ШРИФТ текста?
Olegus
С трудом сдерживаю себя...Цитата А.Новичкова из статьи о Rational Rose:
"Тут на ум приходит еще одно традиционное для России высказывание разработчика: “мне проще все написать заново”. И ведь пишут…"
Вот вам и вся фабула эпохи русского IF. В цитате - это упрек, здесь - нет. Лично я ЗА то, чтобы кто-то из нас написал платформу, которая будет иметь нормальный парсер, понимать падежи, иметь русский синтаксис etc.
Ждем игру!
Неактивен
Тема у нас заявлена как: "В общем, дело поехало...". По-моему, она настолько общая, что от неё черезвычайно трудно отклониться
Шутки - шутками, а тема-то была создана, для того, чтобы Олегус информировал нас о ходе работ над своим движком.
Сомневаюсь, что он одобрит наши очередные плачи по поводу нежелания нас самих писать игры...
Как я понял, Олегус, от которого зависит организация конкурса, делает игру для участия в нем. И я тревожусь: дождемся ли мы этого события?
Надеюсь, все у него получится. Пускай не сразу, но выйдет. (трижды стучу по дереву)
Olegus
Я понимаю, ты решил писать трансляцию исходника с нуля? Не переводить синтаскис твоего языка, скажем на Паскаль, и трансляции его с помощью Pascal Web Script'a или Innerfuse Pascal Script?
Неактивен
Я не настолько крут. Будет компилятор для получения кода игры в определённом формате, и будет виртуальная машина (так это вроде называется) для проигрывания этого кода.
Я же не имел в виду, собираешься ли ты приводить исходник к exe, а именно схему работы с интерпретатором. И что, ты считаешь - это не круто?
Анализ исходника ты пишешь сам. А значит должен сам проверять уровни вложенности открывающих и закрывающих операторов, вести таблицы переменных и функций, вычислять те же арифметические выражения (Лукашевича ведь еще надо как-то на паскале написать!). Поверь мне - это более чем круто.
Неактивен
Olegus t.Gl. написал:
Вроде как получилось реализовать работу с массивами, пока предусмотрено только три вида массива: одномерный ("Список"), двумерный ("Таблица"), трёхмерный ("Кирпич", название рабочее, если кто придумает что-то подходящее — сообщите).
Если трехмерный - то "Куб". ИМХО, мненонически самое правильное название...
Неактивен
GrAndrey
Тогда уж параллелепипид, он, в отличие от куба, может иметь разную длину сторон
Трехмерный массив с разной длиной сторон? А зачем он будет нужен в IF? (я вот даже сомневаюсь, будет ли вообще востребован трехмерный массив, но если автору не трудно его реализовать - пускай будет на всяк случай ).
А куб звучит попроще
Только написать его правильно многим будет непросто
Да ну, написать (объявить, я понимаю?) несложно. Это ж не динамические массивы...
Stas Starkov
Все это, естественно, отсутсвует в RTADS и Русском Inform.
??? А что тогда из себя представляет файл *.gam, например?
Честно скажу, я не ожидаю от "системы" многого. О сроках разработки я уж не говорю — _годы_ покажут.
Т.о. мое отношение к разработке (и трате на это сил) негативное.
А альтернатива?
Неактивен
Дважды неверно понять собеседника - это еще надо постараться
Да, "параллелепипед" - это очень сложное слово, а потому "куб". Спасение для развращенных мышкой пользователей.
Памятка: сарказм - это не старческая болезнь, и не опухоль
Ну хорошо. Вот покажете мне, как без лишней головной боли воплотить РЕАЛЬНУЮ многообъектность в RTADS, да еще чтоб отдельные экземпляры ОДНОГО объекта можно было перекидывать из контейнера в контейнер...придется согласиться, что разработка русской платформы никому не нужна.
Неактивен
Погодите, но вот же отрывок из мануала по RTADS:
Еще одной из вариаций на ту же тему является набор неотличимых друг от друга объектов. Например, мы хотим реализовать спичечный коробок, полный спичек. Игрок должен иметь возможность взять одну спичку из коробка, чтобы зажечь ее.
Однако, поскольку TADS требует индивидуального набора лексических свойств для каждого объекта, нам придется-таки наложить некоторые ограничения на действия игрока. В частности, в каждый конкретный момент времени игрок сможет держать в руках только одну спичку - все остальные спички должны оставаться в коробке.
А если у меня есть патронташ и я хочу брать произвольное кол-во патронов, чтобы зарядить их в мой боевой пистолет? Дальше в мануале идет страница исходного кода решения со спичками. И это если позволено брать только одну спичку из коробка. Мне придется городить вдвое больше?
ЗЫ. Не судите слишком строго, RTADS я знаю действительно поверхностно...
Неактивен
Насчёт переменных: в моей платформе определения переменной с указанием типа будет не нужно (хотя нужна будет инициализация или типа того) — её тип будет определяться присвоенным значением.
Да, с одной стороны - это есть правильно и проще. С другой - довольно сложно проследить, где же в первый раз была объявлена переменная И усложняется контроль над ошибками в компиляторе.
Но это все к спору между сторонниками паскаля и си.
А будут ли в платформе функции (именно функции, а не процедуры)? И еще - переменные будут делиться на локальные и глобальные (с учетом подключаемых библиотек)?
Неактивен
То, чего ты хочешь, не реализовано ни в одной (насколько я знаю) системе IF кроме TADS3!
А в RTADS это _уже_ возможно, пусть и не без труда (чужого, кстати, — код-то уже написан добрыми иностранцами).
Так "не реализовано" или "возможно"?
Плюс к тому, необходимость в подобной функциональности возникает не часто
А я вот хочу реализовать деньги, как монеты, а не "нечто виртуальное"...Да и вообще - если писать игру с ролевым уклоном, там большинство предметов попадает в категорию клонов, с которыми практически нереально работать, динамически генеря их во время игры...
Неактивен