捌玖网络工作室's Archiver

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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
8E+[ Y&s%k B+k)F&XS
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
+~8[7S-}W;I?:vj~
,m)eSO|y+Dy   用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
5c6o(d~,jD)g(d   子函数及演示程序:
/j"oZ"T/bdU$]
5HA.O:i9T$BMq_   #include<stdio.h>
8M/`(sa:z   #include<dos.h>
"KH;\2Cc+W   #include<conio.h>
.A2BMx\1Nu\n
']ELs8S0E T   void goto_xy(int x,int y);M8D|~)@ b} L
  void dcls(int x1,int x2,int y1,int y2);
q ug(RP|;b-Y!Ev   void bcls(int x1,int x2,int y1,int y2);2D)f/g({*Vl{$?PM
  void kcls(int x1,int x2,int y1,int y2);
pM oAG   void recls(int x1,int x2,int y1,int y2);Q2cg2tpR/jh@
  void zcls(int x1,int x2,int y1,int y2);
!Yj t`6m){   void puta(void);
fwL0r9N&`h v7] d5`$WCvJ
bFzY0w
  /*--------------演示程序---------------------*/
b*b0L6v^td m-CT2c K   main()"v"v:XAL\g)b D
  {
|RR,s1t?%[[:H   puta();%z'a7jS0Q"d!Az7`
  getch();d*_M+\C5C0I1N x
  dcls(0,4,0,79);7wwWK~Z!~
  getch();1DejM!|#Q*Kx
  puta();M7Uz.Pc
  getch();/A+HE+`9Q#CHqV&_"b
  bcls(0,25,0,79);
2E0F8m'[o8z wjf   getch();
Fr GA9k2f|   puta();P8J5t0SSS+}
  getch();-|,PoA O)wD qi
  zcls(0,25,0,79);(Y~ u^} ^D
  getch();"@,[6EiSm
  }v6`W*ftgPb
  /*********center clear screen(中心清屏)***********/1]K(^-L|tZ@
  void zcls(int x1,int x2,int y1,int y2)
L5eq x0I,M4_+S   {_-N K[4I#}|G E'E;c
  int x00,y00,x0,y0,i,d;px3_1n n BDB
  if((y2-y1)>(x2-x1)){
N/n5mpO*k'z]^   d=(x2-x1)/2;
},j;^ hGl   x0=(x1+x2)/2;9}{$_2y#w4x#XKe2}
  y0=y1+d;jw`;{2K*Q
  y00=y2-d;gi0NS:YQs+W V
  for(i=0;i<(d+1);i++)
vw2CM$p9h-b#|'Ke\&e   recls((x0-i),(x00+i),(y0-i),(y00+i));%F`6B+ip9~!T*d"bE7R
  delay(10);y`0JmU*Je4~(U
  } Eh+r$A*th(fE
  else{&U*|9] q?k:mV3^;{3G
  d=(y2-y1)/2;-I` ~/{K,LRr
  y0=(y1+y2)/2;
!cgs:D3v   x0=x1+d;w]4J~(}9co]
  x00=x2-d;
`*fB$cKo2viM   for(i=0;i<d+1;i++)
!bY(A q(m'c nDD   recls(x0-i,x00+i,y0-i,y00+i);}!r8L9` q.Gh
  delay(10);.K.v+c x2VCx'@%LuI
  }
8NX(ut;e;_1Y   }
]"T(zQ`Z"S
-@ sRq$R Ig4v:dw   /************* clear rectangle side(矩形边清屏)***********************/ l4g7NJi,W-\ kt

Y0z_(p,{:{%N^ u   void recls(int x1,int x2,int y1,int y2)
w"TcOw]+t8u   {
|#E.Mr7X ?)c*B.l)Me3~8k   int i,j;Al W5A"w
  for(i=y1;i<y2;i++){
{ I|s2R(r }}I;z     goto_xy(x1,i);n:A(B6b9@kc
  putchar(' ');8t/W?J3qQ,O&h
  goto_xy(x2,i);?%A:c"q-y+[kn
  putchar(' ');7aX5c8r6mq ~ L
  delay(10);
\8w0Wu sq-S%x   }pH ovDE+D
  for(j=x1;j<x2;j++){
.X%q3xcJ/C   goto_xy(i,y1);
x+|U y.m'ni z*ShB0l   putchar(' ');
f!?_3d%D qHt   goto_xy(j,y2);
]F2K7X{p   putchar(' ');o$b F)IT
  delay(10);i+Zl%P8?-T!Z ~KN1x
  }
{ n{5H'J1l"s   }'h;P)P|keYVs
  /******************open screen clear(开屏式清屏)*********************/l2MP4J U4o3e,f0P

2n VpXUE#v E   void kcls(int x1,int x2,int y1,int y2)t ddc6ZA]-`cQws
  {
,h\M&sx8N)}   int t,s,i,j;
ai1t(ky ?d6J|&T   t=s=(y1+y2)/2;;~'kj#@%c tq
  for(;t<=y2;t++,s--)
MZ7A7KKiA9U   for(j=x1;j<x2;j++){
3W O9^+z+X$q'l Mp   goto_xy(j,t);
o"F6H Iu^ X,G S+X   putchar(' ');
N_ b0H"aR"|*]   goto_xy(j,s);
i7ur7gcZF$dJ   putchar(' ');d(f8q(sOK)f
  delay(10);QW3\5U m k
  }
4pP!ZD(n"Pxd-C   } Y2}6Sg&O
  /*****************close screen clear*****闭幕式清屏*******************/
Z sZ-R*Cn*R[G
Gbz5LDk   void bcls(int x1,int x2,int y1,int y2)4Kv6ui$V
  {
S K%b"E y9]   int t,s,j;K&m ~$~}-GL*r
  t=y1;
kK z;q J5[1S6o%r   s=y2;
Gx9g{qb   for(t=y1;t<(y1+y2)/2;t++,s--)
3n%e!N8u3~8q+R   for(j=x1;j<x2;j++){h)E/n$R||9H
  goto_xy(j,t);
-HT R6vM@#g}Y e4Z,E   putchar(' ');ux P J)WX
  goto_xy(j,s);
i&PUa8o }   putchar(' ');a Pz&x oC
  delay(10);
6O%RKz8Au SH0va$y   }
ahz,uwF%c:Z   }L&uEP(jMa-q
  /******************bottom screen clear(自下清屏)********************/)n] eSgt? ikx
h^ l['Y
  void dcls(int x1,int x2,int y1,int y2),S+a]9]?eDv1m{
  {*uOq8u:EY*`!A_iB
  int t,s,j,i;
*?*Uc?t)q^   t=s=(y1+y2)/2;I$@z j }?Z@
  for(j=x2;j>x1;j--)
6@P8r;E J,k/[+C+L"S   for(i=y1;i<y2;i++){4q2Hb!l3D!j8DY|;p)O
  goto_xy(j,i);{dh'D:N`,|R/f
  putchar(' ');\ _ z/v0MT2W(s8k
  delay(10);$pUSSqpAy
  })Yn@xJ
  }
?TfD:k;q w5dP   /******************设置光标子函数******************/(b!R L'Q)}

R4q5Fr.yOTfg/`r   void goto_xy(int x,int y)
5^OECPf   { |t] odQg
  union REGS r;
[Qi#jn#j   r.h.ah=2;
\7Ax)s6A6_7f+y'l   r.h.dl=y;{+dok/D#w
  r.h.dh=x;Lrste O1R ?
  r.h.bh=0;U!Xz3iA.b
  int86(0x10,&r,&r);%rU0f:G)qE P
  }
G,j"mApd(?
&jc1UMh   /**********************在屏幕上打出一连串的a字母用于演示程序******************/
q2u _'Of$|l9W
2S%Bp`}`-K7@S   void puta(void)m#{ kS&h1DE|
  {)F%J1uj9v
  int i,j;$O)v'D'~ aXn\
  for(i=0;i<24;i++){Lw B` VE]2e
  for(j=0;j<79;j++){
i |ab d i;S   goto_xy(i,j);
G'ep+}T8H   printf("a");E/Zd0}"Y
  }
,]m!u1r5O&r'N   }
i-?$|\;M8hQWMA   }

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.