![]() |
![]() |
SHnur |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 81 Пол: Мужской Реальное имя: Шурик Репутация: ![]() ![]() ![]() |
Это генератор снежка в Граф. режиме .
В исходном варианте является движком со множеством настроек . Заценяйти ![]() Snow Змейка в граф. режиме Snake вот ! Такие работают =] Всё .. Прошу тестить ![]() ВНИМАНИЕ! в архиве находятся уже скомпилированные программы. Рекомендую проверить содержимое антивирусом... админ. Сообщение отредактировано: SHnur - 7.01.2005 1:51 -------------------- Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом. |
![]() ![]() |
SHnur |
![]()
Сообщение
#2
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 81 Пол: Мужской Реальное имя: Шурик Репутация: ![]() ![]() ![]() |
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; А вот какие настройки в нем есть (есть очень даже забавные - снег падает снизу вверх ![]() Код 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} Если что-то непонятно , то спрашивай . ;) -------------------- Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом. |
![]() ![]() |
![]() |
Текстовая версия | 15.07.2025 20:43 |