Показать сообщение отдельно
Старый 10.03.2009, 12:43   #2
ASMjavaC
Оператор ЭВМ
 
Регистрация: 02.03.2009
Сообщений: 26
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Dendy'вские псевдо-3D гонки на MP

неплохо неплохо.. вот рандомная трасса + пояснения
program race01;
var
{
Наверное также сделаны подобные игрушкия не разбирался... но если нетто ставьте мой копирайт ;)}
n1 :array[0..99]of integer;
n2 :array[0..10]of image;
n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16:integer;
begin
{programming by arT (c).   e-mailironWoodcutter@bk.ru}
///////////////////////////////////
for n3:=0 to 60 do n1[n3]:=random(3)-1////создаем трассу
///////////////////////////////////
for n3:=0 to 10 do n2[n3]:=loadimage('/'+n3+'.png'); ////грузим в масив рисунки (10) из res\
n4:=getwidth;
n6:=n4 div 2;
n5:=getheight;
n8:=0;
n9:=n6;
n16:=0;
n7:=0;
repeat
setcolor
(0,255,0);                ////нижнюю половину
fillrect(0,99,n4,n5-99);    ////прорисовываем зеленым
n12:=n9;
for 
n11:=n5-1 downto 99 do ////строим дорогу
begin
n12
:=n12+((n5-n11)div 16)*n1[(n8+((n5-1)-n11)*8)div 256];
n13:=n12-(n11-60);
n14:=n12+(n11-60);
if 
n13<0 then n13:=0;
if 
n14>n4 then n14:=n4;
setcolor(60,40,30);
while 
n13<n14 do begin plot(n13,n11);n13:=n13+1;end////рисуем дорогу
n13:=n12-((n11-99)div 8);
n14:=n12+((n11-99)div 8);
if 
n13<0 then n13:=0;
if 
n14>n4 then n14:=n4;
n15:=(n8+((n5-1)-n11)*8)and $ff
if ((
n15>=0)and (n15<=40))or ((n15>=80)and (n15<=120))or ((n15>=160)and (n15<=200))then
begin
setcolor
(255,255,255);
while 
n13<n14 do begin plot(n13,n11);n13:=n13+1;end////рисуем разметку
end;
end;
drawimage(n2[0],-((255-n12)and $ff),0); ////вставляем небо
n15:=3-n7;
if (
n8 and 12)<>0 then n15:=n15+5;
drawimage(n2[n15],n6-23,n5-30);  ////вставляем тачку
setcolor(255,255,255);
drawtext('x:'+n8+' y:'+n9+' spd:'+n16+' cnt:'+n12,0,0); ////инфа вверху
repaint;
n10:=keytoaction(getkeypressed);////управление
if (n10=ga_up)then if (n16<30)then n16:=n16+2;
if (
n10=ga_down)then if (n16>0)then n16:=n16-2;
if (
n10=ga_right)then if (n7<2)then n7:=n7+1;
if (
n10=ga_left)then if (n7>-2)then n7:=n7-1;
if 
n16>0 then
begin
n8
:=n8+(n16 div 2);
if 
n8>(56*256)then n8:=0;//restart
n9:=n9-n7+(1+(n16 div 8))*n1[(n8+128)div 256];
if 
n9<0 then n9:=0;
if 
n9>n4 then n9:=n4;
if (
n9<=0)or (n9>=n4)then if (n16>3)then n16:=n16-3;
if (
n16>60)then
if (n7>0)then n7:=n7-1
else if (n7<0)then n7:=n7+1;
end;
delay(10);
until n10=ga_fire;
end
(Offline)
 
Ответить с цитированием