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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2009, 17:00   #11
Kopova
Пользователь
 
Аватар для Kopova
 
Регистрация: 26.10.2009
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я имел ввиду что PVO это процедура отрисовки
Я бы в эту процедуру передавал координаты машины. А в процедуре рисовать относительно этих координат...
Я не знаю как обьяснить...
Твоя программа насколько я понял действует так:
однажды нарисовав где то образ машинки фоторгафирует его в некий массив, а потом просто в неких координатах выводит эту фотографию.
Тебе же нужно другое - тебе нужно в процедуру PVO передать координаты машины и угол пушки, и пусть процедура эта в этих переданных координатах рисует все.
Мне-то эта машинка уже вообще не нужна) Мне вместо этой машинки нужно нарисовать пушку, код которой я выше выложил. А эту процедуру я вообще удалю.
С уважением,
Kopova =)
Kopova вне форума Ответить с цитированием
Старый 11.11.2009, 17:18   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А эту процедуру я вообще удалю.
Так все равно!
у тебя программа спрайтами работает (вроде) а код пушки нет.
Значит что-то из них будет глюкать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2009, 06:04   #13
Kopova
Пользователь
 
Аватар для Kopova
 
Регистрация: 26.10.2009
Сообщений: 18
По умолчанию

Обьясните нубу, что такое спрайты)))
С уважением,
Kopova =)
Kopova вне форума Ответить с цитированием
Старый 12.11.2009, 08:35   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Смотри, что делает твоя программа если я правильно понял:
1. При запуске отрисовывается в неких координатах картинка:
Код:
PVO; {Рисуется}
        getimage(0,0,50,50,p^);{фотографируется отрисованное}
Тоже самое:
Код:
pulka;
        getimage(0,0,5,10,p1^);
Код:
 NLO;
        getimage(0,0,50,20,p3^);
Так?
Так вот такое вот "фотографирование" фактически можно назвать спрайтом - неким объектом, скелетом, который после отрисовывается в каких-то координатах

2. Далее при нажатиях клавиш
Код:
      if a=chr(77) then begin
                                     x:=x+3;
                                     if x>580 then begin
   {Программа отрисовывает сфотографированное в некой координате}
                                                    putimage(x,y,pp^,copyput);
                                                    x:=10;
                                                   end;
                                     putimage(x,y,p^,copyput);

                                     end;
Но то что ты однажды сфоторгафировал изменить уже нельзя!
По крайней мере это достаточно сложно - отрисовать измененный образ-сфоткать его-очистить... Бр... Это геморрой.

По хорошему это делается в крутых играх, где один раз продумали стратегию и более ее не меняют радикально - а у тебя пушку оворачивать - это изменение одного из сфотографированных элементов, стало быть два выхода

а) забить на работу со спрайтом для этого элемента и отрисовывать его в координатах самостоятельно - но тогда по хорошему и остальные нужно так же рисовать
б) изменять сфотограффированное - это реально сложно

Я бы на твоем месте заново все переписал и написал совершенно по другому.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2009, 11:17   #15
Kopova
Пользователь
 
Аватар для Kopova
 
Регистрация: 26.10.2009
Сообщений: 18
По умолчанию

Ок, будем переписывать. Надеюсь на Вашу помощь)
С уважением,
Kopova =)
Kopova вне форума Ответить с цитированием
Старый 12.11.2009, 13:19   #16
Kopova
Пользователь
 
Аватар для Kopova
 
Регистрация: 26.10.2009
Сообщений: 18
По умолчанию

Цитата:
Сообщение от triton Посмотреть сообщение
Тяжёлый случай. Как же ты рисуешь, если даже не знаешь где?
К чему ты это написал?
По теме: как думаете, землю, самолётики и пульку оставить ввиде процедур? А саму пушку? И как сделать так, чтобы она ещё и стреляла?
С уважением,
Kopova =)
Kopova вне форума Ответить с цитированием
Старый 12.11.2009, 13:43   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Землю можно нарисоватьтолько однин раз
Самолетик - одна процедура
Пушка - другая
Пулька - третья

Желателенейше было бы это классми оформить.
В любом случае нужно хранить координаты всех трех объектов.
И затормаживать самолетик при выстреле - это глупость, согласись.

Для начала напиши отдельно каждый объект, и отработай их отрисовку в разных координатах - это совет, после чего помести в отдельный модуль. а в основной проге только вызывай.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.11.2009, 11:58   #18
Kopova
Пользователь
 
Аватар для Kopova
 
Регистрация: 26.10.2009
Сообщений: 18
По умолчанию

Решил вписывать всё постепенно) Вот, вписал пушку и землю:
Код:
 uses crt, graph;
 var gd, gm: integer;
     a,b: integer;
     x0,x1,x2,x3,x4,y0,y1,y2,y3,y4: integer;
     alpha, beta, koef: real;
     ch: char;

  procedure NLO; 
    var l:integer;
    begin randomize;l:=random(256);
        setcolor(l);
        line(9,8,7,8);line(7,9,5,9);
        line(5,10,3,10);line(3,11,1,11);
        line(1,11,1,13);line(2,14,4,14);
        line(3,15,5,15); line(5,16,8,16);
        line(7,17,10,17);line(10,18,16,18);
        line(16,19,35,19);line(35,18,41,18);
        line(41,17,44,17);line(44,16,46,16);
        line(46,15,48,15);line(48,14,49,14);
        line(49,14,49,11);line(49,11,48,11);
        line(48,10,46,10);line(46,9,44,9);
        line(44,8,41,8);line(41,7,41,9);
        line(41,9,40,9);line(40,10,37,10);
        line(37,11,33,11);line(33,12,17,12);
        line(17,11,13,11);line(1223,10,10,10);
        line(10,9,9,8);
        setfillstyle(1,l);floodfill(24,15,l);
        putpixel(31,16,0);putpixel(42,12,0);
        putpixel(18,16,0);putpixel(7,13,0);
        setcolor(11);
        line(18,11,32,11);line(32,10,36,10);
        line(36,9,39,9);line(40,8,40,5);
        line(39,4,36,4);line(36,3,32,3);
        line(32,2,18,2);line(18,3,14,3);
        line(14,4,11,4);line(10,5,10,8);
        line(11,9,14,9);line(14,10,18,10);
        setfillstyle(1,11);floodfill(25,7,11);
     end;

      procedure pulka;
               begin
               setcolor(5);
               line(2,6,2,3);line(3,6,3,0);line(4,6,4,3);
               setcolor(13);
               line(3,8,3,7);
               setcolor(14);
               line(1,5,1,7);line(2,7,2,9);
               putpixel(3,9,14);line(4,7,4,9);line(5,5,5,7);
               end;

    procedure gameover(b,v:integer);
      var u,o:integer;
          i:^integer;
          siz:word;
     begin
      siz:=imagesize(0,100,1,100);
      getmem(i,siz);
      getimage(0,100,1,100,i^);
      if v>500 then begin
      outtextxy(300,240,'Y');
      outtextxy(308,240,'o');
      outtextxy(316,240,'u');
      outtextxy(324,240,' ');
      outtextxy(332,240,'W');
      outtextxy(340,240,'I');
      outtextxy(348,240,'N');
                    end;
      if b>500 then begin
                       outtextxy(300,240,'G');
                       outtextxy(308,240,'a');
                       outtextxy(316,240,'m');
                       outtextxy(324,240,'e');
                       outtextxy(332,240,'_');
                       outtextxy(340,240,'O');
                       outtextxy(348,240,'v');
                       outtextxy(356,240,'e');
                       outtextxy(364,240,'r');
                       delay(450);outtextxy(330,260,':');
                                    outtextxy(338,260,'-');
                                    outtextxy(346,260,'>');
                    end;
      delay(64);delay(64);
      delay(64);
      for u:=0 to 640 do
      for o:=0 to 480 do begin
                           putimage(u,o,i^,copyput);
                         end;
     end;

     procedure pvo;
     var a,b,gd,gm: integer;
     x0,x1,x2,x3,x4,y0,y1,y2,y3,y4: integer;
     beta, koef: real;
     ch: char;
begin
 x0:= 300;
 y0:= 410;
 a:= 70;
 b:= 10;
 beta:= arctan(b/a);
 setcolor (12);
   x1:= x0;
   y1:= y0;
   x2:= x0+round(a*cos(alpha));
   y2:= y0-round(a*sin(alpha));
   x3:= x0+round(sqrt(sqr(a)+sqr(b))*cos(alpha-beta));
   y3:= y0-round(sqrt(sqr(a)+sqr(b))*sin(alpha-beta));
   x4:= x0+round(b*cos(alpha-pi/2));
   y4:= y0-round(b*sin(alpha-pi/2));
   line (x1, y1, x2, y2);
   line (x2, y2, x3, y3);
   line (x3, y3, x4, y4);
   line (x4, y4, x1, y1);
   end;

begin
initgraph(gd, gm,' ');
 setcolor(4);
     line(0,55,640,55);
     line(0,479,0,430);
     line(0,430,639,430);
     line(639,430,639,479);
     line(639,479,0,479);
     setfillstyle(6,1);
     floodfill(10,470,4);
 alpha:= 0;
 koef:= 1;

repeat
     SetViewPort(200, 300, 400, 420, ClipOn);
     ClearViewPort;
     SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn);

     pvo;
  ch:= readkey;
  if ch=#0 then ch:=readkey;
      case ch of
      #75: begin
            koef:= 1;
            alpha:= alpha+0.1;
            if abs(alpha)>=pi then alpha :=pi;
            delay(1);
           end;
      #77: begin
            koef:= -1;
            alpha:= alpha+koef*0.1;
            if alpha<=0 then alpha :=0;
            delay(1);
           end;
     end;
until ch=#27;
closegraph;
end.
Помогите сделать так, чтобы самолётики залетали) Те, что в прцедуре NLO нарисованы)

хм... Никто не поможет?

Тогда подскажите, пожалуйста, как сделать стрельбу. Очень прошу.
С уважением,
Kopova =)

Последний раз редактировалось Stilet; 17.11.2009 в 09:56.
Kopova вне форума Ответить с цитированием
Старый 17.11.2009, 18:19   #19
Kopova
Пользователь
 
Аватар для Kopova
 
Регистрация: 26.10.2009
Сообщений: 18
По умолчанию

Вот код с летающими самолётами:
Код:
uses crt, graph;
 var gd, gm: integer;
     a,b: integer;
     x0,x1,x2,x3,x4,y0,y1,y2,y3,y4, xt,yt: integer;
     alpha, beta, koef: real;
     ch: char;
 
     procedure pvo;
     var a,b,gd,gm: integer;
     x0,x1,x2,x3,x4,y0,y1,y2,y3,y4: integer;
     beta, koef: real;
     ch: char;
begin
 x0:= 300;
 y0:= 410;
 a:= 70;
 b:= 10;
 beta:= arctan(b/a);
 setcolor (12);
   x1:= x0;
   y1:= y0;
   x2:= x0+round(a*cos(alpha));
   y2:= y0-round(a*sin(alpha));
   x3:= x0+round(sqrt(sqr(a)+sqr(b))*cos(alpha-beta));
   y3:= y0-round(sqrt(sqr(a)+sqr(b))*sin(alpha-beta));
   x4:= x0+round(b*cos(alpha-pi/2));
   y4:= y0-round(b*sin(alpha-pi/2));
   line (x1, y1, x2, y2);
   line (x2, y2, x3, y3);
   line (x3, y3, x4, y4);
   line (x4, y4, x1, y1);
   end;
 
begin
initgraph(gd, gm,' ');
 setcolor(4);
     line(0,55,640,55);
     line(0,479,0,430);
     line(0,430,639,430);
     line(639,430,639,479);
     line(639,479,0,479);
     setfillstyle(11,1);
     floodfill(10,470,4);
 alpha:= 0;
 koef:= 1;
  pvo;
{repeat}
  xt:=getmaxx;
  ch:=#1;
  while  (ch<>#27) do begin
  if keypressed then
  begin
    SetViewPort(200, 300, 400, 420, ClipOn);
    ClearViewPort;
    SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn);
    ch:= readkey;
    if ch=#0 then ch:=readkey;
       {cleardevice;}
        case ch of
        #75: begin
              koef:= 1;
              alpha:= alpha+0.1;
              if abs(alpha)>=pi then alpha :=pi;
              delay(1);
             end;
        #77: begin
              koef:= -1;
              alpha:= alpha+koef*0.1;
              if alpha<=0 then alpha :=0;
              delay(1);
             end;
       end;
       PVO;
   end;
       {until ch=#27; }
{repeat}
setfillstyle(1,blue); bar(xt,yt+100,xt-100,yt+75);
setcolor(1);
circle(xt-100,yt+87,12);
floodfill(xt-101,yt+87,1);
line(xt,yt+100,xt+20,yt+70);
line(xt+20,yt+70,xt+3,yt+70);
line(xt+3,yt+70,xt-50,yt+100);
floodfill(xt+5,yt+90,1);
setcolor(red);
circle(xt-90,yt+87,7);
setfillstyle(1,red);
floodfill(xt-90,yt+87,red);
circle(xt-60,yt+87,7);
floodfill(xt-60,yt+87,red);
circle(xt-30,yt+87,7);
floodfill(xt-30,yt+87,red);
delay(7000);
setfillstyle(solidfill,black); bar(xt-115,yt+70,xt+20,yt+100);
xt:=xt-2;
if xt<=0 then xt:=getmaxx;
end;
{until ch=#27;}
readkey;
closegraph;
end.
Буду очень благодарен тому, кто подскажет, а лучше покажет, как сделать пушку боеспособной Стрелять она должна по нажатию пробела. Помогите, а то идей нету Надеюсь на помощь.
С уважением,
Kopova =)
Kopova вне форума Ответить с цитированием
Старый 19.11.2009, 11:29   #20
Kopova
Пользователь
 
Аватар для Kopova
 
Регистрация: 26.10.2009
Сообщений: 18
По умолчанию

Видимо, всем влом Тему можно закрывать...
С уважением,
Kopova =)
Kopova вне форума Ответить с цитированием
Ответ


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