Показать сообщение отдельно
Старый 27.12.2009, 20:02   #1 (permalink)
Dram
Экономичный вид памяти
 
Аватар для Dram
 
Регистрация: 19.02.2008
Сообщений: 2,632
Записей в дневнике: 1
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2794
По умолчанию Pascal графика тип движения

Подскажите как в паскале реализуется движение обьектов? Нужно сделать Движение в случайном направлении. Смена направления движения производится через случайное количество тактов. Предусмотреть отражение от границ экрана.
Через что его можно выразить?

Вот собственно моя работа только здесь скопипастенное движение по диагонали.
Код:
Uses Crt,Graph;
Const FigureHight=55;
      FigureWidth=35;
      FigureColor=red;
      FigureBackground=blue;
      MenuText:array[1..3]of string = ('Svobodni','Upravlenie','Exit');
var select,i,gd,gm:integer;
    konez:boolean;
    ch:char;
procedure Gagarin(x,y,color,background:integer);
begin
 setcolor(color);
      line(x, y, x+40, y+25);
      line(x, y, x+20, y+25);
      line(x+20, y+25, x+100, y+25);
      line(x+20, y+55, x+100, y+55);
      line(x+20, y+25, x+20, y+55);
      line(x+100, y+55, x+130, y+40);
      line(x+100, y+25, x+130, y+40);
      line(x+20, y+55, x, y+80);
      line(x, y+80, x+40, y+55);
      circle(x+90, y+40, 10);
      circle(x+70, y+40, 10);
      circle(x+50, y+40, 10);
end;
procedure Upravlenie;
var x,y,ckorost:integer;
begin
 x:=getmaxx div 2;
 y:=getmaxy div 2;
 ckorost:=1;
 repeat
  Gagarin(x,y,FigureColor,FigureBackground);
  ch:=readkey;
  Gagarin(x,y,black,black);
  case ch of
   #72:if (y-ckorost)>10   then dec(y,ckorost);
   #80:if (y+ckorost+FigureWidth)<480 then inc(y,ckorost);
   #75:if (x-ckorost)>10   then dec(x,ckorost);
   #77:if (x+ckorost+FigureHight)<640 then inc(x,ckorost);
   '+':if ckorost<60 then inc(ckorost);
   '-':if ckorost>0  then dec(ckorost);
  end;
 until (ch=#27)or(ch=#13);
end;
procedure Svobodnoe;
const maxx=640-FigureWidth; minx=5;
      maxy=480-FigureHight; miny=5;
var x1,y1:integer;
    x,y,vx,vy:real;
begin
 x:=minx; y:=miny; x1:=minx; y1:=miny;
 repeat
  Gagarin(trunc(x),trunc(y),black,black);
  if(trunc(x)<=minx)and(trunc(y)<=miny)then begin x1:=maxx; y1:=miny; vx:=trunc((x1-x)/100); vy:=trunc((y1-y)/100); end;
  if(trunc(x)>=maxx)and(trunc(y)<=miny)then begin x1:=minx; y1:=maxy; vx:=trunc((x1-x)/100); vy:=trunc((y1-y)/100); end;
  if(trunc(x)<=minx)and(trunc(y)>=maxy)then begin x1:=maxx; y1:=maxy; vx:=trunc((x1-x)/100); vy:=trunc((y1-y)/100); end;
  if(trunc(x)>=maxx)and(trunc(y)>=maxy)then begin x1:=minx; y1:=miny; vx:=trunc((x1-x)/100); vy:=trunc((y1-y)/100); end;
  x:=x+vx; y:=y+vy;
  Gagarin(trunc(x),trunc(y),FigureColor, FigureBackground);
  delay(2000);
 until keypressed; readkey;
end;
Begin
 gd:=detect;
 initgraph(gd,gm,'');
 randomize;
 konez:=false;
 repeat
  cleardevice; select:=1;
  repeat
   for i:=1 to 3 do begin
    if i=select then setcolor(Red) else setcolor(green);
    outtextxy((getmaxx div 2)-50,(getmaxy div 2)-50+i*16,MenuText[i]);
   end;
   ch:=readkey;
   case ch of
    #72:dec(select);
    #80:inc(select);
   end;
   if select<1 then select:=3;
   if select>3 then select:=1;
   if ch=#27 then begin
    select:=3;
    ch:=#13;
   end;
  until (ch=#13);
  cleardevice;
  case select of
   1:Svobodnoe;
   2:Upravlenie;
   3:konez:=true;
  end;
 until konez;
 closegraph;
End.

Последний раз редактировалось Dram; 27.12.2009 в 20:48
Dram вне форума   Ответить с цитированием
Ads

Яндекс

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