捌玖网络工作室's Archiver

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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏, C5{1K Rc:O\@3S.Q

4B3m]j.V0R4c   并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里)L#bW4@k
W{*v'iY'C
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
4Vp|)E'|W(A   子函数及演示程序:
@3I3u"~rqv!^ 6M^"o)H.ET3y'yM@g
  #include<stdio.h>
[2h[L4wWW,n AV   #include<dos.h>
S v+V L P3o   #include<conio.h>*S-k)Ds7PMc
:d;qzx#b
  void goto_xy(int x,int y);
+zR$V,A8t2Q$t,ZH   void dcls(int x1,int x2,int y1,int y2); ` fLU`/T;{vl5M
  void bcls(int x1,int x2,int y1,int y2);
7P Cd'? L5@   void kcls(int x1,int x2,int y1,int y2);l b x5^9x(]
  void recls(int x1,int x2,int y1,int y2);
\+q4c?6b!N   void zcls(int x1,int x2,int y1,int y2);
+TY,?P5q|9AL2v   void puta(void);
$qgo^h7M#yY#Wn
S3D;R Z"{
3~ O,P!HWm)G   /*--------------演示程序---------------------*/}5h W3D5Y(c{%_4E
  main()
"HPG3Tg   { n2s8hp5WL\ K(o v-c
  puta();e\`5D:PYm,tf
  getch();fA.L3eCZ7XI
  dcls(0,4,0,79);
G7TkT$e }$C   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();
)O nNm My9U   getch();
G b[Y0d9T1W   zcls(0,25,0,79);
Q&B%t(yR%m/tA   getch();u6Sf$Za6h| wQ C-])F
  }Vg.aui W.XpJj$]
  /*********center clear screen(中心清屏)***********/
*tUEE"d   void zcls(int x1,int x2,int y1,int y2)#R`F"cF |
  {
G\|!F'P   int x00,y00,x0,y0,i,d;
4f.S3k]}7x Ib:R   if((y2-y1)>(x2-x1)){
(Y,VdwD)B7L^   d=(x2-x1)/2;%tO\.YP
  x0=(x1+x2)/2;(CE(\} rSFzi
  y0=y1+d;:v'?6d+]Q U8b-|
  y00=y2-d;
C`v I eP)l   for(i=0;i<(d+1);i++)T k!I@ p$Y.c
  recls((x0-i),(x00+i),(y0-i),(y00+i));np1m MF Zdla
  delay(10);}U"d\7P6qx
  }or9[%ICQ G
  else{1a*K w$JV1p@7['zfp
  d=(y2-y1)/2;
4edKD.m M   y0=(y1+y2)/2;7vRX\U
  x0=x1+d;c P l7U0VF r7G(Q
  x00=x2-d;
;NIR+k@toj1p"[?   for(i=0;i<d+1;i++)
;vY;~|/Qa   recls(x0-i,x00+i,y0-i,y00+i); E3i4]+]!d2a a(nQE
  delay(10);g u7j)\w se
  }
{,j,s:~ s7f   }
ZEYm2e'r9R%}
&zQ+v x Q0U?G   /************* clear rectangle side(矩形边清屏)***********************/
,?$Yp6yL%a
"A)x!}] {L1u!Fd   void recls(int x1,int x2,int y1,int y2)
VAn \8nsSE e   {X8X:iQ)f.O;Y
  int i,j;
hrI:K;_1u_)Y3?   for(i=y1;i<y2;i++){y9v5z M.N7L&\
    goto_xy(x1,i);6c J4w-`/y wQ
  putchar(' ');7YV4?6G6ZCgjU
  goto_xy(x2,i);r]eJ%@
  putchar(' ');
f7_.d7k-Rb   delay(10);/C2W[-R)Gxn lW ]
  }
;S0f9l$qt   for(j=x1;j<x2;j++){
huOtO4J~jf y   goto_xy(i,y1);%G*J0Sl"a
  putchar(' ');
0] y^MG pA&O   goto_xy(j,y2);
FJB }1O!m.g\df   putchar(' ');:FX.d}]r:s)\
  delay(10);-zp ho T[
  }^:j+U ^2~
  }b+Rgs6OS
  /******************open screen clear(开屏式清屏)*********************/
@8Cu2s O-F -TltL7s"|$yt E-}
  void kcls(int x1,int x2,int y1,int y2)6?$H9ED!x5@ F r
  {
0I#VCPn*N   int t,s,i,j;V]&y%h c7s8@
  t=s=(y1+y2)/2;
'C^M+E(T&YX   for(;t<=y2;t++,s--)
YeI q h)J0d5bhC   for(j=x1;j<x2;j++){
:hlW1Dm'g }$x8P   goto_xy(j,t);kKR#A7pl1T
  putchar(' ');
t{Vy%?(Aezn   goto_xy(j,s);
[bqb"F:s/J uWM   putchar(' ');
h9v3e|}3h(pO   delay(10);"PKK)`;Cu
  } ]1yY+X#X pp
  }
)FQ?'z];Yf5rPA   /*****************close screen clear*****闭幕式清屏*******************/
vN~Pr#Z/sD_ O ci"Cixr7Z9Z6r
  void bcls(int x1,int x2,int y1,int y2)
+^M/w U.Rw   {Qd?J5H I
  int t,s,j;+r2r QDm D1a`GS
  t=y1;
0v G[ l%vi   s=y2;
5M b*I,J9_4e$P&d   for(t=y1;t<(y1+y2)/2;t++,s--)
)L F&Kl FN#k+_   for(j=x1;j<x2;j++){
,S+bKx*N{Ni   goto_xy(j,t);4b t"t*TP+b!}"T3\Z
  putchar(' '); Ed?gJ/H
  goto_xy(j,s);
.p._8s-d&[T   putchar(' ');
Qo2G|!noS#[   delay(10);@5A1gKD`&T5e
  }
_,L)h#Mrc]#|   }(fA1? w d!E
  /******************bottom screen clear(自下清屏)********************/^-N6}0H)J

be"}8A)c&C8} d   void dcls(int x1,int x2,int y1,int y2)6@g!EG9f
  {9i f InJ1U{#A'W
  int t,s,j,i;'] \Nz'kw
  t=s=(y1+y2)/2;N TM3u6I2n!U!xU'W:j
  for(j=x2;j>x1;j--)"_FrJQ+o&p
  for(i=y1;i<y2;i++){
ifz*k;}   goto_xy(j,i);
_x/vlf W+I?/Q?4Q   putchar(' ');C%s0[)h-RA
  delay(10);
9sluL9QAG   }4FDM'sZ"Tfl{7Wngs
  }
w!A N6rNAtU   /******************设置光标子函数******************/
%}QKXe|Z .o9c)Q'r2__p
  void goto_xy(int x,int y)%`'q7g+Rf
  {
yo"t!Q@   union REGS r;Qb n g$Iw9k_
  r.h.ah=2;
?m*fMd7HC;Vol   r.h.dl=y;
4HY'iN c}b   r.h.dh=x;Qps"|I7n/V` l:^
  r.h.bh=0;!Q5`6u%Q0T-? [8\*m4q
  int86(0x10,&r,&r);
F._]'p []E-M   }
])o dxbj Fv8l}-Ir
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/ L{c%wq9iz

KA2K[,Ch8fm   void puta(void)
!RKq5`Zo7_   {
7tR zo*S   int i,j;P(e!q8PIX)CuK
  for(i=0;i<24;i++){
rk2i/V z;n)f @   for(j=0;j<79;j++){
teH)V9v'w w:R Nh   goto_xy(i,j); R$F {;P6u-xqh3Y~1c
  printf("a"); ZB p*o$Uy
  }GJ { N9O*i"R
  }
$AeJz6c%c3KO   }

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


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