молодец Cliffe Snake, движёк начинает быть похожим на игру.. я старательно избугаю внешних java-библиотек, чтобы показать реализацию программ более простыми (но не всегда эффективными) методами. Если продолжать проект в MIDletPascal, то нужно добавить drawRGB вместо plot(x,y), создать массив спрайтов примерно следующего вида:
TSprite = Record {Параметры спрайта}
Id : Integer; {классификация спрайта}
Status: Integer; {статус спрайта: активный/убит и т.д.}
X, Y : Integer; {Координаты спрайта}
Dist : Integer; {расстояние до спрайта (т.е масштаб его картинки)}
Ray : Integer; {луч центра спрайта относительно экрана}
Ang : Integer; {угол движения спрайта на карте}
Cnt : Integer; {счетчик анимации текстур для спрайта}
//Racurs: Integer; {номер картинки поворота}
end;
.......
procedure outTexture(x,y,size,imgNum : integer);
var {вывод текстуры с масштабированием}
i,j,xo,yo,coof,offs,color : integer;
begin
coof := (63*256) div size;
xo := 0;
for i := 0 to size-1 do
begin
if (size>screenDist[x+i]) then
begin
yo := 0;
offs := imgNum*64*64+(xo shr 8);
for j := 0 to size-1 do
begin
color := data[offs+((yo shr 8) shl 6)];
if (color<>0) then
begin
setColor(....);
plot(x+i,y+j);
end;
inc(yo, coof);
end;
end;
inc(xo, coof);
end;
end;
для простоты можно делать так, что спрайт всегда повернут к нам "лицом", с какой-бы стороны мы к нему не подходили.
Логика отображения: после прохождения массива спрайтов мы расчитывает положение и размеры каждого из них, а затем при выводе на экран проверяем попадает ли он в угол зрения игрока, и при выводе каждой вертикальной его линии следим чтобы она была больше, т.е. ближе чем линия стены.