Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Просьба помочь с комментариями

48K
24 июня 2009 года
JusttRy
5 / / 16.06.2009
Просьба помочь с комментариями и описанием алгоритма
Код:
program FLAME;
{$R-}

type  TScr = array[0..202,0..319] of Byte;
var  Scr: TScr absolute $A000:$0000;

procedure SetPalette;
var   N : Longint;
begin
  Port[$3C8] := 0;
  for N := 0 to 63 do begin
    Port[$3C9] := N;
    Port[$3C9] := 0{(N+64) div 65 * Sqr(63-N) div 128{};
    Port[$3C9] := 0{(N+64) div 65 * Sqr(63-N) div 128{};
  end;
  for N := 64 to 255 do begin
    Port[$3C9] := 0;
    Port[$3C9] := 0;
    Port[$3C9] := 0;
  end;
end; {of SetPalette}

var   X, Y, S, I: Integer;
begin
  asm mov ax,$13; int $10; end;
  SetPalette;
  for X:=48 to 319-48 do
    for Y:=100-7 to 100+7 do
      Scr[Y,X]:=255*(X*Y and 3);
  Scr[130,319-30]:=63;
{  for X:=0 to 319 do
    for Y:=0 to 199 do
      Scr[Y,X]:=255;
  Scr[100,160]:=63;{}
  repeat
    for I:=1 to 1000 do begin
      X:=Random(318)+1;
      Y:=Random(200)+1;
      S:=Scr[Y,X];
      if (S<64) and (S>0) then begin
        Dec(S);
        if S>63 then S:=63;
{        if Scr[Y-3,X]<64 then Scr[Y-3,X]:=S else if S>0 then S:=63;{Scr[Y-3,X]:=63;{}
        if Scr[Y-2,X]<64 then Scr[Y-2,X]:=S else S:=63;{Scr[Y-2,X]:=63;{}
        if Scr[Y-1,X]<64 then Scr[Y-1,X]:=S else S:=63;{Scr[Y-1,X]:=63;{}
        if Scr[Y+1,X]<64 then Scr[Y+1,X]:=S else S:=63;{Scr[Y+1,X]:=63;{}
        if Scr[Y,X-1]<64 then Scr[Y,X-1]:=S else S:=63;{Scr[Y,X-1]:=63;{}
        if Scr[Y,X+1]<64 then Scr[Y,X+1]:=S else S:=63;{Scr[Y,X+1]:=63;{}
      end;
    end;
  until Port[$60]<128;
  asm mov ax,$03; int $10; end;
end.
6
24 июня 2009 года
George
4.1K / / 05.01.2007
о, а нельзя сказать хотя бы что должна делать функция? а то сидеть разбирать весь этот код мало кто захочет имхо...
48K
24 июня 2009 года
JusttRy
5 / / 16.06.2009
оп, сори, программа иммитирует поджиг и сгорание полоски бумаги...
41K
25 июня 2009 года
grrrr
23 / / 23.05.2009
Код:
program FLAME;
{$R-}
{ проверка віхода за область диапазона выключена}
type  TScr = array[0..202,0..319] of Byte; { массив - растр}
var  Scr: TScr absolute $A000:$0000;       { переменная расположена с начальной области видеопамяти в режиме $13 }

procedure SetPalette; {установка палитры всего 255 цветов}
var   N : Longint;
begin
  Port[$3C8] := 0; {индексный порт}
  for N := 0 to 63 do begin
    Port[$3C9] := n;{ red }
    Port[$3C9] := 0; {green}
    Port[$3C9] := 0; {blue}
  end;
  {обнуление оставшейся палитры }
  for N := 64 to 255 do begin
    Port[$3C9] := 0;
    Port[$3C9] := 0;
    Port[$3C9] := 0;
  end;
end;

var   X, Y, S, I: Integer;
begin
  asm mov ax,$13; int $10; end; {установка видеорежима }
  SetPalette;                   {установка палитры всего 255 цветов}
  for X:=48 to 319-48 do        {прорисовка области для огня}  
    for Y:=100-7 to 100+7 do
      Scr[Y,X]:=255*(X*Y and 3);
  Scr[130,319-30]:=63;
  repeat                 { прорисовка огня}
    for I:=1 to 1000 do begin
      X:=Random(318)+1;
      Y:=Random(200)+1;
      S:=Scr[Y,X];
      if (S<64) and (S>0) then begin
        Dec(S);
        if S>63 then S:=63;
        if Scr[Y-2,X]<64 then Scr[Y-2,X]:=S else S:=63;
        if Scr[Y-1,X]<64 then Scr[Y-1,X]:=S else S:=63;
        if Scr[Y+1,X]<64 then Scr[Y+1,X]:=S else S:=63;
        if Scr[Y,X-1]<64 then Scr[Y,X-1]:=S else S:=63;
        if Scr[Y,X+1]<64 then Scr[Y,X+1]:=S else S:=63;
      end;
    end;
  until Port[$60]<128; { пока не нажата клавиша}
  asm mov ax,$03; int $10; end; {возврат к режиму 03h }
end.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог