?? noname.c
字號:
#define HEIGHT (maxy-150)
#define STARTX 10
#define STARTY 120
#define ABIASX 10
#define ABIASY 10
#define RADIUS 8
#define VX 20
#define WIDTH 70
#define STEP 5
#define G 9.8
#define F 1.8
#include "graphics.h"
#include "math.h"
main()
{
int i,j,maxx,maxy,flag=1;
int poly[]={STARTX-ABIASX,STARTY+RADIUS+ABIASY,STARTX+ABIASX,STARTY+RADIUS+ABIASY,STARTX+WIDTH+ABIASX,STARTY+RADIUS-ABIASY,STARTX+WIDTH-ABIASX,STARTY+RADIUS +ABIASY,STARTX-ABIASX,STARTY+RADIUS+ABIASY};
float x=STARTX,y=STARTY;
float x0=STARTX+WIDTH,y0=0;
float vy=0,g=G-F;
float distancex,distancey;
int graphdriver=VGA;
int graphmode=1;
registerbgidriver(EGAVGA_driver);
initgraph(&graphdriver,&graphmode,"");
maxx=getmaxx();
maxy=getmaxy();
cleardevice();
do
{
setvisualpage(0);
delay(2500);
setactivepage(1);
cleardevice();
setbkcolor(LIGHTGRAY);
setcolor(DARKGRAY);
setfillstyle(1,BROWN);
fillpoly(5,poly);
floodfill((poly[0]+poly[4])/2,(poly[1]+poly[5])/2,DARKGRAY);
line(STARTX+WIDTH,STARTY+RADIUS,STARTX+WIDTH,STARTY+RADIUS+HEIGHT);
setlinestyle(DOTTED_LINE,0,NORM_WIDTH);
line(STARTX,STARTY+RADIUS,STARTX+WIDTH,STARTY+RADIUS);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
line(0,STARTY+RADIUS+HEIGHT,maxx,STARTY+RADIUS+HEIGHT);
setcolor(LIGHTMAGENTA);
setfillstyle(1,LIGHTRED);
setlinestyle(SOLID_LINE,0,NORM_WIDTH);
circle(x,y,RADIUS);
floodfill(x,y,LIGHTMAGENTA);
x=x+STEP;
if(x>maxx)
{
x=STARTX;
y=STARTY;
x0=STARTX+WIDTH;
y0=0;
g=G-F;
flag=1;
}
else if(x>STARTX+WIDTH)
if(x-STARTX-WIDTH<STEP)
x=STARTX+WIDTH;
else
if(flag==1)
{
distancex=x-x0;
distancey=pow(distancex/VX,2)*g/2;
y=y0+STARTY+distancey;
if(distancey>HEIGHT-y0)
{
flag=0;
distancey=HEIGHT-y0;
distancex=sqrt(2*distancey/g)*VX;
x=x0=x0+distancex;
y=distancey+y0+STARTY;
vy=g*distancex/VX;
g=G+F;
}
}
else
{
distancex=x-x0;
distancey=vy*distancex/VX-pow(distancex/VX,2)*g/2;
y=STARTY+HEIGHT-distancey;
if(vy<g*distancex/VX)
{
flag=1;
distancex=vy*VX/g;
distancey=pow(vy,2)/2/g;
x=x0=x0+distancex;
y0=HEIGHT-distancey;
y=STARTY+y0;
g=G-F;
}
}
setvisualpage(1);
delay(2500);
setactivepage(0);
cleardevice();
setbkcolor(LIGHTGRAY);
setcolor(DARKGRAY);
setfillstyle(1,BROWN);
fillpoly(5,poly);
floodfill((poly[0]+poly[4])/2,(poly[1]+poly[5])/2,DARKGRAY);
line(STARTX+WIDTH,STARTY+RADIUS,STARTX+WIDTH,STARTY+RADIUS+HEIGHT);
setlinestyle(DOTTED_LINE,0,NORM_WIDTH);
line(STARTX,STARTY+RADIUS,STARTX+WIDTH,STARTY+RADIUS);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
line(0,STARTY+RADIUS+HEIGHT,maxx,STARTY+RADIUS+HEIGHT);
setcolor(LIGHTMAGENTA);
setfillstyle(1,LIGHTRED);
setlinestyle(SOLID_LINE,0,NORM_WIDTH);
circle(x,y,RADIUS);
floodfill(x,y,LIGHTMAGENTA);
x=x+VX;
if(x>maxx)
{
x=STARTX;
y=STARTY;
x0=STARTX+WIDTH;
y0=0;
g=G-F;
flag=1;
}
else if(x>STARTX+WIDTH)
{ if(flag==1)
{
distancex=x-x0;
distancey=pow(distancex/VX,2)*g/2;
y=y0+STARTY+distancey;
if(distancey>HEIGHT-y0)
{
flag=0;
distancey=HEIGHT-y0;
distancex=sqrt(2*distancey/g)*VX;
x=x0=x0+distancex;
y=distancey+y0+STARTY;
vy=g*distancex/VX;
g=G+F;
}
}
else
{
distancex=x-x0;
distancey=vy*distancex/VX-pow(distancex/VX,2)*g/2;
y=STARTY+HEIGHT-distancey;
if(vy<g*distancex/VX)
{
flag=1;
distancex=vy*VX/g;
distancey=pow(vy,2)/2/g;
x=x0=x0+distancex;
y0=HEIGHT-distancey;
y=STARTY+y0;
g=G-F;
}
}
}
}while(!kbhit());
getch();
closegraph();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -