C_Kurs_Lekt / C_III_семестр / 17-3_примеры_графики
.pdf
#include<conio.h>
#include<graphics.h>
#include<stdio.h>
#include<stdlib.h>
#include<dos.h>
#include<bios.h>
main(){
int i, maxX, maxY, eX0, eX1, eY0, eY1, eX, eY, c=2; int cord[4]; /* координаты x0,x1,y0,y1 отрезка */
int dX[4]={0,0,0,0}; /* скорости каждой из координат x0,x1,y0,y1 отрезка */ int gdriver=DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, ""); /*переходим в графический режим */ errorcode = graphresult();
if (errorcode != grOk) |
|
|
|
|
{ |
/* и проверяем на ошибки |
*/ |
||
printf("Graphics error: %s\n", grapherrormsg(errorcode)); |
||||
printf("Press any key to halt:"); |
|
|||
getch(); |
|
|
|
|
exit(1); |
|
|
|
|
} |
|
|
|
|
randomize(); |
|
|
|
|
maxX=getmaxx(); |
maxY=getmaxy(); /* определяем разрешение экрана */ |
|||
eX0=maxX*0.05; |
eY0=maxY*0.05; |
/* координаты прямоугольника-рамки */ |
||
eX1=maxX-eX0; |
eY1=maxY-eY0; |
|
/* внутри которого будет "бегать" линия */ |
|
eX=eX1-eX0; eY=eY1-eY0; |
/* и размеры прямоугольника */ |
|||
cord[0]=eX0+random(eX); cord[1]=eX0+random(eX); /* определяем размеры линии */ |
||||
cord[2]=eY0+random(eY); cord[3] |
=eY0+random(eY); /* точнее - координаты |
|||
концов */ for(i=0;i<4;i++)
while (!dX[i]) dX[i]=random(3)-1; setcolor(1); rectangle(eX0,eY0,eX1,eY1); setcolor(c); line(cord[0],cord[2],cord[1],cord[3]); getch();
do {
setcolor(0);
line(cord[0],cord[2],cord[1],cord[3]);
setcolor(c);
for(i=0;i<4;i++) cord[i]+=dX[i]; line(cord[0],cord[2],cord[1],cord[3]); setcolor(1); rectangle(eX0,eY0,eX1,eY1);
for(i=0; i<2; i++)
if (cord[i] < eX0+1 || cord[i] > eX1-1 ) { dX[i] *= -1;
if(c<15) c++; else c=2;
}
for(i=2; i<4; i++)
if (cord[i] < eY0+1 || cord[i] > eY1-1 ) { dX[i] *= -1;
if(c<15) c++; else c=2;
}
delay(10);
}
while( !bioskey(1) ); closegraph();
return 0;
}
