Это, скорее, надо в "рефакторинг"...
Если помните, кораблики в моей игре описывались в списковой базе данных:
Код:
BAKU
CVHG
USSR
КРУПНЫЙ
АВИАНОСЕЦ
3"
"A"
"C"
ЖИВУЧЕСТЬ 9
ЦЕНА 15
AIR 1
AIR-DEF 2
А рисуются пока примерно так:
Код:
USSR CVHG BAKU
3"AC + \\
\++++++000000000/
Как из первого получить второе, сохранив, прозрачность кода?
(Размышляя над этой темой, я понял, что опять вернулся к вопросу рисования экранных интерфейсов. Ведь, если "оконный" ввод на FORTH осуществляется элементарно - переназначением входного потока - жмешь кнопку, получаешь слово для исполнения, то с "оконным" выводом все гораздо страшнее - формы, вложенные объекты, куча эвентов-пропертей... А, ведь, возвращаясь к корабликам - это просто перенос управляющей информации из внутренних структур в процедуру рисования, из произвольной формы в строго упорядоченный шаблон. Этакий "FORTRAN-формат наоборот").
Итак, на входе ПЕРЕНОСЧИК пары "символ-значение" (Здесь и далее "символом" обозначаю описанное ранее слово, выдающее адрес своего имени), а на выходе рисование соответствующей фигульки в соответствующем месте.
Не будем поминать всуе функциональное программирование - сделаем проще. Прошьем в код пустой шаблон процедуры рисования. Например, рисование пушек будет выглядеть (в прошивке) так:
Код:
...
LIT 3" LIT 5" LIТ 16" РИСОВАТЬ-ПУШКИ
...
где символы служат якорями/сигнатурами, куда ПЕРЕНОСЧИК будет втюхивать значения (понятно, ПЕРЕНОСЧИК уродует не сам шаблон, а его дубликат, нам же не один кораблик рисовать).
После обработки символа 3" имеем:
Код:
...
LIT 1 LIT 5" LIТ 16" РИСОВАТЬ-ПУШКИ
...
Что и должно символизировать что, будучи запущенной, РИСОВАТЬ-ПУШКИ напечатает 3".
Для удобства поиска/обработки сигнатур имеет смысл применять в шаблоне вместо LIT специальное слово LIT0 (как LIT, но на стек всегда кладется ноль), которое будет заменяться на LIT при подстановке значения.
Конечно, возможны коллизии значение/символ и ноль/отсутствие, но в каждом частном случае они вполне победимы. Более того, способ представления символов делает возможным упрощенную прошивку:
Код:
...
РИСОВАТЬ-ПУШКИ 3" 5" 16"
...
где умный "шитый оборот" РИСОВАТЬ-ПУШКИ сам выберет из кода нужные ему значения и проигнорирует символы.
Заполненную процедуру можно не только пустить на рисование, но и сохранить в новом слове - рисования отдельного кораблика.
Конечно, можно не трогать процедуру рисования, а применить специальную таблицу (даже, таблицу структур), откуда она будет черпать значения, но при этом пропадет прозрачность кода. В БД все ясно, т.к. там тупо символы-значения, в процедуре рисования - тоже (что, где и когда рисуем). А таблица - это новый уровень косвенности, который программисту нужно рассчитывать особо.