Показать сообщение отдельно
Старый 05.06.2012, 18:23   #1 (permalink)
Léon
С# - learn or die
 
Аватар для Léon
 
Регистрация: 17.12.2011
Сообщений: 2,438
Записей в дневнике: 8
Сказал(а) спасибо: 21
Поблагодарили 49 раз(а) в 11 сообщениях
Репутация: 19701
По умолчанию Использование библиотеки модуля GRAPH. Free Pascal

Помогите, пожалуйста! Как сделать, чтобы шар не заходил за границы? Я суть понимаю, а как сделать - нет.
Задание такое: Изобразить на экране движение шара по бильярду без луз (первоначальное перемещение получить случайным образом).
Код:
uses Graph, Crt;
var
 r,p:integer;
 dx,dy,cdx,cdy,x,y:real;
 dt:integer;

 grDriver:integer;
 grMode:integer;
 grPath:string;
 ErrCode:integer;

begin
 grDriver := VGA;
 grMode:=VGAHi;
 grPath:='c:\bp\bgi';

 InitGraph(grDriver, grMode,grPath);
 ErrCode := GraphResult;
 if ErrCode <> grOk then
   begin
     writeln('Ошибка инициализации графического режима');
     writeln('Для завершения работы нажмите <Enter>');
     readln;
     Halt;
  end;
 randomize;
 x:=105+random(400);
 y:=115+random(200);
 r:=10;
 dx:=random(100)-50.5; cdx:=abs(dx)*0.01;
 dy:=random(100)-50.5; cdy:=abs(dy)*0.01;
 dt:=1650;
 Setfillstyle(1,2);
 bar(80,90,560,390);
repeat
        Setfillstyle(1,0);bar(1,1,560,109);
        Setfillstyle(1,0);bar(1,371,580,460);
        Setfillstyle(1,0);bar(1,1,109,390);
        Setfillstyle(1,0);bar(541,1,620,390);
        x:=x+dx;y:=y+dy;
        if (x>535)or(x<105) then dx:=-dx;
        if (y>365)or(y<115) then dy:=-dy;
       SetColor(0);
       circle(round(x),round(y),r);
       Delay(1900);
       SetColor(2);
       Circle(round(x),round(y),r);
       dx:=dx-dx/abs(dx)*cdx;
       dy:=dy-dy/abs(dy)*cdy;
until (keypressed)or(abs(dx)<=0.1)or(abs(dy)<=0.1);
SetColor(0);
Circle(round(x),round(y),r);
delay(50000);
CloseGraph;
end.
Léon вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070