Экономичный вид памяти
Регистрация: 19.02.2008
Сообщений: 2,632
Сказал(а) спасибо: 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
|