← Таймлайн
1998–2002 · BASIC, Pascal и олимпиады

Проекты DiVision

Всё, что не игры. В нашей школе каждую зиму проходил конкурс программистов, и несколько лет он был главной причиной писать код. В январе 1998 года я принёс четыре программы и получил приз за самую оригинальную; к конкурсу 1999 года их было десять; в 2001 году — первое место в трёх категориях и приз зрительских симпатий. А больше всего я делал то, что было нужно мне самому: файловый менеджер, оболочку, тренажёр слов, метроном.

Turbo PascalFree PascalDelphi

Программы

Synthesizer 1998

Для первого конкурса: клавиатура превращается в пианино от 65 до 3120 Гц на PC-спикере, три стиля игры, запись с длительностями нот, повтор, график нот и сохранение в файл.

File Commander 1997–1999

Начинался в декабре 1997 года как AndreyCommander — меню с калькулятором, сиреной и пианино, а вырос в мой собственный двухпанельный Norton Commander, к ноябрю 1999 года версия 1.80: свой формат архива FCA (сжатие повторов плюс пароль), копирование и перенос целых деревьев каталогов, открытие файлов по расширению, резидентные часы и три способа удаления — стереть, в корзину или «уничтожить», когда файл сначала затирается.

Buttons’99 1998–1999

Мой собственный Windows: около 2200 строк на Паскале — панель задач, окна из кнопок, привязанных к процедурам, инженерный калькулятор с четырьмя ячейками памяти и построителем графиков, Paint, настройки цветов с сохранением в файл и синтезатор с экранной клавиатурой, который записывает мелодию с длительностями нот. В видео он играет мелодию, сохранённую в марте 1999 года.

WRD 1999

Тренажёр слов, которым я сам пользовался: словарь с любым числом колонок, здесь — неправильные немецкие глаголы (русский, инфинитив, Präteritum, Perfekt), сортировка по колонкам, поиск и тест, который показывает одну колонку и просит ввести остальные. В видео — два прохода теста, во втором ошибка сделана нарочно.

Help Explorer 2000

Для справки к своим играм я написал маленький браузер и язык разметки к нему, HHL — «упрощённый HTML»: [Метка] — заголовок, <Метка> или <Метка:файл> — ссылка, {картинка} — изображение, * переключает цвет, а ссылка может ещё и запустить программу и вернуться на страницу, когда та закончит. На нём написано руководство к Space War. В те же месяцы я сделал свой формат спрайтов, он ниже: спрайт хранится отрезками непрозрачных пикселей и рисуется простыми копированиями памяти без проверок прозрачности — на этом держится скорость Space War 2K и Doom RF.

Potok 2001

За две недели до бредогенератора — другой способ писать бред: по правилам. Каждый список слов — текстовый файл, а строка может ссылаться на другие списки: %teoria — на теории, %comp — на компьютеры, %stupid — на фразы вроде «кто-нибудь понял, что я написал». Программа рекурсивно раскрывает ссылки и расставляет заглавные буквы, и получается наукообразный текст про законы Ньютона и IBM-совместимые компьютеры. Сегодня это назвали бы генератором по контекстно-свободной грамматике. Ниже — два правила и что из них вышло (с орфографией 2001 года).

Правила (FRAZA.TXT):
%dla мы должны изучить %teoria.
%first %comp, так как %teoria - %bad.

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

Bred generator 2001

Бредогенератор, июнь 2001 года: читает книги и пишет новый текст по одной букве. Каждая следующая буква берётся из того места в книгах, где шесть предыдущих букв совпадают, а время от времени он прыгает в случайное место. Если скормить ему «Анну Каренину» и «Войну и мир», получается текст, который звучит как Толстой и ничего не значит. Сегодня это назвали бы символьной марковской цепью шестого порядка — далёким предком языковых моделей. Ниже — пример того, что он выдал.

Дай вам Бог, которые не могу пить, - грустно и старалась угадать стала на лестницу. - Пускай посмотрит, т. е. один и о чем же порядком.
Няня-Савишна, почему он сделала партию крокета.
Стой, канальи!
- Да, вот она, - сказал Иогеля, боком платье, но не верить мне денег нет.
- решил князь Андрей Болконская приехал сделать.

Ticker 2001–2002

Метроном на Delphi, под который я учился играть на гитаре: выбираешь звук, задаёшь темп в миллисекундах или в ударах в секунду, минуту или час, и все четыре поля пересчитываются друг в друга.

F(x) 2002

Построитель графиков на Delphi, который понимает формулы с sin, ln, log, целой и дробной частью — и производные: a' дифференцируется символьно, переписыванием строки формулы по правилам произведения и частного. Наводишь мышь — видишь f(x) и f'(x), тянешь — сдвиг, колесо — масштаб.

Исходник того времени

BMP-SPR.PAS
procedure convert;
var i,j,k:longint;
    f:word;
    r:rec;
    b:^tar;
begin
  j:=0;
  spr.maxa:=0;
  new(b);
  spr.maxsp:=0; f:=0;
  for j:=0 to my-1 do
  begin
    i:=0;
    while i<mx do
    begin
     if bmp^[j*mx+i]<>black then
     begin
       k:=i;
       while (bmp^[j*mx+k]<>black)and(k<my) do inc(k);
       r[spr.maxsp].x:=i;
       r[spr.maxsp].y:=my-j-1;
       r[spr.maxsp].l:=k-i;
       r[spr.maxsp].w:=f;

       move(bmp^[j*mx+i],b^[f],r[spr.maxsp].l);

       inc(f,r[spr.maxsp].l);
       inc(spr.maxsp);
       i:=k;
     end;
    inc(i);
   end;
  end;
  spr.maxa:=f;
  getmem(spr.a,spr.maxa);
  move(b^,spr.a^,spr.maxa);
  getmem(spr.sp,5*spr.maxsp);
  move(r,spr.sp^,5*spr.maxsp);
  dispose(b);
end;
procedure putsprite(dx,dy:integer);
{Эффективна, если много прзрачных точек}
var i:integer;
    r:tr;
begin
  for i:=0 to spr.maxsp-1 do
  begin
    r:=spr.sp^[i];
    move(spr.a^[r.w],scr^[(dx+r.x)+(dy+r.y)*320],r.l);
  end;
end;

Июль 2000. convert режет каждую строку BMP на отрезки нечёрных пикселей и запоминает x, y, длину и смещение в одном упакованном массиве; putsprite после этого — просто один move на отрезок. Комментарий так и говорит: «эффективна, если много прозрачных точек».

Картинки

Подробнее

Эта программа строит графики функций по заданным формулам. Понимает даже производные.