Для начала, так скажем для разминки и открытия сезона Турбо Паскаля приведу описание простенькой программки которая будет визуально иметировать эффект "Матрицы". Ну кто из Вас, дорогие читатели не смотрел фильм "Матрица"? Я думаю таких сейчас днем с огнем не отыщешь, посему от слов постепенно переходим к делу.
Представим ситуацию, что есть у нас пара по программированию, все лабораторки давным давно сданы и заняться практически нечем. Включаем фантазию и пишем код.
Uses crt, Dos;
var s,i,x,y,D,n: integer;
r: real;
regs: Registers;
begin
clrscr;
regs.ah := 1;
regs.ch := $20;
regs.cl := 0;
regs.bh := 0;
Intr($10,regs);
x:=1; y:=1;
TextColor(RED);
Writeln(' ВНИМАНИЕ!!!');
Writeln('Для полного эффекта просмотра разверните окно на весь экран (Alt+Enter)');
writeln('Затем нажмите любую клавишу...');
readkey;
clrscr;
REPEAT
textattr:=10;
r:=1;
while r<=128 do
r:=r+0.001;
Randomize;
N:=random(9);
for I:=1 to N do begin
d:=random(70);
If d<10 then d:=10;
gotoxy(x,y);
write(CHR(d));
y:=y+1;
if y=25 then y:=1;
end;
X:=random(80);
if x>=80 then x:=1;
writeln;
writeln;
UNTIL KEYPRESSED;
textattr:=138;
gotoxy(32,12);
writeln('г==============¬');
gotoxy(32,13);
writeln('¦ Matrix error ¦');
gotoxy(32,14);
writeln('L==============-');
readln;
gotoxy(57,24);
TextColor(yellow);
writeln('Автор: Мукомело Евгений');
readln;
end.
Теперь давайте попробуем разобрать что же мы настрочили :)
Первые строки думаю ни у кого вопросов не вызовут, а вот этот кусок:
regs.ah := 1;
regs.ch := $20;
regs.cl := 0;
regs.bh := 0;
Intr($10,regs);
нам необходим для того что бы спрятать курсор. Если этого не сделать то по экрану будет бегать курсор и будет портить всю красоту того что мы изображаем. Для реализации используется пример из книги "Профессиональное программирование на Турбо-Паскале" А. Файсмана. Для тех кто хочет изучить всю глубину - может найти эту книгу либо погуглить, а если в крации то устанавливаются определенные параметры переменной типа Регистрс, затем инициируется вызов прерывания $10 используя при этом функционал DOS.TPU библиотеки.
И так, курсор мы спрятали. Далее по коду проводим подготовку, присваиваем первичные значения переменным, и далее.. Далее открываем цикл с постусловием, который заканчивается тогда, когда срабатывает событие нажатия клавиши на клавиатуре. А в этом самом цикле и начинается все самое интересное. Алгоритм у нас примерно следующий:
Цикл
- Выполняем импровизированную задержку, путем выполнения цикла сложения чисел.
- Далее с помощью генерации случайных (псевдослучайных) числе определяем то, какой длинны у нас будет выводимый столбец (ряд символов).
ПодЦикл
- С помощью функции генерации псевдослучайных чисел Random выберем произвольный символ из таблицы ACSII. Лично я использовал символы из диапазона от 10 до 70.
- Перемещаем курсор в нужную часть экрана с помощью gotoxy() и выводим случайный символ.
- Инкрементируем позицию курсора Y (по вертикали)
Конец ПодЦикла
- Выбираем случайным образом, в какой позиции X (по горизонтали) будем выводить следующий ряд символов.
- Выводим новую строку, для смещения экрана вверх
Конец Цикла
Ну и далее если был произведен выход цикла делаем вывод на экран мигающее сообщение об ошибки и авторство программы (думаю все студенты любят ставить свою подпись). Сообщение об ошибки исключительно ради эффекта или прикола, уже и не помню зачем так делал :)
В общем таким не замысловатым образом можно скоротать некоторое время и собрать у своего экрана всю группу+учителя, ну или просто скоротать некоторое время и самому полюбоваться на результат :) Это лишь скелет, в теории если обрастить графическими функциями можно сделать то что практически не будет уступать в красоте флеш аналогам.
Кстати стоит заметить, что запускать такую программу лучше всего в полноэкранном режиме (Alt+Enter), потому как в окне консоли анимации и прочие подвижные действия в DOS программах выглядят не полноценно и убого, страшно тормозя.
В следующей статье поговорим о том как плохо использовать операторы GOTO.


а можно как нибудь в екзешник скомпилировать? заранее спасибо! моя почта detrop2011@yandex.ru
ОтветитьУдалитьМогу скинуть экзешник
УдалитьСупер! Огромное спасибо! Жаль, что комментов мало, вещь реально стоящая и, что главное, уникальная!!!
ОтветитьУдалитьа зачем нужен цикл вайл там??
ОтветитьУдалитьаа я понял для задержки))) ну так delay для этого есть какбэ))
ОтветитьУдалитьПроста СУПЕР
ОтветитьУдалить