qp.c

来自「这是一些c++例程」· C语言 代码 · 共 543 行

C
543
字号
#include <dos.h>
#include <math.h>

void cls11();
void cls12();
void cls13();
void cls14();
void cls15();
void cls16();
void cls21();
void cls22();
void cls23();
void cls24();
void cls31();
void cls32();
void cls33();
void cls34();
void cls41();
void cls42();
void cls43();
void cls44();

/* 设置一般清屏函数 */
void qp(int y,int x,int y1,int x1,int ls,int sx)
{
	union REGS r; r.h.ah=6;
	r.h.al=ls; r.h.bh=sx;
	r.h.ch=y; r.h.cl=x;
	r.h.dh=y1; r.h.dl=x1;
	int86(16,&r,&r);
}

/* 主程序 */
void main()
{ 
	int i,j,k;
	char p1[]=" 1.逐列拉幕式:",
	p2[]=" 11.上下半屏同时对向",
	p3[]=" 12.下上三角屏反时针",
	p4[]=" 13.同时对或背向",
	p5[]=" 14.左右半屏同时同向",
	p6[]=" 15.左右半屏分别背向",
	p7[]=" 16.舞台左右撩幕",
	p8[]=" 2.逐行卷帘式:",
	p9[]=" 21.上下三角错开对卷",
	p10[]=" 22.上下半屏同时分卷对卷",
	p11[]=" 23.左右半屏错开对卷",
	p12[]=" 24.右半屏分卷左半屏对卷",
	p13[]=" 3.四周辐射式:",
	p14[]=" 31.四周同时向中心辐射",
	p15[]=" 32.起点、方式不同的四周辐射",
	p16[]=" 33.四角同时分别向中辐射",
	p17[]=" 34.上下左右拓宽两种灯笼式辐射",
	p18[]=" 4.倾斜截角式:",
	p19[]=" 41.左斜分流右斜汇合",
	p20[]=" 42.斜截四角 汇集中央",
	p21[]=" 43.剪刀向左张口剪屏",
	p22[]=" 44.由两条对角线同时分别分流",
	p23[]=" 请选择:1-4 或两位数字细目",
	p24[]=" 清屏方式(0 退出): ";

	for(;;)
	{
		clrscr();
		qp(2,6,21,73,20,43);
		gotoxy(12,5);printf("%s",p1);
		gotoxy(10,6);printf("%s%s%s",p2,p3,p4);
		gotoxy(10,7);printf("%s%s%s",p5,p6,p7);
		gotoxy(12,9);printf("%s",p8);
		gotoxy(10,10);printf("%s%s",p9,p10);
		gotoxy(10,11);printf("%s%s",p11,p12);
		gotoxy(12,13);printf("%s%s",p13);
		gotoxy(10,14);printf("%s%s",p14,p15);
		gotoxy(10,15);printf("%s%s",p16,p17);
		gotoxy(12,17);printf("%s",p18);
		gotoxy(10,18);printf("%s%s",p19,p20);
		gotoxy(10,19);printf("%s%s",p21,p22);
		gotoxy(19,21);printf("%s%s",p23,p24);
		gotoxy(64,21);scanf("%d",&k);
		
		clrscr();
		gotoxy(1,23); qp(0,0,23,79,24,43);
		switch(k)
		{
			case 1:
				cls11();cls12();cls13();cls14();cls15();cls16();
				break;
			case 2:
				cls21();cls22();cls23();cls24();
			    	break;
			case 3:
				cls31();cls32();cls33();cls34();
				break;
			case 4:
				cls41();cls42();cls43();cls44();
				break;
			case 11:
				cls11();break;
			case 12:
				cls12();break;
			case 13:
				cls13();break;
			case 14:
				cls14();break;
			case 15:
				cls15();break;
			case 16:
				cls16();break;
			case 21:
				cls21();break;
			case 22:
				cls22();break;
			case 23:
				cls23();break;
			case 24:
				cls24();break;
			case 31:
				cls31();break;
			case 32:
				cls32();break;
			case 33:
				cls33();break;
			case 34:
				cls34();break;
			case 41:
				cls41();break;
			case 42:
				cls42();break;
			case 43:
				cls43();break;
			case 44:
				cls44();break;
			case 0:
				clrscr();return;
		}
	}
}

int i, j, x, y, z, x1, y1;

/* 1. 拉幕式清屏 */
/* 1.1 分上、下半屏同时反向拉幕 */
void cls11()
{
	for(i=2;i<78;i++)
	{
		qp(1,i,5,i,5,53);
		qp(12,i,17,i,6,53);
		gotoxy(12,3);
		printf("上半屏 同时对向拉幕");
		qp(6,79-i,11,79-i,6,62);
		qp(18,79-i,22,79-i,5,62);
		gotoxy(47,22);
		printf("下半屏 同时对向拉幕");
		gotoxy(1,24);
		delay(200);
	}
	sleep(1);
}

/* 1.2 分左下、右上三角屏依次反时针拉幕 */
void cls12()
{
	for (x=1;x<=22;x++)
	{
		i=floor(3.5*x);
		qp(x,2,22,i,23,80);
		delay(200);
	}
	sleep(1);
	for (x=22;x>0;x--)
	{
		i=floor(3.5*x);
		qp(1,i,x,77,22,80);
		delay(200);
	}
	sleep(1);
}

/* 1.3 由边向中同时对向拉幕 */
void cls13()
{
	for(i=2;i<40;i++)
	{
		qp(1,i,22,i,0,52);
		qp(1,79-i,22,79-i,0,63);
		delay(200);
	}
	sleep(1);
	for(i=0;i<38;i++)
	{
		qp(1,39-i,22,40+i,0,43);
		delay(200);
	}
	sleep(1);
}

/* 1.4 分左、右半屏同时同向右拉幕 */
void cls14()
{
	for(x=40;x<78;x++)
	{
		for(y=2;y<23;y++)
		{
			qp(1,x-38,y,x-38,22,71);
			qp(1,x,24-y,x,21,71);
		}
		delay(500);
	} 
	sleep(1);
}

/* 1.5 左右半屏分别背向拉幕 */
void cls15()
{
	for(i=0;i<19;i++)
	{
		qp(1,20-i,22,21+i,0,34);
		qp(1,58-i,22,59+i,0,43);
		delay(200);
	}
	sleep(1);
}

/* 1.6 戏台撩幕式 */
void cls16()
{
	for(i=1;i<39;i++)
		qp(i,39-i,25,40+i,0,16);
	delay(500);
	for(i=0;i<7;i++)
	{
		qp(i+1,38-i*i,25,i*i+41,2,64);
		delay(200);
		qp(i+1,38-i*i,25,i*i+41,0,6);
		delay(600);
	} 
	qp(14,0,25,79,0,64);
	sleep(1);
	qp(14,0,25,79,0,6);
	sleep(1);
}

/* 2. 卷帘式清屏 */
/* 2.1 分右上、左下三角屏先下后上卷帘 */
void cls21()
{
	for (x=1;x<=22;x++)
	{
		i=floor(3.5*x);
		qp(1,i,x,78,22,64);
		delay(200); 
	}
	sleep(1);
	for (x=22;x>0;x--)
	{
		i=floor(3.5*x);
		qp(x,1,22,i,22,64);
		delay(200);
	}
	sleep(1);
}

/* 2.2 上、下半屏同时分卷或对卷 */
void cls22()
{
	for(y=12;y>0;y--)
	{
		for(x=1;x<=78;x++)
		{
			qp(y,x,y,x,22,24);
			qp(23-y,x,23-y,x,22,24);
		}
		delay(500);
	}
	sleep(1);
	for(y=1;y<=12;y++)
	{
		for(x=1;x<=78;x++)
		{
			qp(23-y,x,23-y,x,22,24);
			qp(y,x,y,x,22,24);
		}
		delay(500);
	}
	sleep(1);
}

/* 2.3 分左、右半屏错开对卷式 */
void cls23()
{
	for(y=1;y<12;y++)
	{
		for(x=1;x<41;x++)
		{
			qp(23-y,x,23-y,x,22,64);
			qp(y,x+38,y,x+38,22,64);
		}
		gotoxy(1,24);
		delay(200);
	}
	sleep(1);
	for(y=1;y<12;y++)
	{
		for(x=1;x<41;x++)
		{
			qp(y,x,y,x,22,64);
			qp(23-y,x+38,23-y,x+38,22,64);
		}
		delay(200);
	}
	sleep(2);
}

/* 2.4 分卷右半屏、对卷左半屏 */
void cls24()
{
	for(i=12;i>0;i--)
	{
		qp(i,40,i,78,i+1,47);
		qp(23-i,40,23-i,78,i+1,47);
		delay(200);
	}
	for(i=1;i<13;i++)
	{
		qp(i,1,i,39,i+1,47);
		qp(23-i,1,23-i,39,i+1,47);
		delay(200);
	}
	sleep(1);
}

/* 3. 辐射式清屏 */
/* 3.1 四周向中心辐射 */
void cls31()
{
	for (i=1;i<12;i++)
	{
		qp(i,i,i,79-i,i,96);
		qp(23-i,i,23-i,79-i,i,56);
		qp(i,i,23-i,i*3.3,22,136);
		qp(i,79-3.3*i,23-i,79-i,22,16);
		delay(500);
	}
	sleep(1);
}

/* 3.2 向四周辐射 */
void cls32()
{
	for (j=1;j<3;j++)
	{
		for(i=1;i<50;i++)
		{
			z=i*3.1416/180;
			if (j==1)
			{
				x=27*tanh(z);
				y=15*atan(z);
			}
			else
			{
				x=13.5*cosh(z);
				y=11*sinh(z);
			}
			qp(12-y,39-2*x,12+y,41+2*x,0,j*40);
			delay(500);
		}
		sleep(1);
	}

	for(i=0;i<32;i++)
	{
		z=i*3.1416/180;
		x=15*sin(z)+9*cos(z);
		y=12*sin(z)+5*cos(z);
		qp(12-y,32-2*x,12+y,5*x+1,0,107);
		delay(500);
	}
	sleep(1);
}

/* 3.3 四角同时分别向中心辐射式 */
void cls33()
{
	for (i=1;i<12;i++)
	{
		qp(1,1,i,i*3.5,i,96);
		qp(23-i,1,22,i*3.5,i,80);
		qp(23-i,78-i*3.5,22,78,22,196);
		qp(1,78-3.5*i,i,78,22,164);
		delay(500);
	}
	sleep(1);
}

/* 3.4 灯笼式 清屏 */
void cls34()
{
	for (j=1;j<3;j++)
	{
		for(i=1;i<=90;i++)
		{
			z=i*3.14/180;
			if (j==1)
			{
			    x=19*sin(z);
			    y=11*cos(z);
			}
			else 
			{
				x=19*cos(z);
				y=11*sin(z);
			}
			qp(12-y,39.3-2*x,12+y,40.3+2*x,0,71+(j-1)*15); 
			delay(100);
		}
		sleep(1);
	}
}

/* 4. 斜截角式清屏 */
/* 4.1 左斜分流 右斜汇合 */
void cls41()
{
	for (z=0;z<=50;z++)
	{
		for (x=-40;x<=39;x++)
		{
			for (i=1;i<=2;i++)
			{
				if(i==2)y=-x/3+z;
			    	else	y=-x/3-z;
			    	y1=-y+12; x1=x+40;
			    	if (y1>=1&&y1<23&&x1>=1&&x1<=78)
			    		qp(y1,x1,y1,x1,0,67);
			}
		}
		delay(200);
	}
	delay(500);
	for (z=-50;z<=0;z++)
	{
		for(x=-40;x<=39;x++)
		{
			for (i=1;i<=2;i++)
			{
				if(i==2) y=-x/3+z;
				else     y=-x/3-z;
				y1=-y+13;x1=-x+40;
				if(y1>=1&&y1<23&&x1>=1&&x1<=78)
					qp(y1,x1,y1,x1,0,67);
			} 
		} delay(200);
	}
	sleep(1);
}

/* 4.2 斜截四角 汇集中央 */
void cls42()
{
	for (z=-50;z<=0;z++) 
	{
		for (x=-40;x<=39;x++)
		{
			for (i=1;i<=4;i++)
			{
				switch(i)
				{
				case 1:
					y=-x/3-z;y1=-y+12;
					x1=x+40; break;
				case 2: 
					y=-x/3+z;y1=-y+12; 
					x1=x+40; break;
				case 3: 
					y=-x/3-z;y1=-y+13;
					x1=-x+40; break;
				case 4: 
					y=-x/3+z;y1=-y+13;
					x1=-x+40; break;
				}
				if (y1>=1&&y1<23&&x1>=1&&x1<=78)
					qp(y1,x1,y1,x1,0,87);
			} 
		} 
		delay(200);
	}
	sleep(1);
}

/* 4.3 向左张口剪刀剪屏 */
void cls43()
{
	for(z=-50;z<=12;z++)
	{
		for(x=-42;x<=39;x++)
		{
			y=-x/3+z; y1=-y+12; x1=-x+37;
			if(y1>=1&&y1<23&&x1>=1&&x1<=78)
				qp(y1,x1,y1,x1,0,107);
			y=-x/3-z; y1=-y+13; x1=x+40;
			if(y1>=1&&y1<=12&&x1>=1&&x1<=78)
				qp(y1,x1,y1,x1,0,107);
		} 
		delay(200);
	}
	sleep(1);
}

/* 4.4 由两条对角线同时分别分流 */
void cls44()
{
	for (z=0;z<=50;z++)
	{
		for (x=-40;x<=39;x++)
		{
			for (i=1;i<=4;i++) 
			{
				switch(i)
				{
				case 1:
					y=-x/3-z;y1=-y+12;
					x1=x+40; break;
				case 2: 
					y=-x/3+z;y1=-y+12;
					x1=x+40; break;
				case 3: 
					y=-x/3-z;y1=-y+13;
					x1=-x+40;break;
				case 4: 
					y=-x/3+z;y1=-y+13;
					x1=-x+40;break;
				}
				if(y1>=1&&y1<23&&x1>=1&&x1<=78)
					qp(y1,x1,y1,x1,0,57);
			} 
		}
		delay(200);
	}
	sleep(1);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?