Принцип примерно такой:
1). Готовишь матрицу m*n, в которой записываешь коды цвета каждого пикселя. Например:
Код
0 0 1 0 0
0 1 0 1 0
1 0 2 0 1
2). Когда нужно вывести фигуру пробегаешь по массиву и вместо кода цвета подставляешь нужный цвет или пропускаешь точку вобще.
Например при выводе фигуры указанного массива можно поступить так.Написать функцию DrawShtuka с четырьмя параметрами: x, y, цвет №1 и цвет №2. В функции пробежаться по этому массиву типа
Код
For i:=0 To 4 Do
For j:=0 To 2 Do
Case Matrix[i,j] Of
1: PutPixel(x+i,y+j,Color1);
2: PutPixel(x+i,y+j,Color2)
End
Для шибкоразноцветных фигур можно передавать массив цветов. А в идилии такая функция описывается примерно так:
Код
Type
TIntVector=Array Of Integer;
TIntMatrix=Array Of TIntVector;
Procedure Draw(x,y:Integer;Matrix:TIntMatrix;Colors:TIntVector);
Var
i,j:Integer;
Begin
For i:=0 To Hi(Matrix) Do
For j:=0 To Hi(Matrix[i]) Do
If Matrix[i][j]<>-1 Then
PutPixel(x+i,y+j,Colors[Matrix[i][j]]
End;
Ну, или примерно так.
В твоём случае, конечно, это плохой выход. Даже, наверное, совсем не выход. Но в будующем может и пригодится