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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2010, 13:59   #1
hasana
Пользователь
 
Регистрация: 09.05.2010
Сообщений: 43
По умолчанию биллиардный шар...

Биллиардный шар”. Нарисуйте «биллиардный стол» – большой прямоугольник. Окружность под углом летает по столу, отскакивая от его краев по закону отражения. Попав “в лузу” (любой из четырех углов стола), оста-навливается.

помогите описать движение шара
hasana вне форума Ответить с цитированием
Старый 17.05.2010, 14:34   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

ну, что-то такое:
Код:
uses crt,graph;
var gd,gm:integer;
     dx,dy:integer;
     x1,y1,radius:integer;
begin
      gd:=detect;
      initgraph(gd,gm,' ');
      setcolor(green);
      rectangle(10,10,610,460);
      x1:=50;y1:=200;
      radius:=10;
      dx:=3;dy:=2;
      setcolor(yellow);
      circle(x1,y1,radius);
      repeat
              setcolor(0);
              circle(x1,y1,radius);
              if x1+10>610 then dx:=-dx;
              if x1-10<10 then dx:=-dx;
              if y1+10>470 then dy:=-dy;
              if y1-10<10 then dy:=-dy;
              x1:=x1+dx;y1:=y1+dy;
              setcolor(yellow);
              circle(x1,y1,radius);
              delay(10000);
     until (x1-10<=10) and (y1+10>=470) or
            (x1-10<=10) and (y1-10<=10) or
            (x1+10>=610) and (y1-10<=10) or
            (x1+10>=610) and (y1+10>=470);
     readln;
     closegraph;
end.

Последний раз редактировалось _-Re@l-_; 17.05.2010 в 19:17.
_-Re@l-_ вне форума Ответить с цитированием
Старый 17.05.2010, 19:25   #3
hasana
Пользователь
 
Регистрация: 09.05.2010
Сообщений: 43
По умолчанию

спасибо... учитывая твои советы получил следующее...
Код:
uses graph;
var sx,sy,x,y,device,mode:integer;
begin
device:=detect;
initgraph(device,mode,' ');
setfillstyle(1,green);
rectangle(20,20,620,460);
circle(32,32,10);
circle(608,32,10);
circle(32,448,10);
circle(608,448,10);
floodfill(320,249,white);
randomize;
x:=30+random(581);
y:=30+random(421);
sy:=1;
sx:=1;
repeat
setfillstyle(1,black);
setcolor(white);
circle(x,y,10);
floodfill(x,y,white);
setfillstyle(1,green);
setcolor(green);
circle(x,y,10);
floodfill(x,y,green);
x:=x+sx;
y:=y+sy;
if x<32 then  sx:=-sx;
if x>608 then sx:=-sx;
if y<32 then sy:=-sy;
if y>448 then sy:=-sy;
until (x=32)and(y=32) or (x=33)and(y=33) or
(x=608)and(y=32) or (x=607)and(y=33) or
(x=32)and(y=448) or (x=33)and(y=447) or
(x=608)and(y=448) or (x=607)and(y=447);
readln;
closegraph
end.
только вот проблема одна... бильярдные лузы закрашивачтся цветом мяча, когда тот пролетает мимо... можно с этим чё-нить сделать?
hasana вне форума Ответить с цитированием
Старый 18.05.2010, 11:45   #4
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

можно, например, при касании мяча о бильярдный стол делать так:
Код:
setcolor(color);
rectangle(10,10,610,470);
где color - цвет бильярдного стола
(то есть снова отрисовывается стол)
_-Re@l-_ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потестите мониторинг шар! vaginoid2 Софт 0 25.12.2009 21:48
Биллиардный шар Shevali Помощь студентам 4 15.04.2009 08:32