Сюда будет помещаться то, что можно хотя бы с натяжкой отнести к законченному фунциклирующему софту. Исходники (для C++ Builder 5 (почти некомментированные! (а если и комментированные, то чаще всего - англоязычно!!))) прилагаются, так что интерес, по идее, может быть не только прагматический, но и чисто научный.
Средство автоматизации по Теории Автоматов, v1.21...Сюда будет помещаться то, что на законченный фунциклирующий софт ну совсем не тянет, однако может пригодиться в процессе написания оного.
C++: CSICTL - заготовка кода для построения и контроля древовидной структуры из разнородных объектов...
Софт позволяет проверить в работе алгоритмы, работающие с двоичными словами.
В комплект входят два архива с подборками алгоритмов умножения и деления двоичных чисел (не поручусь, что полностью, но хотя бы в малом они правильны. ;)
Для товарищей со склонностью к программированию может оказаться интересной реализация интерпретатора... гм... языка, на котором составляются прокручиваемые алгоритмы (его при определённом терпении можно выцепить из исходника).
Наверх...
Появление этого проекта относится к тем временам, когда на 3-м курсе нам читали замечательную дистиплину Прикладная Теория Цифровых Автоматов (ПТЦА). И была у преподавателей замечательная педагогическая идея - чтобы мы, оболтусы-студиозусы, в порядке домашнего задания шаг за шагом вручную проверили работу различных вариантов алгоритмов машинного умножения и деления в разных случаях.
Всего это составляло... щас вспомню... 2*4*2*4=64 примерчика. В письменном виде. :O А плюс к этому - курсовой проект. :(
То есть мы, конечно, ничего не имели против того, чтобы погубить на благо учёбы около трёх 24-листных тетрадки. Но чтобы при этом ещё и скрипеть мозгами, да ещё над такой однообразной работкой, что фиг не ошибёшься...
Короче говоря, включившаяся лень настойчиво порекомендовала написать хоть какое-то средство автоматизации этого процесса. Что, в экстренном порядке, и было сделано.
Тяжёлую студенческую жизнь это не сильно, но всё же облегчило. :)
Разобраться в софте по встроенному... гм... хелпу будет трудновато, поскольку он рассчитывался на весьма узкую аудиторию. Тем не менее, возможно, сие средство и поможет кому-то, осваивающему упомянутую тяжкую науку. Или поклоннику алгоритмов работы с двоичными числами...
Просьба не пинать за грамматические ошибки в хелпе. Они допускались не нарочно, и в своё время их было куда больше... ;)
Исправлено 27.11.11: при повторной конверсии без выхода из программы фрагменты Preformat начинали вставляться по несколько раз
Софт позволяет преобразовать текстовые файлы, набранные в простых редакторах типа блокнота или ВордПада, в HTML-страницы. В исходном тексте могут быть специальные пометки (теги T2H), воспринимаемые при конверсии как управление форматированием. Достаточно узкоспециализировано, но зато просто.
Наверх...
Это дело появилось сравнительно недавно (поправка от 27.11.11: очень давно, 9 лет назад), когда в ходе организационных работ по данному сайту всплыла необходимость конвертировать тексты (и порой очень немаленькие) в ХТМЛ.
В принципе, соответствующий инструментарий в природе имеется - например, ClearText, или, на худой конец, Мелкософт Ворд. Второе средство отпало сразу, и далеко не из-за копирайта... :) :| (поправка от 27.11.11) Первое тоже продержалось недолго.
Проблема была исключительно в лени. Организационные задачи, стоявшие перед обленившимся вембастером - ну, там, вставка сверху и снизу стандартных ссылок, разбиение длиннющего монолитного текста на ряд более коротких, и тому подобное - в рамках упомянутых средств решались с применением непозволительно большого количества мышино-клавишных манипуляций. А хотелось всё побыстрее, да попроще... Да чтобы потом не было сильного геморроя при внесении корректив в исходный текст и переформачивании соответствующих страниц... Да ещё чтобы потом сами ХТМЛ-странички в разных текстовых редакторах приятственно смотрелись...
В общем, необоримая инженерная лень срочно требовала специализированного софта. И таковой в кратчайшие сроки был написан. Это вот он и есть. :)
Игрушка была придумана в рамках моей антидраконьей программы. Наиболее интересное в ней (в игрушке, а не в антидраконьей программе) заключается в том, что она, как явствует из вышенаписанного, написана на джаваскрипте (точнее, на JScript под программу всенародно (не)любимой конторы... Т.е., под нетскейпом не пашет. :( Что поделать, если разработчики настолько зловредны, что не могут нормально согласовать некоторые вещи...).
Наверх...
Если у вас не включён джаваскрипт или показ графики, то для игры надо их включить. Если нету интернет ёксплорера, то это значительно хуже. :( Впрочем, исходник поставляется (в виде оффлайн версии), поэтому желающие могут попробовать переработать софт под, скажем, тот же нетскейп. (А заодно ужаснуться криворукости и извращённости ума лица, данную программу (игру, а не нетскейп) написавшего. :)
Как нетрудно догадаться, это web-чат, для фунциклирования которого требуется сервак с наличием PHP4 и MySQL.
Вся эта прелесть отлаживалась на локалхосте под win'98 и там вполне себе замечательно работала. Увы, гарантировать, что всё пройдёт так же замечательно в реальных полевых условиях, пока поостерегусь. ;(
Заблаговременное предупреждение: отдельные фичи чата (а именно, аутентификация в скрипте администрирования) не доделаны! Дезигн также, считай, отсутствует. ;(
Наверх...
Время от времени людей посещают странные желания. Вот и у меня недавно возникло желание написать чат на PHP... (Возможно, сказалось тлетворное влияние одноимённой лабы, бывшей в альма матере в прошлом семестре? Ну да фиг с ним, не суть важно. :) После чего в течение месяца сабж был написан и доведён до приемлемого функционального уровня...
На той платформе, на которой написано выше. :( Ежели пожелаете проявить энтузазизьм и заставите систему пахать на реальном хостинге (не исключено, что для этого может не потребоваться никаких доработок, хотя гарантировать не могу...), то чат будет фунциклировать, как минимум, под IE 5.0 и NN 4.0 (отлаживалось на обоих. :)
Процесс установки:
Тест сооружался группой товарищей (состоящей в том числе и из меня) в целях литературно-идеологической борьбы. Смысл состоит в том, чтобы на основании ряда концептуальных вопросов, отвеченных респондентом, определить, существом какой фантастической расы он является в той литературно-идеологической реалии, где происходит та самая борьба... ::)
К сожалению, энтузазизьм группы иссяк, поэтому продукт, скорее всего, так и останется на стадии 6-й беты. Недоделки касаются в основном графики и мелких графоманских деталей, а движок (см. исходник - лично я честно выполнил свою часть работы! ;) представляет собой очень даже завершённую и работоспособную конструкцию.
Наверх...
Ко всему вышесказанному стоит ещё добавить, что в движок заложены резервы по расширяемости теста без необходимости перекомпилировать ехе... Проще говоря, при разработке ставилась задача, чтобы к тесту было легко сделать мод ("лёгким движением руки" и простым редактированием текстовых файлов конфигурации/данных, например, можно сбацать другой список существ и полностью поменять вопросы; про графику уж не говорю...) Правда, с позволения почтеннейшей публики, я не буду вдаваться в подробности того, как это делается. :| Наиболее существенные моменты вполне поддаются интуитивному пониманию, а без ненаиболее существенных, в принципе, можно и обойтись. :) Единственное напутствие потенциально интересующимся - тест сделан в виде "3 варианта в 1", при этом по умолчанию используется тот, который описывается
файлом config\config.txt и файлами из папки database\mikle.
Кроме того, можно отметить, что исходничек можно считать примером (не очень хорошим ;) по применению OpenGL и той бадяжки, которая лежит в подразделе "Всяческие исходники" под гордым названием csictl.
Словом, приятных ковыряний и извращений. ;) Билдер рулез!
Точнее говоря, это определение базового класса и нескольких макрокоманд, при помощи которого программеру будет легче (это я по своему примеру так думаю... :) набивать код, ответственный за упомянутый процесс. Прилагается пример в лице убогого консольного приложения (example.cpp), смысл которого абсолютно неочевиден до изучения исходника... :)
Более серьёзным примером является расположенный в предыдущем разделе исходник теста на расовую принадлежность, но в нём без поллитры разобраться ещё тяжелее. ;(
Наверх...
Возникает естественный вопрос - а в чём польза от организации разнородных объектов в древовидные структуры?
Думаю, такой способ оценят те, кто сильно огорчился, попробовав программировать под DirectX или что-либо другое, в основе чего лежит идея: сначала создай такой-то объект, потом такой-то объект, а потом вот такие-то объекты, и только после этого вот такие-то объекты... а потом не забудь это всё освободить, но обязательно в обратном порядке... да, и ещё не забудь учесть, что вот такие-то объекты любят время от времени терять содержащиеся в них данные (типа издержки мультизадачности), поэтому их надо восстанавливать, хе-хе, ручками... ну, и тому подобное безобразие, являющееся прямым следствием функциональной взаимосвязи разноуровневых объектов, некоторые из которых весьма своенравны.
В моих радужных планах в то время было написание некоего ознакомительного проекта по типу "Hello, world!!" в том самом DirectX-е. Описанная проблема проявилась сразу же, что, с практической точки зрения, означало написание кучи рутинно-утилитарных строчек (плюс ещё их отладки), а это, естественно, пагубно сказалось на сроках реализации проекта и желании его реализовывать в принципе... :/
Проект реализовать удалось, но остался ужасно неприятный осадок. Значит, в следующем проекте придётся повторять всю эту нудную процедуру? А если он будет на порядок посложнее, что тогда? :0
Вот почему пришлось написать нечто, вспоможающее в реализации наиболее противных, с моей точки зрения, вещей. А именно:
- создания объектов в порядке, соответствующем их функционально-иерархической связи, и применение требуемых процедур при обломе на какой-либо стадии этого процесса;
- (самое главное!) последующей их ликвидации в правильном порядке и без лишнего геморроя;
- подачи сигналов, на которые оные объекты реагировали бы определённым образом, причём также в правильном порядке. (Например: "юзер нажал Alt-Tab, поэтому данным в видеопамяти, скорее всего, кирдык, всем срочно предпринять контрмеры!")
Прилагается типа пример - малобюджетное консольное приложеньице. Должно скомпилироваться на любом современном C++ компиляторе - по крайней мере, на Билдере работает замечательно (кроме одного ма-а-аленького предупрежденьица, но оно скорее для устрашения... :)
Кстати, пример компилировался не как проект, а из командной строки Нортона-Командира путём вызова bcc32. Просто ужас, до чего ретроградны бывают люди... :)
З.Ы. Как и говорилось, перед запуском программы лучше посмотреть её исходный код. То, что в около 20% случаев программа "не запускается" - это не глюк, но задуманная в демонстрационных целях фича.
З.З.Ы. CSICTL расшифровывается как complex structure integrity control. Малоизящно, но надо было хоть что-нибудь придумать. :)
Исправлено 16.07.03: в архив добавлены пропущенные файлы readme.txt и mc3_lang.txt
Исправлено 04.08.03: обнаружен и поправлен глюк в коде исполняющей машины (операция деления float-операндов выполнялась как деление целых)
Исправлено 29.08.03:
Исправлено 20.09.03:
Исправлено 08.10.03: ошибка в компиляторе (передача переменной float-типа в качестве аргумента функции давала ошибку компиляции)
По-умному это называется "встраиваемый скриптовый язык". 8)
Идея состоит в том, что часть алгоритмов программы не зашита намертво в коде exe/dll (у которых есть гнусное свойство нуждаться в перекомпиляции при каждом мизерном изменении), а описана текстовыми скриптами на спецязыке (в данном случае этим языком является MC3 (aka Miklesoft Code 3)), которые оприходуются не на стадии построения (build) проекта, но уже собранной и работающей программой.
Короче, кто когда-нибудь пытался написать сурьёзную игру, тот должен быть в курсе проблемы... 8)
Система рассчитывалась, в первую очередь, на C++ Builder (и, соответственно, х86 процессор) (Но это не компонент!!!). В принципе, не должно возникнуть проблем с переносом в VC++. При особом желании, возможно, получится перенести в ГНУСь.
Примечание от 01.10.06: предположение о лёгкости портирования на M$ VC++ превратилось в экспериментально подтверждённый факт. Благодарность камраду crazyrand0m с форума gamedev.ru.
Наверх...
Эта вещь придумывалась в процессе игроделательских потуг молодости... ::)
Неокторое время назад по определённым причинам во мне снова пробудился интерес к средствам "скриптизации" приложений, в связи с чем последовал поиск более серьёзных разработок в этой области.
Однако быстро выяснилось, что имеющиеся решения от более авторитетных дядей и тётей очень плохо вписываются в круг моих специфических требований (в особенности простоты внедрения этих систем в проект).
Даже Small, оказавшийся ближе всего к моим аппетитам (и под некоторым влиянием которого в своё время сочинялся MC3), отличался мутноватым (для неподготовленного ума) процессом вовлечения в работу как системы, так и скрипта, а также отсутствием типов и необходимостью написания прослойки для взаимодействия скрипта
с данными основного приложения (авторы сделали это по соображениям безопасности и надёжности, но у моей ленивой персоны были несколько другие пожелания. :)
Словом, всё, как и обычно, указывало на старую добрую истину: "Хочешь, чтобы что-то было сделано, как надо - делай это сам".
Была мысль написать более продвинутый язык, чем древний MC3 - но времени возиться с полностью ручным написанием компилятора, как в то время, теперь не было, а попытка применить средства автоматизации компиляторописания (yacc/flex) окончательно охладила новаторский энтузиазм, когда я увидел, какой тихий ужас получается в результате работы сих программ.
Таким образом, стало ясно, что придётся снимать с полки разработку детства и доводить её до ума. Лишнее подтверждение тому, что старый друг лучше 2х новых.
Настоящая система является результатом этого доведения.
Преимущества системы (это мне так кажется, но может, оно и правда :)
Изобретённый мной (звучит нескромно, но про существование подобных алгоритмов мне пока неизвестно) алгоритм поиска пути внутри односвязной области на карте из прямоугольных ячеек. В отличие от большинства существующих методов, опирающихся на графы и прочие вещи, производные от расточительного перебора кучи промежуточных точек для каждого индивидуального расчёта, данный алгоритм
основан на идее поиска топологического преобразования, устанавливающего соответствие между точками произвольной односвязной области и канонического круга. Это делает возможным сопоставление любой точке области величины - периметрального угла (аналог полярной угловой координаты), непрерывно изменяющейся при движении по замкнутому контуру внутри области, и свести задачу к движению на сближение ходока и цели по этой координате.
Наверх...
Задача поиска пути терзает мой беспокойный ум ещё со школьных времён, поэтому рано или поздно сие озарение должно было-таки наступить. :) Пусть пока только для частного случая, но это уже кое-что, и кое-что вполне весомое.
Преимущество алгоритма перед конкурентами состоит в том, что здесь практически все необходимые расчёты можно произвести предварительно и свести в единую таблицу, а для вычисления вектора, двигающего из произвольной точки в направлении другой произвольной точки, остаётся проделать лишь примитивное вычисление с фиксированным числом операций, не зависящим от размеров и конфигурации карты. Это - основная сила предлагаемого алгоритма, которую человечество, долгие годы прозябавшее в графовой парадигме, пока ещё до конца не осознало. :)
В комплекте поставляется демонстрационная программа, исходники к ней (Билдер 5) и описание теоретической части (не сильно удачное, но уж каков из меня писатель математическо-алгоритмических статей. :(.
Одна дискуссия навела меня на мысль попробовать - реально ли написать тетрис с нуля, силами одного человека и в течение 4-5 часов?
Эксперимент, в лучших традициях честной науки, был поставлен на себе...
Наверх...
Оказалось - реально! Хотя и с оговорками. В 5 часов, правда, не уложился, понадобилось 6, но это исключительно от отсутствия подобного опыта. Результат эксперимента прилагается вместе с исходником.
За прошедшие годы я написал 2 игры, которые было не стыдно показать общественности.
Исходники планировал выложить давно, но всё никак недоставало лени. :) Но лучше, как говорится, поздно, чем никогда.
Наверх...
Dracivil War был написан в 2004 году (на C++ билдере 5, файл проекта - game_prj.bpr),
Operation I.T.C.H. - в 2010 (начинался тоже на билдере-5, но по техническим причинам
весьма драматического характера пришлось переменить несколько компиляторов, дело
закончилось на б-гомерзком MSVS 2005, файл проекта/солюшена - src.sln). В отличие
от многих любителей типа выложить исходники (и потом ещё нужно добывать где-то
на стороне и ставить 100500 библиотек, которые эти граждане использовали), здесь
включено всё, что необходимо для сборки проектов. Если чего-то не хватает, и
проект не собирается, жалуйтесь (мыло на главной странице). Чтобы запустить
игры, понадобятся файлы с ресурсами - их можно достать в составе игр по ссылкам
из шапки подраздела.
В 2004 году мой стаж C++ был 6 лет любительского программирования,
с малым знанием о паттернах и технологиях (хотя и технологий в те времена было поменьше...),
в 2010 - ещё +6 лет профессиональной разработки. Пересматривая и сопоставляя исходники,
было любопытно проследить эволюцию себя, как программиста.