Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2010, 10:46   #1
Anabella
 
Регистрация: 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.
Anabella вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
анимация 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