C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏, C5{1K Rc:O\@3S.Q并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里)L#bW4@k
W{*v'iY'C
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
子函数及演示程序:
6M^"o)H.ET3y'yM@ g
#include<stdio.h>
#include<dos.h>
#include<conio.h>*S-k)Ds7PMc
:d;qzx#b
void goto_xy(int x,int y);
void dcls(int x1,int x2,int y1,int y2);`fLU`/T;{vl5M
void bcls(int x1,int x2,int y1,int y2);
void kcls(int x1,int x2,int y1,int y2);lb x5^9x(]
void recls(int x1,int x2,int y1,int y2);
void zcls(int x1,int x2,int y1,int y2);
void puta(void);
/*--------------演示程序---------------------*/}5h W3D5Y(c{%_4E
main()
{n2s8hp5WL\K(ov-c
puta();e\`5D:PYm,tf
getch();fA.L3eCZ7XI
dcls(0,4,0,79);
getch();6B? Bmx_
puta();*J`e%r#j k
getch();b(C1ffu.X?
bcls(0,25,0,79);vQ{%n"@{
getch();'Re,O'~7N/_2Z\ZJ~
puta();
getch();
zcls(0,25,0,79);
getch();u6Sf$Za6h| wQ C-])F
}Vg.auiW.XpJj$]
/*********center clear screen(中心清屏)***********/
void zcls(int x1,int x2,int y1,int y2)#R`F"cF |
{
int x00,y00,x0,y0,i,d;
if((y2-y1)>(x2-x1)){
d=(x2-x1)/2;%tO\.YP
x0=(x1+x2)/2;(CE(\} rSFzi
y0=y1+d;:v'?6d+]QU8b-|
y00=y2-d;
for(i=0;i<(d+1);i++)Tk!I@p$Y.c
recls((x0-i),(x00+i),(y0-i),(y00+i));np1mMF Zdla
delay(10);}U"d\7P6q x
}or9[%ICQ G
else{1a*K w$JV1p@7['zfp
d=(y2-y1)/2;
y0=(y1+y2)/2;7vRX\U
x0=x1+d;cPl7U0VF r7G(Q
x00=x2-d;
for(i=0;i<d+1;i++)
recls(x0-i,x00+i,y0-i,y00+i);E3i4]+]!d2a a(nQE
delay(10);g u7j)\wse
}
}
/************* clear rectangle side(矩形边清屏)***********************/
void recls(int x1,int x2,int y1,int y2)
{X8X:iQ)f.O;Y
int i,j;
for(i=y1;i<y2;i++){y9v5z M.N7L&\
goto_xy(x1,i);6c J4w-`/y w Q
putchar(' ');7YV4?6G6ZCgjU
goto_xy(x2,i);r]eJ%@
putchar(' ');
delay(10);/C2W[-R)GxnlW ]
}
for(j=x1;j<x2;j++){
goto_xy(i,y1);%G*J0Sl"a
putchar(' ');
goto_xy(j,y2);
putchar(' ');:FX.d}]r:s)\
delay(10);-zpho T[
}^:j+U ^2~
}b+Rgs6OS
/******************open screen clear(开屏式清屏)*********************/
-TltL7s"|$ytE-}
void kcls(int x1,int x2,int y1,int y2)6?$H9ED!x5@ F r
{
int t,s,i,j;V]&y%h c7s8@
t=s=(y1+y2)/2;
for(;t<=y2;t++,s--)
for(j=x1;j<x2;j++){
goto_xy(j,t);kKR#A7pl1T
putchar(' ');
goto_xy(j,s);
putchar(' ');
delay(10);"PKK)`;Cu
} ]1yY+X#Xpp
}
/*****************close screen clear*****闭幕式清屏*******************/
O ci"Cixr7Z9Z6r
void bcls(int x1,int x2,int y1,int y2)
{Qd?J5H I
int t,s,j;+r2r QDm D1a`GS
t=y1;
s=y2;
for(t=y1;t<(y1+y2)/2;t++,s--)
for(j=x1;j<x2;j++){
goto_xy(j,t);4bt"t*TP+b!}"T3\Z
putchar(' '); Ed?gJ/H
goto_xy(j,s);
putchar(' ');
delay(10);@5A1gKD`&T5e
}
}(f A1? w d!E
/******************bottom screen clear(自下清屏)********************/^-N6}0H)J
void dcls(int x1,int x2,int y1,int y2)6@g!EG9f
{9i fInJ1U{#A'W
int t,s,j,i;'] \Nz'kw
t=s=(y1+y2)/2;N T M3u6I2n!U!xU'W:j
for(j=x2;j>x1;j--)"_FrJQ+o&p
for(i=y1;i<y2;i++){
goto_xy(j,i);
putchar(' ');C%s0[)h-RA
delay(10);
}4FDM'sZ"Tfl{7Wn gs
}
/******************设置光标子函数******************/
.o9c)Q'r2__p
void goto_xy(int x,int y)%`'q7g+Rf
{
union REGS r;Qbn g$Iw9k_
r.h.ah=2;
r.h.dl=y;
r.h.dh=x;Qps"|I7n/V` l:^
r.h.bh=0;!Q5`6u%Q0T-? [8\*m4q
int86(0x10,&r,&r);
}
Fv8l}-I r
/**********************在屏幕上打出一连串的a字母用于演示程序******************/L{c%wq9iz
void puta(void)
{
int i,j;P(e!q8P IX)CuK
for(i=0;i<24;i++){
for(j=0;j<79;j++){
goto_xy(i,j); R$F{;P6u-xqh3Y~1c
printf("a");ZBp*o$Uy
}GJ{ N9O*i"R
}
}
页:
[1]