12/05/2004 в 00:23 были начаты работы по созданию русской IF-платформы для написания игр с текстовым вводом команд. От DOS'а пришлось отказаться в пользу Win32. Пишется всё на Delphi.
По состоянию на сегодняшний день дела идут удовлетворительно. Вот только вывод информации на экран в консольном приложении под Win95 происходит немного тормознуто (реанимировал для тестов свой старенький компьютер: CPU:486 160МГц/Mem:40MB/S3 Virge DX 2MB/HDD:426MB).
Если кто знает, как в консольном приложении использовать свои шрифты (в полноэкранном режиме), просьба сообщить — буду очень признателен.
Постараюсь по возможности сообщать о ходе работ...
Неактивен
Помимо низкоуровневых модулей для работы с экраном, клавиатурой, сжатыми данными и т.п. закончен модуль для вывода на экран определённым образом размеченного текста (типа html, но в тексте). Все теги разметки на русском языке, как, впрочем, и весь внутренний язык будущей платформы.
Для примера несколько тегов:
<ПО.ЦЕНТРУ></ПО.ЦЕНТРУ>
<СПРАВА></СПРАВА>
<ПО.ШИРИНЕ></ПО.ШИРИНЕ>
<ЦВЕТ></ЦВЕТ>
а также:
<КЛ.ЛЮБАЯ>
<КЛ.ВВОД>
и многие другие.
Неактивен
Консоль ради текста. Мне нужен текстовый ввод/вывод информации.
Неактивен
А зачем это нужно? Мне ведь нужна работа в текстовом режиме. Вот я и работаю с консольным приложением. Зачем весь этот мудрёж с формами и т.п.?
Неактивен
Под DOS я рисовал свои шрифты и без особых проблем подключал их. Как сделать это под Win32, я не знаю.
Что касается выравнивания и т.п., то это делается просто: либо текст выводится с нужной позиции, либо (если выраванивание "по ширине") промежутки между словами дополняются пробелами...
Неактивен
Nash, судя по всему, с консольными приложениями работать тебе не приходилось, иначе ты бы знал, что всех этих проблем (ширина экрана и т.п.) не существует.
Что касается процесса, то в настоящее время идёт работа над транслятором-компилятором (или типа того — я не особо силён в терминологии), который будет переводить исходники игры в некий промежуточный код, который будет проигрываться отдельной программой. Не могу не выразить восхищение методом обратной польской записи, предложенного миру математиком (само собой польским) Я. Лукашевичем. Столь компактные правила, реализущие столь стройную и гибкую систему!.. Разве что в бухгалтерском учёте я встречал нечто подобное.
Неактивен
Гениальное в своей лаконичности изложение основных принципов метода обратной польской записи: http://algolist.manual.ru/syntax/revpn.php
Главное пропустить первые абзацы. Суть начинается со слов "Во-втоpых, получение обpатной польской записи из исходного выpажения...". Прилагаемый там исходник не смотрел.
Неактивен
Ребята, перво-наперво давайте определимся. В настоящее время я пишу именно движок. Причём пишу его пока что для себя. И начал писать я его потому, что написание игры на существующих языках программирования — вещь очень проблематичная (у меня есть две-три вещи, которые заброшены из-за того, что я начал просто путаться в нагромождении кода). Так что если-таки у меня хватит сил доделать то, что я затеял, в первую очередь вы получите не сам движок, а игру.
Неактивен
Давайте наведём немного порядка в обсуждаемых вопросах.
Во-первых, организация конкурса от меня не зависит. Но это вовсе не значит, что если вдруг его потребуется провести, то я не помогу.
Во-вторых, игру я пишу не для конкурса. Поэтому его проведение никак не привязано к срокам её выхода.
В-третьих, раздел (а не тема!) называется "Разработка русской IF платформы". Поэтому тема не такая уж общая...
Неактивен
Nash написал:
Olegus
Я понимаю, ты решил писать трансляцию исходника с нуля? Не переводить синтаскис твоего языка, скажем на Паскаль, и трансляции его с помощью Pascal Web Script'a или Innerfuse Pascal Script?
Я не настолько крут. Будет компилятор для получения кода игры в определённом формате, и будет виртуальная машина (так это вроде называется) для проигрывания этого кода.
Неактивен
Вроде как получилось реализовать работу с массивами, пока предусмотрено только три вида массива: одномерный ("Список"), двумерный ("Таблица"), трёхмерный ("Кирпич", название рабочее, если кто придумает что-то подходящее — сообщите).
Неактивен
"Куб" так "куб". Трехмерный массив может пригодится для моделирования пространства.
Насчёт переменных: в моей платформе определения переменной с указанием типа будет не нужно (хотя нужна будет инициализация или типа того) — её тип будет определяться присвоенным значением. В выражениях будет происходить автоматическое приведение типов и т.п.
Все массивы будут динамическими. Можно, конечно, загнуть насчёт двумерных и трёхмерных массивов разной формы (треугольник, пирамида и т.п.), но немного подумав я это решил отложить.
P.S. Не думайте, что описанные фичи отняли бОльшую часть времени (на тему — ковыряясь в мелочах, забыл о главном)...
P.P.S. Различные примеры из других платформ весьма интересны и познавательны, однако не стоит превращать эту тему в FAQ по этим платформам. В то же время, я ни в коем случае не запрещаю некоторую отвлечённость в разговоре. Но придерживайтесь меры...
Неактивен
Поскольку переменная может менять тип при присвоении значения другого типа, то вопрос, где она была впервые объявлена не стоит так уж остро. Другое дело, что из-за подобного подхода ряд ошибок будет проявляться не на этапе компиляции, а на этапе выполнения кода, — это действительно проблема, но тут уж ничего не поделаешь.
Возможность создания своих процедур и функций будет (вот только стоит ли разделять эти понятия?..), будет также разделение переменных на глобальные и локальные, будет возможность подключения модулей, т.е. кусков кода (или откомпилированных модулей, что сделать реально, но нужно хорошенько продумать) из внешних файлов.
Неактивен
Дело хоть и медленно, но продвигается. Пока всё на стадии проектирования с программными "набросками" реализации некоторых алгоритмов. Так, вроде удалось разобраться и спроектировать работу со свойствами и методами объектов платформы...
В настоящее время работаю над реализацией в платформе работы как с типизированными переменными, так и с переменными без типа.
Изрядное количество хлопот доставляет реализация операций присваивания и сравнения на равенство через один знак "=". Обозначать эти операции по-разному (как в C или Delphi/Pascal'е) на мой взгляд не очень разумно.
Неактивен
dennis написал:
Использование РАЗНЫХ символов для присваивания и сравнения в C/C++/Inform — отнюдь не роскошь. Это бинарные операции, могут использоваться в любых контекстах, и иначе различить их нельзя.
Ясное дело, что не роскошь. Говоря проще, в C/C++/PHP/т.п. различие в обозначении этих операций обусловлено в первую очередь тем, что в этих языках можно использовать операции и сравнения, и присвоения в рамках одного действия (или как это там называется).
Я при проектировании платформы от этого сознательно отказался.
Неактивен
Работа идёт, хотя лето, солнце и т.п. несколько снижают темп...
Неактивен
Жаль, что нельзя менять шрифт. Хотя и несколько странно...
Неактивен
Под DOS я и сам использовал самодельные шрифты. Написал даже редактор шрифтов. Под винды это, увы, непременимо.
Неактивен
В любом случае это совсем не то, что я мне нужно.
Неактивен
Не знаю. Но вряд ли.
Неактивен
Как это ни удивительно, но дело идёт...
Неактивен
В настоящее время идёт доработка транслятора базового языка платформы в байт-код. После этого будет создана "виртуальная машина" для проигрывания этого байт-кода, а следом за этим пойдёт реализация работы с объектами платформы: сложными типами данных, предметами, локациями, словарями, парсером и т.п. (и усложнение виртуальной машины)... Дел много, но они движутся в нужном направлении...
Неактивен
Кое-что вырисовывается...
Минимальный (и традиционный) текст программы выглядит так:
{Программа} {НачалоРаботы} НаЭкран("Привет, мир!"); {КонецРаботы} {КонецПрограммы}
Объектный файл (типа ассемблерного представления байт-кода) получается такой:
; Объектный файл создан компилятором 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 ;КОНЕЦ СТАРТОВОГО МОДУЛЯ
Работа на этом останавливаться не собирается...
Неактивен
А что именно интересует?
В настоящее время завершается рзработка базового уровня: арифметические, логические и строковые операции и функции, операторы ветвления, операторы циклов, работа с процедурами и функциями.
Работа с объектами: локациями, предметами, персонажами, словарём и т.п., будет начата в ближайшее время.
Неактивен
Потихонечку работа движется. Не так быстро, как хотелось бы, но всё же... Базовый язык — это всё-таки основа.
Неактивен
Однако, работа над контролем за ошибками, которые может допустить программист, — адский и очень кропотливый труд...
Кроме того продолжается работа над процедурами и функциями, создаваемыми программистом.
Неактивен
К сожалению, но ничего конкретного сообщить нечего. Продолжается работа над реализацией процедур и функций (с произвольным числом параметров, с параметрами по умолчанию и т.п.)
Неактивен
ifn00b написал:
Единственное, что тревожит как программиста - нумерация строк, поскольку это может (по собственному опыту знаю) привести к нерациональному использованию аналога команды "goto", что очень осложняет разработку более-менее серьезной программы.
А причём здесь нумерация строк? Они пронумерованы в объектном файле (для контроля и только), в исходниках для goto ("перейти") будут использоваться метки.
Неактивен
Переделка объектной (или как там её) модели на "Глобальный контекст — Модуль объекта — Модуль процедуры/функции" занимает очень много времени и сил. Однако в результате как-то само собой решились вопросы использования констант, а также предупреждения о неиспользовании тех или иных переменных. К тому же сдвинулась с места работа с созданием процедур и функций. Отшлифовался немного вопрос видимости переменных, а также процедур и функций. Доработан вопрос возможности перекрытия переменных, процедур и функций Глобального (общего) модуля переменными, процедурами и функциями локальных модулей.
Рутина, но без её реализации подойти к самому интересному: объектам игрового мира, невозможно...
Неактивен
Прошёл год с объявления о начале работ. Дел было сделано не так уж мало, но и недостаточно для каких-либо демонстраций. В 2004 году по ряду причин (часто личного характера) работа топталась на одном месте. Основной прорыв был сделан в начале 2005 года, после чего можно с уверенностью говорить о том, что результат всё-таки будет.
Неактивен
Дела идут со скрипом, времени настолько мало, что не удаётся даже толком высыпаться. Однако ко второй годовщине с начала работ, что-нибудь да приготовлю...
Неактивен