Skip to main content

Блог инженера

Блог о минимализме, инжинерии и программировании.



Черепашья графика на Forth

  | #Forth#graphics

Меня не оставляет мысль о двухмерной графике на языке программирования Forth. В блоге у меня уже опубликовано несколько статей о двухмерной графике на Postscript. Это стековый язык, подобный форту, но не совсем то. Задачу сильно затрудняет то, что большинство реализаций форт - древние. Они работают, но не имеют нормальных привязок к GUI. Да, форт легко расширять, но я далеко не настолько крут, чтобы нормально привязать графическую библиотеку к какой-нибудь реализации форта.

Программирование на C внушает уныние. Это пример программы Hello world на С с использованием SDL.

#include <SDL/SDL.h>

int main(int argc, char *argv[]) {
    int gogogo = 1;
    SDL_Event event;

    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_WM_SetCaption("Hello World! :D", NULL);
    SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE);
    while (gogogo) {
        SDL_WaitEvent(&event);
        if (event.type == SDL_QUIT)
            gogogo = 0;
    }
    SDL_Quit();
    return 0;
}

На самом деле я уже нашёл способ писать программы с 2D/3D графикой на высокоуровневом и простом языке, но это тема отдельного поста.

Сегодня же я нашёл простой и разочаровывающий пример 2D графики на Forth. Статья Coding for pre-schoolers: a ‘Turtle Logo’ in Forth описывает “черепашью графику” на Forth. “Черепашья графика” - это очень популярный язык для рисования, созданный специально для целей обучения. Ему больше сорока лет. Пакет черепашьей графики и язык программирования Logo были созданы для обучения. Язык Logo - это диалект языка Lisp. Можно долго обсуждать, что лучше для обучения программированию - Logo или Lisp, сегодня это не имеет смысла. Оба уступили другим, более сложным, языкам программирования. Но на языке Logo можно было делать простые программы, которые делают сложные рисунки и это мне очень нравилось. Графика называется “черепашьей” потому, что рисует “черепашка” из треугольника или даже красочного слайда. Ей можно давать команды вроде идти вперёд Х шагов, повернуть направо/налево на Y градусов. Поднять перо (и перестать рисовать), опустить перо, выбрать какой-либо цвет. Команды можно давать в диалоговом режиме, а можно написать простую программу, которая нарисует сложный рисунок.

Logo example

Технически, реализовать такую черепашью графику можно на любом языке программирования. В статье Coding for pre-schoolers: a ‘Turtle Logo’ in Forth описана черепашья графика на Forth. Статья довольно большая поэтому я не сразу заметил, что линии рисуются не пикселями, а знакоместами в текстовом режиме. Поэтому получится рисунок 25x80. И рисовать в диалоговом режиме не получится, программа управляется “горячими клавишами”. Идея в том, что можно начертить элемент узора, записать последовательность действий, а потом воспроизвести её на новом месте и получится более сложный узор. Это, может быть, интересно, но не совсем то, что мне нужно. Более того, программа написана в реализации Forth для MS DOS, поэтому запускать программу нужно в эмуляторе. Например, в DosBox, а для распаковки программы нужны права администратора.

К счастью, я нашёл GitHub с кодом этого проекта.

В комментариях нашёлся проект mjoy - это черепашья графика на языке программирования Joy. Ещё один удивительный язык, одновременно и стековый и функциональный язык программирования. С доступным исходным кодом написанный на Delphi. mjoy не требует установки. Я немного поигрался им. К сожалению, сочетание функционального и стекового языка выглядит настолько непривычно, что я так и не осознал прелести этого языка. Хотя для экспериментов он очень интересен.

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

P.S. В итоге освоить графику на Си оказалось не так просто. Проблема в инструментах. Ниже публикации о том, какие проблемы возникли.

Публикации о том, как непросто начать с азов.

Компьютерная графика на языке программирования Форт. Часть 1

О попытке реализовать компьютерную графику на Форт.

About Mikhail Kiselev

Photo of Mikhail Kiselev

Приветствую в моём блоге! 😄 Меня зовут Михаил. Я инженер и программист. Живу в Израиле. Но мой блог связан с работой в Сибири и на Сахалине, путешествую где придётся. Я предпочитаю пост в блог посту в твиттер. Описание полезной технологии или гаджета предпочитаю описанию заката или посиделок в кафе.