📄 台球.txt
字号:
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<math.h>
#include<bios.h>
#include<process.h>
#include<ctype.h>
#include<conio.h>
#include<dos.h>
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77
#define HOME 71
#define END 79
#define PAGEUP 73
#define PAGEDOWN 81
void Menu(void);
void Left(int *a,int *b,int *m,int *n);
void Right(int *a,int *b,int *m,int *n);
void Up(int *a,int *b,int *m,int *n);
void Down(int *a,int *b,int *m,int *n);
void Home(int *a,int *b,int *m,int *n);
void End(int *a,int *b,int *m,int *n);
void PageUp(int *a,int *b,int *m,int *n);
void PageDown(int *a,int *b,int *m,int *n);
int Meet(int *a,int *b,int *m,int *n);
int Got(int *a,int *b,int *m,int *n);
union k
{
char c[2];
int i;
};
typedef union k KEY;
KEY key;
struct dot
{
int x;
int y;
};
typedef struct dot DOT;
DOT ball1,ball2;
main()
{
int driver,mode;
int *x,*y,*a,*b;
detectgraph(&driver,&mode);
initgraph(&driver,&mode,"c:\\tc");
setbkcolor(GREEN);
cleardevice();
Menu();
ball1.x=200;
ball1.y=200;
ball2.x=300;
ball2.y=300;
x=&ball1.x;
y=&ball1.y;
a=&ball2.x;
b=&ball2.y;
setcolor(RED);
circle(ball1.x,ball1.y,10);
setfillstyle(CLOSE_DOT_FILL,RED);
floodfill(ball1.x,ball1.y,RED);
circle(ball2.x,ball2.y,10);
setfillstyle(CLOSE_DOT_FILL,RED);
floodfill(ball2.x,ball2.y,RED);
circle(165,460,10);
circle(165,15,10);
circle(625,15,10);
circle(625,460,10);
while(key.c[0]!='q')
{
Menu();
key.i=bioskey(0);
switch(key.c[1])
{
case LEFT:Left(x,y,a,b);
break;
case RIGHT:Right(x,y,a,b);
break;
case UP:Up(x,y,a,b);
break;
case DOWN:Down(x,y,a,b);
break;
case HOME:Home(x,y,a,b);
break;
case PAGEUP:PageUp(x,y,a,b);
break;
case PAGEDOWN:PageDown(x,y,a,b);
break;
case END:End(x,y,a,b);
break;
case 'a':
break;
}
}
}
void Menu(void)
{
#define STARTX 10
#define STARTY 22
#define DISTANCE 30
int i;
char *menu_name[]={"a:start game",
"q:quit game",
" Up",
"LEFT DOWN RIGHT",
"Home PageUp",
"End PageDown"};
setcolor(WHITE);
rectangle(5,5,150,470);
rectangle(155,5,635,470);
setcolor(LIGHTBLUE);
settextstyle(TRIPLEX_FONT,HORIZ_DIR,2);
for(i=0;i<5;i++)
{
outtextxy(STARTX,STARTY+(i+1)*DISTANCE,menu_name[i]);
}
}
void Left(int *a,int *b,int *m,int *n)
{
int i,size,h,j;
void *buf;
h=Got(a,b,m,n);
if(h)
{
size=imagesize(*a-10,*b-10,*a+10,*b+10);
if(size!=-1)
buf=(void *)malloc(size);
if(buf)
{
j=Meet(a,b,m,n);
for(i=0;i<50;i++)
{
getimage(*a-10,*b-10,*a+10,*b+10,buf);
if(j)
{
if(*a>165)
{
*a=*a-1;
putimage(*a-10,*b-10,buf,COPY_PUT);
}
else
{
do{
*a=*a+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
i++;
}while(i<50);
}
}
else
{
do{
*a=*a+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
if(*a>625)
break;
i++;
}while(i<50);
}
}/*if(buf)end*/
}
}
}
void Right(int *a,int *b,int *m,int *n)
{
int i,size,h,j;
void *buf;
h=Got(a,b,m,n);
if(h)
{
j=Meet(a,b,m,n);
for(i=0;i<50;i++)
{
size=imagesize(*a-10,*b-10,*a+10,*b+10);
if(size!=-1)
buf=(void *)malloc(size);
if(buf)
{
getimage(*a-10,*b-10,*a+10,*b+10,buf);
if(j)
{
if(*a<625)
{
*a=*a+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
}
else
{
do{
*a=*a-1;
putimage(*a-10,*b-10,buf,COPY_PUT);
i++;
}while(i<50);
}
}
else
{
do{
*a=*a-1;
putimage(*a-10,*b-10,buf,COPY_PUT);
if(*a<165)
break;
i++;
}while(i<50);
}
}/*if(buf)end*/
}
}
}
void Up(int *a,int *b,int *m,int *n)
{
int i,size,h,j;
void *buf;
h=Got(a,b,m,n);
if(h)
{
j=Meet(a,b,m,n);
for(i=0;i<50;i++)
{
size=imagesize(*a-10,*b-10,*a+10,*b+10);
if(size!=-1)
buf=(void *)malloc(size);
if(buf)
{
getimage(*a-10,*b-10,*a+10,*b+10,buf);
if(j)
{
if(*b>15)
{
*b=*b-1;
putimage(*a-10,*b-10,buf,COPY_PUT);
}
else
{
do{
*b=*b+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
i++;
}while(i<50);
}
}
else
{
do{
*b=*b+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
if(*b>460)
break;
i++;
}while(i<50);
}
}/*if(buf)end*/
}
}
}
void Down(int *a,int *b,int *m,int *n)
{
int i,size,h,j;
void *buf;
h=Got(a,b,m,n);
if(h)
{
j=Meet(a,b,m,n);
for(i=0;i<50;i++)
{
size=imagesize(*a-10,*b-10,*a+10,*b+10);
if(size!=-1)
buf=(void *)malloc(size);
if(buf)
{
getimage(*a-10,*b-10,*a+10,*b+10,buf);
if(j)
{
if(*b<470)
{
*b=*b+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
}
else
{
do{
*b=*b-1;
putimage(*a-10,*b-10,buf,COPY_PUT);
i++;
}while(i<50);
}
}
else
{
do{
*b=*b-1;
putimage(*a-10,*b-10,buf,COPY_PUT);
if(*b<15)
break;
i++;
}while(i<50);
}
}/*if(buf)end*/
}
}
}
void Home(int *a,int *b,int *m,int *n)
{
int i,h,size,j;
void *buf;
h=Got(a,b,m,n);
if(h)
{
j=Meet(a,b,m,n);
for(i=0;i<50;i++)
{
size=imagesize(*a-10,*b-10,*a+10,*b+10);
if(size!=-1)
buf=(void *)malloc(size);
if(buf)
{
getimage(*a-10,*b-10,*a+10,*b+10,buf);
if(j)
{
if((*a<625)&&(*a>165)&&(*b<460)&&(*b>15))
{
*a=*a-1;
*b=*b-1;
putimage(*a-10,*b-10,buf,COPY_PUT);
}
if(((*a<165)||(*a==165))&&(*b<640)&&(*b>15))
{
*a=*a+1;
*b=*b-1;
putimage(*a-10,*b-10,buf,COPY_PUT);
if((*b<15)||(*b==15))
{
do
{
*a=*a+1;
*b=*b+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
i++;
}while(i<50);
}
}
if(((*b<15)||(*b==15))&&(*a<625)&&(*a>165))
{
*a=*a-1;
*b=*b+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
if((*a<165)||(*a==165))
{
do
{
*a=*a+1;
*b=*b+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
i++;
}while(i<50);
}
}
}
}
}
}
}
void End(int *a,int *b,int *m,int *n)
{
int i,h,j,size;
void *buf;
h=Got(a,b,m,n);
if(h)
{
j=Meet(a,b,m,n);
for(i=0;i<50;i++)
{
size=imagesize(*a-10,*b-10,*a+10,*b+10);
if(size!=-1)
buf=(void *)malloc(size);
if(buf)
{
getimage(*a-10,*b-10,*a+10,*b+10,buf);
if(j)
{
if((*a<625)&&(*a>165)&&(*b<460)&&(*b>15))
{
*a=*a-1;
*b=*b+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
}
if(((*b>460)||(*b==460))&&(*a>165)&&(*a<625))
{
*a=*a-1;
*b=*b-1;
putimage(*a-10,*b-10,buf,COPY_PUT);
if((*a<165)||(*a==165))
{
do
{
*a=*a+1;
*b=*b-1;
putimage(*a-10,*b-10,buf,COPY_PUT);
i++;
}while(i<50);
}
}
if(((*a<165)||(*a==165))&&(*b<460)&&(*b>15))
{
*a=*a+1;
*b=*b+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
if((*b>460)||(*b==460))
{
do
{
*a=*a+1;
*b=*b-1;
putimage(*a-10,*b-10,buf,COPY_PUT);
i++;
}while(i<50);
}
}
}
}
}
}
}
void PageUp(int *a,int *b,int *m,int *n)
{
int i,h,size,j;
void *buf;
h=Got(a,b,m,n);
if(h)
{
j=Meet(a,b,m,n);
for(i=0;i<50;i++)
{
size=imagesize(*a-10,*b-10,*a+10,*b+10);
if(size!=-1)
buf=(void *)malloc(size);
if(buf)
{
getimage(*a-10,*b-10,*a+10,*b+10,buf);
if(j)
{
if((*a<625)&&(*a>165)&&(*b<460)&&(*b>15))
{
*a=*a+1;
*b=*b-1;
putimage(*a-10,*b-10,buf,COPY_PUT);
}
if(((*b<15)||(*b==15))&&(*a<625)&&(*a>165))
{
*a=*a+1;
*b=*b+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
if((*a>625)||(*a==625))
{
do
{
*a=*a-1;
*b=*b+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
i++;
}while(i<50);
}
}
if(((*a>625)||(*a==625))&&(*b<460)&&(*b>15))
{
*a=*a-1;
*b=*b-1;
putimage(*a-10,*b-10,buf,COPY_PUT);
if((*b<15)||(*b==15))
{
do
{
*a=*a-1;
*b=*b+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
i++;
}while(i<50);
}
}
}
}
}
}
}
void PageDown(int *a,int *b,int *m,int *n)
{
int i,h,j,size;
void *buf;
h=Got(a,b,m,n);
if(h)
{
j=Meet(a,b,m,n);
for(i=0;i<50;i++)
{
size=imagesize(*a-10,*b-10,*a+10,*b+10);
if(size!=-1)
buf=(void *)malloc(size);
if(buf)
{
getimage(*a-10,*b-10,*a+10,*b+10,buf);
if(j)
{
if((*a<625)&&(*a>165)&&(*b<460)&&(*b>15))
{
*a=*a+1;
*b=*b+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
}
if((*b>460)||(*b==460)&&(*a<625)&&(*a>165))
{
*a=*a+1;
*b=*b-1;
putimage(*a-10,*b-10,buf,COPY_PUT);
if((*a>625)||(*a==625))
{
do
{
*a=*a-1;
*b=*b-1;
putimage(*a-10,*b-10,buf,COPY_PUT);
i++;
}while(i<50);
}
}
if(((*a>625)||(*a==625))&&(*b<460)&&(*b>15))
{
*a=*a-1;
*b=*b+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
if((*b>460)||(*b==460))
{
do
{
*a=*a-1;
*b=*b+1;
putimage(*a-10,*b-10,buf,COPY_PUT);
i++;
}while(i<50);
}
}
}
}
}
}
}
int Meet(int *a,int *b,int *m,int *n)
{
if(sqrt((*a-*m)*(*a-*m)+(*b-*n)*(*b-*n))<20||
sqrt((*a-*m)*(*a-*m)+(*b-*n)*(*b-*n))==20)
return 0;
else
return 1;
}
int Got(int *a,int *b,int *m,int *n)
{
if(((fabs(*a-165))<10e-6)&&(fabs(*b-460)<10e-6))
{
printf("Succeed!\n");
exit(0);
}
if(((fabs(*a-165))<10e-6)&&(fabs(*b-15)<10e-6))
{
printf("Succeed!\n");
exit(0);
}
if(((fabs(*a-625))<10e-6)&&(fabs(*b-15)<10e-6))
{
printf("Succeed!\n");
exit(0);
}
if(((fabs(*a-625))<10e-6)&&(fabs(*b-460)<10e-6))
{
printf("Succeed!\n");
exit(0);
}
if(((fabs(*m-165))<10e-6)&&(fabs(*n-460)<10e-6))
{
printf("Succeed!\n");
exit(0);
}
if(((fabs(*m-165))<10e-6)&&(fabs(*n-15)<10e-6))
{
printf("Succeed!\n");
exit(0);
}
if(((fabs(*m-625))<10e-6)&&(fabs(*n-15)<10e-6))
{
printf("Succeed!\n");
exit(0);
}
if(((fabs(*m-625))<10e-6)&&(fabs(*n-460)<10e-6))
{
printf("Succeed!\n");
exit(0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -