Помощь - Поиск - Пользователи - Календарь
Полная версия: Объекты. Движение.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Анна
 uses crt, graph;

type

   TBall = object

     public

     procedure Show(posX, posY, radius, color, q1, w1, e1, t1, clr : word);
     procedure Hide;

     public

     x, y, r, c : word;
     q, w, e, t, m : word;

   end;


procedure TBall.Show(posX, posY, radius, color, q1, w1, e1, t1, clr : word);
begin
   x := posX;
   y := posY;
   r := radius;
   c := color;
   q := q1;
   w := w1;
   e := e1;
   t := t1;
   m := clr;

   SetColor (m);
   Rectangle (q,w,e,t);
   SetColor(c);
   Circle(x, y, r);
end;

procedure TBall.Hide;
begin
   SetColor(black);
   Circle(x, y, r);
   SetColor(black);
   Rectangle (q,w,e,t);

end;

var
   gd, gm : integer;
   key: char;
   dx0, dx1,dx2: integer;

   ball, ball1 : TBall;
begin
   clrscr;
   gd := detect;
   InitGraph(gd, gm, '');

   ball.Show(150,150,40, White, 100,100,200,200, white);;
   readln;
   ball.Hide;

   readln;
   ball.Show(180,180,30, RED, 140,140,220,220, GREEN);;
{   readln;
   ball.Hide;}

    dx0 := 150;
    dx1 := 100;
    dx2 := 200;

    repeat
    key := readkey;
    case key of

     'w' : begin
           ball.hide;
           dx0:= dx0+10; dx1:=dx1+10; dx2:=dx2+10;
           ball.show (dx0,150, 40, white, dx1,100,dx2,200,white);
           readln;
           end;

     'e' : begin
           ball.hide;
           ball.Show(182,180,30, RED, 142,140,222,220, GREEN);
           readln;
           end;

     end;

 until  key <> 'q';

end.


Не могу сообразить как сделать движение вот в этом куске

case key of

     'w' : begin
           ball.hide;
           dx0:= dx0+10; dx1:=dx1+10; dx2:=dx2+10;
           ball.show (dx0,150, 40, white, dx1,100,dx2,200,white);
           readln;
           end;


При нажатии клавиши "w" квадрат с кругом внутри должен перемещаться по оси X
volvo
Цитата(Анна @ 10.04.2006 17:50)

Не могу сообразить как сделать движение вот в этом куске
case key of
     'w' : begin
           ball.hide;
           dx0:= dx0+10; dx1:=dx1+10; dx2:=dx2+10;
           ball.show (dx0,150, 40, white, dx1,100,dx2,200,white);
           readln;
           end;


При нажатии клавиши "w" квадрат с кругом внутри должен перемещаться по оси X

blink.gif Не понял... Все же перемещается. Только:
repeat
  key := readkey;
  case key of

  'w' : begin
    ball.hide;
    dx0:= dx0+10; dx1:=dx1+10; dx2:=dx2+10;
    ball.show (dx0,150, 40, white, dx1,100,dx2,200,white);
    { readln; } { <--- Убрать }
  end;

  'e' : begin
    ball.hide;
    ball.Show(182,180,30, RED, 142,140,222,220, GREEN);
    readln;
  end;
  end;
until  key = 'q'; { <--- Чувствуешь разницу ? У Until условие обратное !!! }
Анна
Сдала сегодня программу ... вот исходник, может кому пригодится ...

 {$R+}
uses crt, graph;

type

   TBall = object

     public

     procedure Show(posX, posY, radius, color, q1, w1, e1, t1, clr : word);
     procedure Hide;

     public

     x, y, r, c : word;
     q, w, e, t, m : word;

   end;


procedure TBall.Show(posX, posY, radius, color, q1, w1, e1, t1, clr : word);
begin
   x := posX;
   y := posY;
   r := radius;
   c := color;
   q := q1;
   w := w1;
   e := e1;
   t := t1;
   m := clr;

   SetColor (m);
   Rectangle (q,w,e,t);
   SetColor(c);
   Circle(x, y, r);
end;

procedure TBall.Hide;
begin
   SetColor(black);
   Circle(x, y, r);
   SetColor(black);
   Rectangle (q,w,e,t);

end;

var
   gd, gm : integer;
   key: char;
   dx0, dx1, dx2, dx00, dx11, dx22 : integer;

   ball, ball1 : TBall;
begin
   clrscr;
   gd := detect;
   InitGraph(gd, gm, '');

   ball.Show(150,150,40, White, 100,100,200,200, white);;
   readln;
   ball.Hide;

   readln;
   ball.Show(180,180,30, RED, 140,140,220,220, GREEN);
   readln;
   ball.Hide;

    dx0 := 150; dx1 := 100; dx2 := 200;
    dx00 := 180; dx11 := 140; dx22 := 220;

    repeat
    key := readkey;
    case key of

     'w' : begin
           ball.hide;
           dx0:= dx0+1; dx1:=dx1+1; dx2:=dx2+1;
           ball.show (dx0,150, 40, white, dx1,100,dx2,200,white);
           end;

     'e' : begin
           ball.hide;
           dx0:= dx0-1; dx1:=dx1-1; dx2:=dx2-1;
           ball.show (dx0,150, 40, white, dx1,100,dx2,200,white);
           end;

     's' : begin
           ball.hide;
           dx00:= dx00+1; dx11:=dx11+1; dx22:=dx22+1;
           ball.Show(dx00,180,30, RED, dx11,140,dx22,220, GREEN);
           end;

     'd' : begin
           ball.hide;
           dx00:= dx00-1; dx11:=dx11-1; dx22:=dx22-1;
           ball.Show(dx00,180,30, RED, dx11,140,dx22,220, GREEN);
           end;
     end;

 until  key = #27;

end.



ps Небольшой вопрос: как забиндить движение объекта на стрелки (т.е. использовать стрелки вместо w,e,s,d) ?
Какой код у них? blink.gif
arhimag
lКоды: #0 и
лево: #75
право: #77
вверх: #72
вниз:#80
klem4
arhimag, а если бы тебе так объяснили ты бы понял ? Я нет.

Анна,
ch := readkey;
case ch of
 #0 : begin
    ch := readkey;
    case ch of
      #75:; // left
      #77:; // right
      #72:; // up
      #80:; // down
    end;
  end;
end;

зы а вообще поиск рулит yes2.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.