воскресенье, 25 декабря 2011 г.

Поздравление с Новым 2012 годом в стиле Brainfuck

Захотелось поздравить читателей блога да и себя тоже с Новым годом. Но не просто так, а написав поздравление на Brainfuck.

Первое поздравление выводит сообщение в виде ASCII-Art. Надеюсь, что получилось что-то отдаленно, напоминающее программу на brainfuck. Скриншот показывает что из этого получилось.


Т.к. для вывода текста использовался ограниченный словарь из 5 символов, включая перенос строки, то в начале программы формируется этот самый словарь, а потом указатель памяти бегает по словарю и выводятся символы. Таким образом удалось достаточно сильно сократить размер программы. Осталось только оформить текст самой программы в виде новогоднего поздравления.
Текст получившейся программы можно посмотреть здесь.

Аппетит, как говорится, приходит во время еды. Потратив на первое поздравление минут сорок, а понял, что мне этого будет мало, тем более, что реализация позравления оказалась до банального проста. Поэтому я с принялся за второе поздравление. Захотелось сделать анимированную открытку. Для реализации задумки воспользуемся ESC-последовательностями, которые позволяют превратить текстовый экран почти в графическую станцию.
На видео видно результат работы программы.



Здесь также в начале формируется словарь символов, из которых выводится изображение елочки. Потом в центре экрана "рисуется" елочка.

Далее займемся переливающейся гирляндой. Положение "лампочек" статично, поэтому будем просто выводить их разным цветом. Теперь займемся цветом. Всего используется 7 цветов. В escape-кодах их номера идут по порядку. Поэтому каждый новый символ будем выводить цветом, следующим по порядку. Если начинать вывод "лампочек" гирлянды сдвинув номер цвета на 1 от предыдущего цикла, то получим эффект бегающих огоньков.

Текст программы достаточно документирован, чтобы не останавливаться на подробном описании программы.
 Посмотреть программу можно здесь. Для тех, у кого нет терминала с поддержкой ESC-последовательностей, рекомендую скачать эмулятор DosBox и запустить там заранее  скомпилированную программу. В архиве также присутствует компилятор для Brainfuck.

Комментариев нет: