На главную страницу...

Софт и всяческие исходники

Да-да, этот товарищ (то есть я) ещё и немного программировать умеет! Так что без этого раздела тут бы явно чего-то не хватало... :)
На шедевры (а временами - даже на полноценный софт) это безобразие, конечно, не претендует, но... По крайней мере, многое из него (точнее, всё) писалось не просто так, а от того, что в нём возникала жгучая необходимость! Так что рекомендуем не ослаблять внимания - вдруг кому-нибудь что-нибудь тоже пригодится!

Продукты софтописания

Сюда будет помещаться то, что можно хотя бы с натяжкой отнести к законченному фунциклирующему софту. Исходники (для C++ Builder 5 (почти некомментированные! (а если и комментированные, то чаще всего - англоязычно!!))) прилагаются, так что интерес, по идее, может быть не только прагматический, но и чисто научный.

Средство автоматизации по Теории Автоматов, v1.21...
T2H (конвертор текста в HTML), v1.02... (update: 27.11.11)
Мочи Одиноких Волков! (игра на JScript, IE5.0+), v1.00...
Код экспериментального чата (PHP4+MySQL), v1.00...
Тест на расовую принадлежность (с применением OpenGL), v0.6b...
Описание алгоритма поиска пути на частном случае прямоугольно-ячеистой карты + демопрограмма...
Тетрис за 6 часов...
Dracivil War и Operation I.T.C.H... (New!)

Всяческие исходники

Сюда будет помещаться то, что на законченный фунциклирующий софт ну совсем не тянет, однако может пригодиться в процессе написания оного.

C++: CSICTL - заготовка кода для построения и контроля древовидной структуры из разнородных объектов...
C++: MC3 (встраиваемый скриптовый язык) - внедряемая в C++ (Builder; возможно, M$ VC++) проект система поддержки скриптового языка под названием MC3...

На главную страницу...

Софт


Средство автоматизации по Теории Автоматов, v1.21
ta.zip (274045 байт)

Софт позволяет проверить в работе алгоритмы, работающие с двоичными словами.
В комплект входят два архива с подборками алгоритмов умножения и деления двоичных чисел (не поручусь, что полностью, но хотя бы в малом они правильны. ;)
Для товарищей со склонностью к программированию может оказаться интересной реализация интерпретатора... гм... языка, на котором составляются прокручиваемые алгоритмы (его при определённом терпении можно выцепить из исходника).

Наверх...

Появление этого проекта относится к тем временам, когда на 3-м курсе нам читали замечательную дистиплину Прикладная Теория Цифровых Автоматов (ПТЦА). И была у преподавателей замечательная педагогическая идея - чтобы мы, оболтусы-студиозусы, в порядке домашнего задания шаг за шагом вручную проверили работу различных вариантов алгоритмов машинного умножения и деления в разных случаях.
Всего это составляло... щас вспомню... 2*4*2*4=64 примерчика. В письменном виде. :O А плюс к этому - курсовой проект. :(
То есть мы, конечно, ничего не имели против того, чтобы погубить на благо учёбы около трёх 24-листных тетрадки. Но чтобы при этом ещё и скрипеть мозгами, да ещё над такой однообразной работкой, что фиг не ошибёшься...
Короче говоря, включившаяся лень настойчиво порекомендовала написать хоть какое-то средство автоматизации этого процесса. Что, в экстренном порядке, и было сделано.
Тяжёлую студенческую жизнь это не сильно, но всё же облегчило. :)
Разобраться в софте по встроенному... гм... хелпу будет трудновато, поскольку он рассчитывался на весьма узкую аудиторию. Тем не менее, возможно, сие средство и поможет кому-то, осваивающему упомянутую тяжкую науку. Или поклоннику алгоритмов работы с двоичными числами...
Просьба не пинать за грамматические ошибки в хелпе. Они допускались не нарочно, и в своё время их было куда больше... ;)


T2H (конвертор текста в HTML), v1.02 (обновление от 27.11.11)
t2h.zip (349741 байт)

Исправлено 27.11.11: при повторной конверсии без выхода из программы фрагменты Preformat начинали вставляться по несколько раз

Софт позволяет преобразовать текстовые файлы, набранные в простых редакторах типа блокнота или ВордПада, в HTML-страницы. В исходном тексте могут быть специальные пометки (теги T2H), воспринимаемые при конверсии как управление форматированием. Достаточно узкоспециализировано, но зато просто.

Наверх...

Это дело появилось сравнительно недавно (поправка от 27.11.11: очень давно, 9 лет назад), когда в ходе организационных работ по данному сайту всплыла необходимость конвертировать тексты (и порой очень немаленькие) в ХТМЛ.
В принципе, соответствующий инструментарий в природе имеется - например, ClearText, или, на худой конец, Мелкософт Ворд. Второе средство отпало сразу, и далеко не из-за копирайта... :) :| (поправка от 27.11.11) Первое тоже продержалось недолго.
Проблема была исключительно в лени. Организационные задачи, стоявшие перед обленившимся вембастером - ну, там, вставка сверху и снизу стандартных ссылок, разбиение длиннющего монолитного текста на ряд более коротких, и тому подобное - в рамках упомянутых средств решались с применением непозволительно большого количества мышино-клавишных манипуляций. А хотелось всё побыстрее, да попроще... Да чтобы потом не было сильного геморроя при внесении корректив в исходный текст и переформачивании соответствующих страниц... Да ещё чтобы потом сами ХТМЛ-странички в разных текстовых редакторах приятственно смотрелись...
В общем, необоримая инженерная лень срочно требовала специализированного софта. И таковой в кратчайшие сроки был написан. Это вот он и есть. :)


Игра "Мочи Одиноких Волков!" (на JScript, IE5.0+)
Запустить!
Оффлайн-версия: antiwolf.zip (37859 байт)

Игрушка была придумана в рамках моей антидраконьей программы. Наиболее интересное в ней (в игрушке, а не в антидраконьей программе) заключается в том, что она, как явствует из вышенаписанного, написана на джаваскрипте (точнее, на JScript под программу всенародно (не)любимой конторы... Т.е., под нетскейпом не пашет. :( Что поделать, если разработчики настолько зловредны, что не могут нормально согласовать некоторые вещи...).


Наверх...
Если у вас не включён джаваскрипт или показ графики, то для игры надо их включить. Если нету интернет ёксплорера, то это значительно хуже. :( Впрочем, исходник поставляется (в виде оффлайн версии), поэтому желающие могут попробовать переработать софт под, скажем, тот же нетскейп. (А заодно ужаснуться криворукости и извращённости ума лица, данную программу (игру, а не нетскейп) написавшего. :)


Код экспериментального чата (PHP4+MySQL), v1.00
phpchat.zip (63042 байт)

Как нетрудно догадаться, это web-чат, для фунциклирования которого требуется сервак с наличием PHP4 и MySQL. Вся эта прелесть отлаживалась на локалхосте под win'98 и там вполне себе замечательно работала. Увы, гарантировать, что всё пройдёт так же замечательно в реальных полевых условиях, пока поостерегусь. ;( Заблаговременное предупреждение: отдельные фичи чата (а именно, аутентификация в скрипте администрирования) не доделаны! Дезигн также, считай, отсутствует. ;(

Наверх...
Время от времени людей посещают странные желания. Вот и у меня недавно возникло желание написать чат на PHP... (Возможно, сказалось тлетворное влияние одноимённой лабы, бывшей в альма матере в прошлом семестре? Ну да фиг с ним, не суть важно. :) После чего в течение месяца сабж был написан и доведён до приемлемого функционального уровня... На той платформе, на которой написано выше. :( Ежели пожелаете проявить энтузазизьм и заставите систему пахать на реальном хостинге (не исключено, что для этого может не потребоваться никаких доработок, хотя гарантировать не могу...), то чат будет фунциклировать, как минимум, под IE 5.0 и NN 4.0 (отлаживалось на обоих. :) Процесс установки:

  1. Закачать находящееся в архиве файло в некую директорию на сервере (обязательно с сохранением структуры! ;) Запомните название этой директории - в дальнейшем мы будем называть её <chat root dir>.
  2. Зайти по ссылке: http://my.servak.com/<chat root dir>/_INSTALL/IFORM.PHP (вместо my.servak.com, естественно, подставляете то, что имеется. :)
  3. Заполнить и отправить форму...
  4. По идее, всё остальное доделается само. Если оно так и окажется, вам сообщат ссылки на админский скрипт и на вход в чат.
  5. Если же не окажется, то попробуйте установить вручную (инструкцию также подскажут). Но это внештатный случай. Если он не имел места, см. сразу следующий пункт.
  6. Потереть директорию _INSTALL (из соображений безопасности).
Как уже и упоминалось, кое-что не доделано, а именно - аутентификация в админских скриптах (<chat root dir>/ADMIN/...). Довести это место до ума не вышло по техническим причинам... ;( Нет, сами-то админские скрипты работают, просто доступ к ним может получить кто угодно. :) Так что, если вдруг серьёзно вознамеритесь заюзать систему, придётся кое-что доделать ручками. Для этого я вижу 3 направления:
  1. Присмотреться к файлу ADMIN/AUTH.PHP. Строго говоря, там уже есть заготовка кода - но её надобно раскомментировать и довести до ума.
  2. Попариться с .htaccess.
  3. Переименовать директорию ADMIN, чтобы у неё было секретное, одному админу известное имя. Самый гнилой вариант, ;( однако при отсутствии или невозможности других сойдёт и такое.
Система абсолютно freeware, как для применения, так и для всяческого извращения над кодом. Однако, извращаясь, помните о совести и хотя бы оставляйте ссылки на первоисточник. Вам всё равно, а первоисточнику приятно. ;)

Тест на расовую принадлежность (с применением OpenGL), v0.6b

Архивчик с работающей софтиной разбит аж на целых 2 части:
beta6a.zip (exe-файл, 311226 байт)
beta6b.zip (данные, 455977 байт)
Распаковывать оба надлежит в одну и ту же папку!
Исходник можно зачерпнуть тут:

testsrc.zip (30389 байт)
Как и предупреждалось вверху страницы - C++ Builder 5. Прошу также принять во внимание, что здесь интенсивно эксплуатируется компонент OpenGLPanel, добытый мной так давно, что уже не помню, где. :( Поэтому, прежде чем ковыряться в сурсах, данный компонент должен обязательно быть установлен в Билдер! (Кстати, очень рекомендую, бо везчь архиполезная.)
opengl_bc5_cmp.zip (91389 байт)
(в упаковке прилагается readme с инструкцией по установке и контактным мылом автора, плюс пара примеров)

Тест сооружался группой товарищей (состоящей в том числе и из меня) в целях литературно-идеологической борьбы. Смысл состоит в том, чтобы на основании ряда концептуальных вопросов, отвеченных респондентом, определить, существом какой фантастической расы он является в той литературно-идеологической реалии, где происходит та самая борьба... ::) К сожалению, энтузазизьм группы иссяк, поэтому продукт, скорее всего, так и останется на стадии 6-й беты. Недоделки касаются в основном графики и мелких графоманских деталей, а движок (см. исходник - лично я честно выполнил свою часть работы! ;) представляет собой очень даже завершённую и работоспособную конструкцию.

Наверх...
Ко всему вышесказанному стоит ещё добавить, что в движок заложены резервы по расширяемости теста без необходимости перекомпилировать ехе... Проще говоря, при разработке ставилась задача, чтобы к тесту было легко сделать мод ("лёгким движением руки" и простым редактированием текстовых файлов конфигурации/данных, например, можно сбацать другой список существ и полностью поменять вопросы; про графику уж не говорю...) Правда, с позволения почтеннейшей публики, я не буду вдаваться в подробности того, как это делается. :| Наиболее существенные моменты вполне поддаются интуитивному пониманию, а без ненаиболее существенных, в принципе, можно и обойтись. :) Единственное напутствие потенциально интересующимся - тест сделан в виде "3 варианта в 1", при этом по умолчанию используется тот, который описывается файлом config\config.txt и файлами из папки database\mikle.
Кроме того, можно отметить, что исходничек можно считать примером (не очень хорошим ;) по применению OpenGL и той бадяжки, которая лежит в подразделе "Всяческие исходники" под гордым названием csictl.
Словом, приятных ковыряний и извращений. ;) Билдер рулез!


Всяческие исходники


C++: CSICTL - заготовка кода для построения и контроля древовидной структуры из разнородных объектов (во как :)
csictl.zip (46661 байт)

Точнее говоря, это определение базового класса и нескольких макрокоманд, при помощи которого программеру будет легче (это я по своему примеру так думаю... :) набивать код, ответственный за упомянутый процесс. Прилагается пример в лице убогого консольного приложения (example.cpp), смысл которого абсолютно неочевиден до изучения исходника... :)
Более серьёзным примером является расположенный в предыдущем разделе исходник теста на расовую принадлежность, но в нём без поллитры разобраться ещё тяжелее. ;(

Наверх...
Возникает естественный вопрос - а в чём польза от организации разнородных объектов в древовидные структуры?
Думаю, такой способ оценят те, кто сильно огорчился, попробовав программировать под DirectX или что-либо другое, в основе чего лежит идея: сначала создай такой-то объект, потом такой-то объект, а потом вот такие-то объекты, и только после этого вот такие-то объекты... а потом не забудь это всё освободить, но обязательно в обратном порядке... да, и ещё не забудь учесть, что вот такие-то объекты любят время от времени терять содержащиеся в них данные (типа издержки мультизадачности), поэтому их надо восстанавливать, хе-хе, ручками... ну, и тому подобное безобразие, являющееся прямым следствием функциональной взаимосвязи разноуровневых объектов, некоторые из которых весьма своенравны.
В моих радужных планах в то время было написание некоего ознакомительного проекта по типу "Hello, world!!" в том самом DirectX-е. Описанная проблема проявилась сразу же, что, с практической точки зрения, означало написание кучи рутинно-утилитарных строчек (плюс ещё их отладки), а это, естественно, пагубно сказалось на сроках реализации проекта и желании его реализовывать в принципе... :/
Проект реализовать удалось, но остался ужасно неприятный осадок. Значит, в следующем проекте придётся повторять всю эту нудную процедуру? А если он будет на порядок посложнее, что тогда? :0
Вот почему пришлось написать нечто, вспоможающее в реализации наиболее противных, с моей точки зрения, вещей. А именно:
- создания объектов в порядке, соответствующем их функционально-иерархической связи, и применение требуемых процедур при обломе на какой-либо стадии этого процесса;
- (самое главное!) последующей их ликвидации в правильном порядке и без лишнего геморроя; - подачи сигналов, на которые оные объекты реагировали бы определённым образом, причём также в правильном порядке. (Например: "юзер нажал Alt-Tab, поэтому данным в видеопамяти, скорее всего, кирдык, всем срочно предпринять контрмеры!")
Прилагается типа пример - малобюджетное консольное приложеньице. Должно скомпилироваться на любом современном C++ компиляторе - по крайней мере, на Билдере работает замечательно (кроме одного ма-а-аленького предупрежденьица, но оно скорее для устрашения... :)
Кстати, пример компилировался не как проект, а из командной строки Нортона-Командира путём вызова bcc32. Просто ужас, до чего ретроградны бывают люди... :)
З.Ы. Как и говорилось, перед запуском программы лучше посмотреть её исходный код. То, что в около 20% случаев программа "не запускается" - это не глюк, но задуманная в демонстрационных целях фича.
З.З.Ы. CSICTL расшифровывается как complex structure integrity control. Малоизящно, но надо было хоть что-нибудь придумать. :)


C++: встраиваемая система поддержки скриптового языка MC3 в проектах C++.
mc3.zip (126286 байт)

Исправлено 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х новых.
Настоящая система является результатом этого доведения.
Преимущества системы (это мне так кажется, но может, оно и правда :)


C++: Описание алгоритма поиска пути на частном случае прямоугольно-ячеистой карты + демопрограмма
obh_demo.zip (319162 байт)

Изобретённый мной (звучит нескромно, но про существование подобных алгоритмов мне пока неизвестно) алгоритм поиска пути внутри односвязной области на карте из прямоугольных ячеек. В отличие от большинства существующих методов, опирающихся на графы и прочие вещи, производные от расточительного перебора кучи промежуточных точек для каждого индивидуального расчёта, данный алгоритм основан на идее поиска топологического преобразования, устанавливающего соответствие между точками произвольной односвязной области и канонического круга. Это делает возможным сопоставление любой точке области величины - периметрального угла (аналог полярной угловой координаты), непрерывно изменяющейся при движении по замкнутому контуру внутри области, и свести задачу к движению на сближение ходока и цели по этой координате.

Наверх...
Задача поиска пути терзает мой беспокойный ум ещё со школьных времён, поэтому рано или поздно сие озарение должно было-таки наступить. :) Пусть пока только для частного случая, но это уже кое-что, и кое-что вполне весомое. Преимущество алгоритма перед конкурентами состоит в том, что здесь практически все необходимые расчёты можно произвести предварительно и свести в единую таблицу, а для вычисления вектора, двигающего из произвольной точки в направлении другой произвольной точки, остаётся проделать лишь примитивное вычисление с фиксированным числом операций, не зависящим от размеров и конфигурации карты. Это - основная сила предлагаемого алгоритма, которую человечество, долгие годы прозябавшее в графовой парадигме, пока ещё до конца не осознало. :)
В комплекте поставляется демонстрационная программа, исходники к ней (Билдер 5) и описание теоретической части (не сильно удачное, но уж каков из меня писатель математическо-алгоритмических статей. :(.


C++: Тетрис за 6 часов
tetris_6h.zip (32409 байт)

Одна дискуссия навела меня на мысль попробовать - реально ли написать тетрис с нуля, силами одного человека и в течение 4-5 часов? Эксперимент, в лучших традициях честной науки, был поставлен на себе...

Наверх...
Оказалось - реально! Хотя и с оговорками. В 5 часов, правда, не уложился, понадобилось 6, но это исключительно от отсутствия подобного опыта. Результат эксперимента прилагается вместе с исходником.


C++: Исходники игр Dracivil War и Operation I.T.C.H.
dracivil.zip (272734 байт)
itch.zip (689531 байт)

За прошедшие годы я написал 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 лет профессиональной разработки. Пересматривая и сопоставляя исходники, было любопытно проследить эволюцию себя, как программиста.


На главную страницу...
Hosted by uCoz