捌玖网络工作室's Archiver

zw2004 发表于 2008-1-21 17:14

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,)B})fDB/p'J8f
b0l2M'[h;h0`,@3@Z Y3B
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
/a8WcSP/p-}L "u`r({*R*vW.K F
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
2|F1M8UL^   子函数及演示程序:` `|3ls

k)c6x9Qy6ob^ Dh4V8n   #include<stdio.h>
.YS}M?7q%`1p2T   #include<dos.h>
zp7dDb$f6x   #include<conio.h>
1WoJo \kAB ^~+J|],H`
  void goto_xy(int x,int y);e&M-cF'S_
  void dcls(int x1,int x2,int y1,int y2);@(lz8RD1t'm9C}*V(h
  void bcls(int x1,int x2,int y1,int y2);tj7f8c$p2k~,`vj n
  void kcls(int x1,int x2,int y1,int y2);.oVR+P"MV
  void recls(int x1,int x2,int y1,int y2);
:um0AJeB\   void zcls(int x1,int x2,int y1,int y2);
/BYH4BV'^.q4Ua^   void puta(void);
z1P L3ZT"p [e
!S/_H0nG3eu
Qk0P w7nh1~e6b   /*--------------演示程序---------------------*/Q0`oB(q0_
  main()2J js1hA%Ve;[
  {9a#vO5T ~*d4Z.?P
  puta();
t;Y+B7i kPa;C(bh   getch();_sZ4u"z)]]
  dcls(0,4,0,79);t2F0w]@ D!P~+|
  getch();.F9e)f(^y'RG!}
  puta();
`J4{M6l$h\x   getch();+z5wvn$I2zJ+C!S
  bcls(0,25,0,79);
Q iT~\?o   getch(); ]Zq|#^{8j/k+G w.M
  puta();)t[ ^'cz.q x x
  getch();m V!Mr:pw@\3PP_S
  zcls(0,25,0,79);
t3^e9m;G vF@$Q@{Z   getch();i/cc6N2F8p o:f
  } a$NfcD`?7Pu
  /*********center clear screen(中心清屏)***********/
-Lt(Nf&~#M`   void zcls(int x1,int x2,int y1,int y2)
/x&|'ep9K2[F   { z1?upt,y'{%s
  int x00,y00,x0,y0,i,d;
*d gW?y*B4M3Y[Q)f   if((y2-y1)>(x2-x1)){U~|-vQjp~ g
  d=(x2-x1)/2;
3{X_;c]}DK2v   x0=(x1+x2)/2;2s3~/x&x$T5j-[ {m
  y0=y1+d;i|sN2xD[6s
  y00=y2-d; vlwx9|2XZS @W z
  for(i=0;i<(d+1);i++)
xj7^*@q[   recls((x0-i),(x00+i),(y0-i),(y00+i));
JGDQ0_p   delay(10); t&O G}/H8oYcc.fm
  }
2\{nE%~R$v$c[   else{
"j%I:o V:N2vm9Q F   d=(y2-y1)/2;
I2B?h;O?X   y0=(y1+y2)/2;
3z$ff4Y9Z5f   x0=x1+d;`W0FRW,zT
  x00=x2-d;
Z NN j)qtn vhV   for(i=0;i<d+1;i++)
!\I6dZZb$Zf\%L   recls(x0-i,x00+i,y0-i,y00+i);
pa R$O)C3YoT   delay(10);
?,z+M I$L/p,_T   }
E!W raK[8v-_%If0|   }
5F-DJ[U.D0h+j/R+W ji+O,T*V[]Yc
  /************* clear rectangle side(矩形边清屏)***********************/
&|vtCX?O-` 2r$kYt,^,P&lPe
  void recls(int x1,int x2,int y1,int y2)
h1F)p:C+Zk   {3y%\*g&GSe%x
  int i,j;
u1c6X? X8Z   for(i=y1;i<y2;i++){
h"M)~ rQ"lK     goto_xy(x1,i);Hrot4^Y7W(}3zU G:q
  putchar(' ');
%P|a c&L4|\   goto_xy(x2,i);^kA&Q%S|3J\5y'n
  putchar(' ');
.l(\9Z,ePx6`D\   delay(10);
s3E B i)g)[   }A.dL5u/li~'T
  for(j=x1;j<x2;j++){d0le(mgU
  goto_xy(i,y1);cw DUn`
  putchar(' ');
6[@Ai+t/z   goto_xy(j,y2);
!b6]S1s9av%Z|s+M   putchar(' ');-z)TN*Vy @:XUg
  delay(10);
{F T.U}#xl$guS   }
S+[L7a k;r Km   }"m n.a1x{3K5x!YU
  /******************open screen clear(开屏式清屏)*********************/
%aU9{0cI E 2lL RaF"][Wf
  void kcls(int x1,int x2,int y1,int y2)Hucs"s i
  {7BWi/^Zj u8l;B
  int t,s,i,j;
%`7X]d]\l   t=s=(y1+y2)/2;
eCO V6nI*SI4W ?   for(;t<=y2;t++,s--)
9a'C"e{WR Bo   for(j=x1;j<x2;j++){
S%h rO#evL   goto_xy(j,t);&_j-Q O$h9{
  putchar(' ');k+[)iKo|*qA+n
  goto_xy(j,s);
(vra7i3[r   putchar(' ');
U's v }Zu   delay(10);?5l~3^ r4f~F
  },VSG:UJ;]E
  } SAOKk^"R
  /*****************close screen clear*****闭幕式清屏*******************/
)`wCX"n x[oaT
w:{*W LeB5Og   void bcls(int x1,int x2,int y1,int y2) J$u*lMx D,N{
  {
N Z#d!F2gW;^@;|"Dk   int t,s,j;
3_:qe(TmQ ZT   t=y1;
P!Ws#xw,q#E+F   s=y2;j&~:i B-V pVA
  for(t=y1;t<(y1+y2)/2;t++,s--)
`0\+[vB5N|   for(j=x1;j<x2;j++){[r4llAR}k%i/v
  goto_xy(j,t);:Ga_a0U }RFG
  putchar(' ');
\mCcy O Nf,[Z0M   goto_xy(j,s);
7f)`J-e3}h   putchar(' ');!t~ AVTh!A;w
  delay(10);
Z9e7q.{[7?-U;|5Ab   }
E8B&ND,ECSgb   }I0B:vd(At!k
  /******************bottom screen clear(自下清屏)********************/(Lf&j m;l8E

7_p8^ Sq.zV#o   void dcls(int x1,int x2,int y1,int y2)/nb4hm7i
  {7zmaXxF'e Y]8D
  int t,s,j,i;
?b_yJe   t=s=(y1+y2)/2;M,Sl b-{
  for(j=x2;j>x1;j--)
W4O}wq   for(i=y1;i<y2;i++){HW f;aLU+u7Y:T
  goto_xy(j,i);
W WV3}%JS   putchar(' ');
G-R)ww8L V Lp   delay(10);Q\R6@5e5h
  }
4k8q'UPn t ux   } c%H#UQ;Hp&_xq
  /******************设置光标子函数******************/
^ Q"Vk/{"qa|/f1c
(k8h3p(^k1u g!^0V   void goto_xy(int x,int y)
Gz5?)\2m0O1r/Q5_   {
f WzZ8J r9L {V   union REGS r; a'l-iK"X%\]
  r.h.ah=2;
$|-SJ{)l_eD\BZ   r.h.dl=y;
u"MQ(D ^Z E)X   r.h.dh=x;Yh E/|#H"EL
  r.h.bh=0;
lW U6{fV q*n7j   int86(0x10,&r,&r);
R q u*mZ,{H5K L/h   }
r.hFr&[gj`
u:`9On$g,q'L!l   /**********************在屏幕上打出一连串的a字母用于演示程序******************/
Z,l-IyOK F 6_H6o KrpI.@ |
  void puta(void)
-Dp3x0_ A   {nT}"o'R\EY
  int i,j;
j/D O~,J$N,dW   for(i=0;i<24;i++){
)C@+HyeHwG   for(j=0;j<79;j++){sT3t6Hi@
  goto_xy(i,j);
|/o#R e$g   printf("a");'Oc]nqa!b9Ul
  }-s&Sk"CJGU
  }&B^0|!t*hNb?Um
  }

页: [1]
【捌玖网络】已经运行:


Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.