捌玖网络工作室's Archiver

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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,,Y%hNY8l
;|!c/ej teq\
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
"]$Fy2o Ar4A
+kX n8eTsl   用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
/cT _(l'u'?gu6K   子函数及演示程序: ~ o)QBG N7}
,uQnu&Z1i?!n#W%Z_
  #include<stdio.h>
2~`tzO   #include<dos.h> T:T0V7qOh
  #include<conio.h>
&G7nWBn3xF&fc
kCx|d-n$G   void goto_xy(int x,int y);/C"UAt8i%J-ib&d
  void dcls(int x1,int x2,int y1,int y2);
1xW?|_,NQ5P   void bcls(int x1,int x2,int y1,int y2);;gi"\6~I5L8n
  void kcls(int x1,int x2,int y1,int y2);(ec8v8y&D[
  void recls(int x1,int x2,int y1,int y2);U k] m&p1@
  void zcls(int x1,int x2,int y1,int y2);@#d5d9P$_G AUb:fo
  void puta(void);k ^+l(B1v l2Q
`nN*k9dQAEC
7FyD:XR/N
  /*--------------演示程序---------------------*/ ACh/p A0C%^2k$i
  main()
3T/}!|;ME G"G*X+C   {%Q pt8J S
  puta();
#AqA_d0t5M   getch();0f9S ](A {R
  dcls(0,4,0,79);
k*dE*z-](Ib'n$hy   getch();&a~I2E c%W:Q
  puta();
^}(b2I rj9c`w   getch();
6^*R wT5t!x   bcls(0,25,0,79);'at3^9SJd
  getch();
"M.` GgxB:Y ^   puta();8Lu%Dv7I"|w4O9m
  getch();
'l Gd+tj,m#VO;F$B ^   zcls(0,25,0,79);rs{"vqC/U
  getch();
9HYW8Lan3w7i   }b,X/zNr;h-s
  /*********center clear screen(中心清屏)***********/
6j$N3@'v(EocW0Z   void zcls(int x1,int x2,int y1,int y2)T$?nDf'Db
  {
j1AsL J![h0y   int x00,y00,x0,y0,i,d;
(Bh$d \"Q:r il   if((y2-y1)>(x2-x1)){U&wX(}#E d
  d=(x2-x1)/2;
3j7E3~/v{_}   x0=(x1+x2)/2;kJ-yIAPzm
  y0=y1+d;
Z^N%O1rW(TI   y00=y2-d;7H{p!K-TU$R
  for(i=0;i<(d+1);i++)
`.ir:Ej(Sh   recls((x0-i),(x00+i),(y0-i),(y00+i)); db.U.@ A M~
  delay(10);!D*r$Fk^.S%y
  }
1Ng3`%{/z iI{c   else{/Pm!M%c3TA%rUB%f$r
  d=(y2-y1)/2; H"XCMt3w7\H
  y0=(y1+y2)/2;
6qKZ"?!T\)y   x0=x1+d;3@4i(D m3gE
  x00=x2-d;
y7No,ar_   for(i=0;i<d+1;i++)
ip%J!K:_*P~,m   recls(x0-i,x00+i,y0-i,y00+i);(Da0N_K
  delay(10);
.@9zFi c0l e z!O   } d3T K jSK0l
  }
zVg'\h5h e!Ie2?Wu
  /************* clear rectangle side(矩形边清屏)***********************/,dmbll(h

$p F L`4`(}   void recls(int x1,int x2,int y1,int y2)
Ws Sy4z#IxZ   {
d3POVr7X   int i,j;
7Qt2|n/eL   for(i=y1;i<y2;i++){
8S{k#m {_?.g     goto_xy(x1,i);T2g5pd5PO
  putchar(' ');u i9PU&Ki:s
  goto_xy(x2,i);
;v.g s8I cr c,n   putchar(' ');2p M'Y I3TiZ
  delay(10);
+nFM'k$tov:L   }
'A0i/J7G JV   for(j=x1;j<x2;j++){p*x\ S+F{Y^2y
  goto_xy(i,y1);0Q2`'H ~$DeT _ |;e
  putchar(' ');C&q2v1b C-e0]
  goto_xy(j,y2);/qwf!N+J
  putchar(' ');
nm'S%K ~,IFn3[   delay(10);
}VWul'y iJ:eS   }QWzT$oZc&N
  }g6F+v w|)K;P"t
  /******************open screen clear(开屏式清屏)*********************/
+J-\S,mym i %o#wxB_pO5a-lh
  void kcls(int x1,int x2,int y1,int y2)
ty/Z5xiwL   {8v8k _ li&{1r
  int t,s,i,j;,t|"S"C5jr
  t=s=(y1+y2)/2;#lnXo&b n0V
  for(;t<=y2;t++,s--)
K1^ \(O0V%M/m   for(j=x1;j<x2;j++){
5`c/A%]8e `#A2i$U   goto_xy(j,t);aY;x}H#G @Fr,qS
  putchar(' ');
6noV1DiSyW+LEC   goto_xy(j,s);
r5YIp*K4R   putchar(' ');^AP/{jl9^j2O
  delay(10);"C#Kk+{^/d-r h*p
  } Dlt2eU {T
  }
V#E8Hil6M   /*****************close screen clear*****闭幕式清屏*******************/jzs6b*Xb.a,Yqa
&_X`~L(h G5d_
  void bcls(int x1,int x2,int y1,int y2)
e7x3X!M V9i   {
NLG3b\J   int t,s,j;
w5j](zS0v5i[[   t=y1;]3{J;A!z [K }
  s=y2;
OEp-^9v2W{c   for(t=y1;t<(y1+y2)/2;t++,s--)
/Y*Xn!j5XqeYbmS   for(j=x1;j<x2;j++){0m4u9?8n}Jb
  goto_xy(j,t);/N^ N(n,R
  putchar(' ');
NBO9Kp0|9q1J;?%w9c{   goto_xy(j,s);
H'U{7{ _LV"U7Ql   putchar(' ');8PYq[/X;uw#z.Rz
  delay(10);W Gcmz;in
  }
P,i }y"vJ   }
l)JAkb   /******************bottom screen clear(自下清屏)********************/
_5OWU7} %?J4]NVeL2W{
  void dcls(int x1,int x2,int y1,int y2) K4hx:O ^1[6_`%b
  {
J F_W_E*R   int t,s,j,i;
^.jN+Q7i'hNj,n!L   t=s=(y1+y2)/2;
-T_"C%_Y   for(j=x2;j>x1;j--)}[[D7zi|/B _0Z
  for(i=y1;i<y2;i++){;BvP&WV"^Zt0H
  goto_xy(j,i);-Jg7h(}b%j3r
  putchar(' ');5N:?-i$OR8Q9r rux!S
  delay(10);
QEp5sh;k N$yW   }
)Q'Naw2uD!{sF0p   } I^npb3x,mf#s
  /******************设置光标子函数******************/
C#x+AY2|Wu!h
k8u_`9?'x)GfS O   void goto_xy(int x,int y)
"Sa#o8Q mx x   {
$qii(arqWY   union REGS r;1u;^5N]5Q4P2p ~^A8c
  r.h.ah=2;
TB'^$o:q ~P3PP.AT   r.h.dl=y;_q|a3IzFe$E
  r.h.dh=x;z?JeT:sB9g
  r.h.bh=0;
p2ru_t7mB]   int86(0x10,&r,&r);g,s/Dxnv
  }&_? hr gB
$\G1_J_9?&c2r
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
F1fhB"pja"h hu k?i-Gt'i
  void puta(void)
n I4TN!\|E   {
Ac JYz#mMK   int i,j;HL+b$V `nW
  for(i=0;i<24;i++){Vo2u&r(Rk
  for(j=0;j<79;j++){
J1sx+D)v'vT   goto_xy(i,j);2Q X Sz0]@
  printf("a");
7u7ZX,N~P4~`   }
QD/h2YUBp"t#a6q#c   }^1UE bpnw W\
  }

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


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