|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.06.2010, 10:46 | #1 |
Регистрация: 03.06.2010
Сообщений: 3
|
Спрайтовая анимация
Нужно написать программу для решения следующей задачи: разработать и реализовать на экране поздравительную открытку к любому празднику с динамическими элементами на Паскале.
Есть пример работы со спрайтами, помогите переделать в открытку. Код HTML:
Program Sprite; uses crt, graph, graphs; type bytearratype=array[0..65534] of byte; bytearraptr=^bytearratype; spritetype=record Height,Width:integer; Data:integer; end; var backgroundsprite, testsprite:spritetype; xd, yd, ox, oy, i, x, y:integer; procedure killsprite(var sprite:spritetype); begin with Sprite do begin FreeMem(Data, Width*height); Width:=0: Height:=0; Data:=nil; end; end; procedure createsprite(var sprite:spritetype; width, height:integer); begin if sprite.data<>nil then killsprite(sprite); Sprite.Width:=Width; Sprute.Height:=Height; detmem(Sprite.Data, Width*Height); end; procedure getsprite(var sprite:spritetype; x1, y1, x2, y2:integer); var index, x, y,:integer; begin createsprite(sprite, x2-x1+1, y2-y1+1); index:=0; for y:=y1 to y2 do for x:=x1 to x2 do begin sprite.date^[index]:=getpixel(x, y); inc(index); end; end; procedure drawsprite(var sprite:spritetype; x, y:integer); var index, xi, yi:integer; begin index:=0; for yi:=0 to sprite.height - 1 do for xi:=0 to sprite.width - 1 do begin putpixel(xi+x, yi+y, sprite.data^[index]); inc(index); end; end; begin open_graph; setgraphmode(eda64lo); line(10,1,10,20); line(1,10,20,10); line(1,1,20,20); line(20,1,1,20); getsprite(testsprite,0,0,21,21); x:=0; y:=0; xd:=1; yd:=1; while not keypressed do begin drawsprite(testsprite,x,y); inc(x, xd); inc(y, yd); if (x=getmaxx-20) or (x=-20) then xd:=-xd; if (y=getmaxy-20) or (y=-20) then yd:=-yd; end; readln; clearviewport; setcolr(green); for i:=0 to 100 do line(random(getmaxx), random(getmaxy), random(getmaxx), random(getmaxy)); x:=0; y:=0; xd:=1; yd:=1; while not keypressed do begin getsprite(backgroundsprite, x, y, x+22, y+22); drawsprite(testsprite, x, y); ox:=x; oy:=y; inc(x, xd); inc(y, yd); if (x=getmaxx-20) or (x=-20) then xd:=-xd; if (y=getmaxy-20) or (y=-20) then yd:=-yd; drawsprite(backgroundsprite, ox, oy); end; drawsprite(testsprite, x, y); readln; close_graph; end. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
анимация | Terrance! | Помощь студентам | 4 | 02.06.2010 16:50 |
анимация | волшебная | Общие вопросы Delphi | 0 | 17.12.2008 21:01 |
Анимация | SanekIrk | Общие вопросы Delphi | 2 | 15.08.2008 21:57 |
Анимация | SanekIrk | Общие вопросы Delphi | 11 | 08.08.2008 15:24 |