The program is as follows:
#include<stdio.h>
#include<graphics.h>
#include<math.h>
int fill=0,inlen=15,dir=1;
void drawMan(int x,int y)
{
static int q=1;
setcolor(YELLOW);
setfillstyle(EMPTY_FILL,BLACK);
fillellipse(x+100,y-50,10,10);
line(x+100,y-40,x+100,y+20);
line(x+100,y+20,x+85,y+60);
line(x+100,y+20,x+115,y+60);
//arms
if(q%2)
{
line(x+100,y-20,x+80,y-30);
line(x+100,y-25,x+85,y-20);
}
else
{
line(x+100,y-20,x+80,y-20);
line(x+100,y-25,x+85,y-30);
}
q++;
}
void drawBucket(int x, int y,int fill)
{
setcolor(RED);
line(x-10,y,x+10,y);
line(x-10,y,x-7,y+15);
line(x-7,y+15,x+7,y+15);
line(x+7,y+15,x+10,y);
if(fill==0)
setfillstyle(EMPTY_FILL,BLACK);
else if(fill==1)
setfillstyle(SOLID_FILL,3);
fillellipse(x,y,10,3);
}
void drawWell(int x,int y,int deg)
{
int ww=70,wh=20,yt,tx,ty,ropelen=200;
float rad1,rad2,cos45;
int i,t;
setcolor(BROWN);
cos45=cos(45*3.14f/180);
//lines
line(x-ww,y+2*wh,x-ww,y-120);
line(x-ww+15,y+2*wh,x-ww+15,y-120);
line(x+ww,y+2*wh,x+ww,y-120);
line(x+ww-15,y+2*wh,x+ww-15,y-120);
line(x-ww,y-120,x+ww,y-120);
line(x-ww,y-110,x+ww,y-110);
line(x,y-115,x,y-100);
//kappi
setfillstyle(SOLID_FILL,LIGHTGRAY);
fillellipse(x,y-95,10,10);
setfillstyle(SOLID_FILL,BLACK);
fillellipse(x,y-95,2,2);
rad1=deg*3.14f/180;
rad2=(deg+90)*3.14f/180;
yt=y-95;
setcolor(RED);
//rotation of pulley
line(x,yt,x+10*sin(rad1),yt+10*cos(rad1));
line(x,yt,x+10*sin(rad2),yt+10*cos(rad2));
line(x,yt,x-10*sin(rad1),yt-10*cos(rad1));
line(x,yt,x-10*sin(rad2),yt-10*cos(rad2));
//ropeover well
line(x-10,yt,x-10,yt+inlen);
//rope in hands
t=(ropelen-inlen)*cos45;
line(x+10,yt,x+10+t,yt+t);
//draw bucket if not inside well
if(!(yt+inlen+15>=y+wh-60))
drawBucket(x-10,yt+inlen,fill);
inlen=inlen+dir*3;
//ellipses
setcolor(BROWN);
setfillstyle(SOLID_FILL,DARKGRAY);
for(i=0;i<=60;i+=15)
fillellipse(x,y+2*wh-i,ww,wh);
setfillstyle(SOLID_FILL,3);
fillellipse(x,y+2*wh-60,ww-15,wh-8);
if(yt+inlen+15>=y+wh-60&&yt+inlen+7<y+2*wh-60)
drawBucket(x-10,yt+inlen,fill);
if(yt+inlen+7>=y+3*wh-60)
{
dir*=-1;
fill=1;
}
}
void main()
{
int gd=DETECT,gm,x,y,deg=30;
initgraph(&gd,&gm,"..\\BGI");
x=getmaxx()/2;
y=getmaxy()/2+40;
while(!kbhit())
{
drawWell(x,y,deg);
drawMan(x,y);
deg=deg+dir*25;
delay(350);
cleardevice();
}
getch();
}
No comments:
Post a Comment