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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2010, 21:07   #1
VladimirBravo
Новичок
Джуниор
 
Регистрация: 15.06.2010
Сообщений: 1
По умолчанию Pascal. Графика. Границы экрана

Здравствуйте господа! И присутствующие здесь дамы
Если есть у кого возможность подскажите как можно реализовать след. ситуацию.
Дана задача, прямоугольник летает по экрану отскакивая от границ экрана. G - стоп, H - продолжить. Esc - выход.

Все хорошо, кроме одного, не могу понять как сделать так, что бы прямоугольник отскакивал от границ экрана. Вроде бы задавал значения, если границы прямоугольника равны границам экрана то перенаправляю прямоугольник. Но никак не выходит, прямоугольник улетает за границы. Текст задачи ниже

Код:
program FlyKbadrat;
uses graph,crt;
var d,m,x,y,x1,y1,dx,dy:integer; c:char;
begin
 d:=9;
 m:=2;
 initgraph(d,m,'');
 x:=300;
 y:=200;
 x1:=450;
 y1:=150;
 dx:=1;
 dy:=1;
 SetBKcolor (red);
 setfillstyle(1,yellow);
 Bar(x,y,x1,y1);
  repeat
  c:=readkey;
  if c=#104 then
           repeat
             if(x+dx>630) and (x1+dx>630) then dx:=1;
             if (x+dx<10) and(x1+dx<10) then dx:=1;
             if (y+dy>470) and (y1+dy>470) then dy:=1;
             if (y+dy<10) and (y1+dy<10) then dy:=1;
             cleardevice;
          x:=x+dx;
          x1:=x1+dx;
          y:=y+dy;
          y1:=y1+dx;
          setfillstyle(1,yellow);
           Bar(x,y,x1,y1);
           delay(100);
           if keypressed then c:=readkey;
           until c=#103;
 until c=#27;
closegraph;
end.
VladimirBravo вне форума Ответить с цитированием
Старый 15.06.2010, 21:54   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а попробуйте такой код:
Код:
program FlyKbadrat;
uses graph, crt;
var d, m, x, y, dx, dy: integer;
  BarLength,
  BarHeight: integer;
  c: char;
  MaxX, MaxY: integer;
begin
  d := 9;
  m := 2;
  initgraph(d, m, '');
  x := 300;
  y := 150;
  BarLength := 150;
  BarHeight := 50;
  dx := 1;
  dy := 1;
  MaxX := GetMaxX;
  MaxY := GetMaxY;
  SetBKcolor(red);
  setfillstyle(1, yellow);
  Bar(x, y, x + BarLength, y + BarHeight);

  repeat
    c := readkey;
    if c = #104 then
      repeat
        if dx > 0 then
          begin if (x + BarLength + dx > MaxX) then dx := -1 end
        else
          begin if (x + dx < 1) then dx := 1 end;

        if dy > 0 then
          begin if (y + BarHeight + dy > MaxY) then dy := -1 end
        else
          begin if (y + dy < 1) then dy := 1 end;

        {cleardevice;}
        setfillstyle(1, Red);
        Bar(x, y, x + BarLength, y + BarHeight);
        x := x + dx;
        y := y + dy;
        setfillstyle(1, yellow);
        Bar(x, y, x + BarLength, y + BarHeight);
        delay(50);
        if keypressed then c := readkey;
      until (c = #103) or (c = #27);
  until c = #27;
  closegraph;
end.
p.s. Если не понравится, вместо рисования прямоугольника цветом фона, можете обратно расскомментировать свой cleardevice...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графика в PASCAL Deniska112 Помощь студентам 2 12.12.2009 17:21
pascal графика world12_tk Помощь студентам 1 25.04.2009 18:56
[Pascal] Графика Рамик Помощь студентам 5 15.04.2009 03:06