IPB
ЛогинПароль:

> Забавы, Заценяем.
SHnur
сообщение 4.01.2005 22:39
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 81
Пол: Мужской
Реальное имя: Шурик

Репутация: -  0  +


Это генератор снежка в Граф. режиме .

В исходном варианте является движком со множеством настроек .

Заценяйти smile.gif жду отзывов

Snow

Змейка в граф. режиме
Snake


вот ! Такие работают =]
Всё .. Прошу тестить smile.gif

ВНИМАНИЕ!
в архиве находятся уже скомпилированные программы.
Рекомендую проверить содержимое антивирусом...
админ.


Сообщение отредактировано: SHnur - 7.01.2005 1:51


--------------------
Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
SHnur
сообщение 6.01.2005 20:16
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 81
Пол: Мужской
Реальное имя: Шурик

Репутация: -  0  +


GoodWind , на самом деле , всё очень просто .
Берём массив типа point ( x,y : integer), на N снежинок .
Забиваем его случайным образом , в пределах рамок (их можно регулировать при компиляции) . А дальше дело за малым :


Вот собственно Алгоритм .

Код
procedure MainSnowProcedure;
var i , j , rx ,ry , Lw , k: integer;
begin
  for i := 1 to n do begin
     putpixel(Snow[i].x,Snow[i].y,BGcol); { Stiraem snezinku }
     LW := wind;
     k :=((brightx-bleftx) div 15);
     repeat
        rx := randomx;
        if (((rx > brightx - abs(windver)*k) ) and (windver < 0 )) or (((rx < abs(windver)*k)) and (windver > 0)) then begin
           ry := randomyf;
           if windver < 0 then rx := brightx - random(4)+2
           else rx := random(4)+2;
        end
        else begin
           rx := randomx;
           ry := randomy(dy); {random(4)+1}
        end;
     until (getpixel(rx,ry) <> snowcol) and (rx < brightx) and (rx > bleftx) and (ry > bupy) and (ry < bbottomy-4);


     if (getpixel(snow[i].x+lw,snow[i].y+dy)=snowcol) and not(insnow(snow[i].x+lw,snow[i].y+dy)) then begin
        if (getpixel(snow[i].x,snow[i].y+dy)=snowcol) and not(insnow(snow[i].x,snow[i].y+dy)) then begin
           if (getpixel(snow[i].x-lw,snow[i].y+dy)<>snowcol) and not(insnow(snow[i].x-lw,snow[i].y+dy)) then begin
              snow[i].x := snow[i].x - lw;
              Snow[i].y := Snow[i].y + dy;
           end
           else begin
              putpixel(snow[i].x,snow[i].y,snowcol);
              snow[i].x := rx;
              snow[i].y := ry;
              inc(m);
           end;
        end
        else begin
           Snow[i].y := Snow[i].y + dy;
        end;
     end
     else begin
        snow[i].x := snow[i].x + lw;
        Snow[i].y := Snow[i].y + dy;
     end;
     {-}
     putpixel(Snow[i].x,Snow[i].y,SnowCol); { Risuem Snezinku}
  end;
end;


Вот пару необходимых ф-ций и процедур .

Код
function insnow(x,y : integer):boolean;
var res : boolean;
  i : integer;
begin
  res := false;
  for i := 1 to n do begin
     if (Snow[i].x = x ) and (snow[i].y = y) then begin
        res := true;
     end;
  end;
  insnow:=res;
end;


Код
function RandomX :integer;
begin
  RandomX := random(Brightx-bleftx+1)+bleftx;
end;
{--}
function RandomY(k:integer) :integer;
begin
  if k > 0 then
     RandomY :=bupy + random(4)+2
  else if k < 0 then
     RandomY :=bbottomy -5 - (random(4)+1);
end;
{--}
function RandomYf:integer;
begin
  RandomYf :=bupy + random(BbottomY-bupy-4)+2;
end;



А вот какие настройки в нем есть (есть очень даже забавные - снег падает снизу вверх smile.gif) )

Код
const   weidht = 639; {639}
       height = 458; {458} {Bolshe nelzja ! Mozno menshe;) }
       x = 0; {0}
       y =0;   {0}

       BleftX = x; {B - prefix = BORDER}
       BrightX = bleftx +weidht;
       Bupy = y;
       BbottomY = Bupy +height;
       CenterX = 320;  {320}

       n = 550; { Koli4estvo snezinok} { ot 10 }

       SnowCol = white;
       BGcol   = black;
       barcol  = green;

       left  = #75;
       right = #77;
       Kend  = #79;
       esc   = #27;

       dy =  1; {1 - s verhu v niz , -1 - snizu vverh}


Если что-то непонятно , то спрашивай . ;)


--------------------
Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 15.07.2025 20:43
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"