捌玖网络工作室's Archiver

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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
,S d,N0L k"g6j
6@%lI8o;C   并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里"_ m H'`)peE f

LO TE"O@Hu&bN   用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
poY8G Es0F0?n5i   子函数及演示程序:
zDH {p)S)^
B;P,n;XY]@U   #include<stdio.h>
Mh5TT7z/k   #include<dos.h>b@$E/K _6i
  #include<conio.h> qsL0L5u

r1J8Sv/~   void goto_xy(int x,int y);
3i+SN c|2iX   void dcls(int x1,int x2,int y1,int y2);
d0?NL:fF7^!j   void bcls(int x1,int x2,int y1,int y2);#y a8E*LUJB'Zt
  void kcls(int x1,int x2,int y1,int y2);
(q&m"f5JoXN)U [   void recls(int x1,int x2,int y1,int y2);
| JD1EO+p0I#m f   void zcls(int x1,int x2,int y1,int y2);
2x4ok7o$E2o L   void puta(void);
qm.z"K(]d
,c#N!H6y)\hl.vQ
tkA&?.\ GZ   /*--------------演示程序---------------------*/2he,w^I
  main()H2Zx+G&s:M/p,o*i
  {\5_|%P(ykT
  puta();c4go'B@yr
  getch();
Vd Bd x"Vj   dcls(0,4,0,79);hd2jvCu-kb:j"^
  getch();@Y| M8?2m
  puta();
\3sZ&^C#o   getch();!]3F7@,X(L$q)c f
  bcls(0,25,0,79);
gZ2b@q+y;Y   getch();Hkl~v/_(A
  puta();&bm$K-Gy!zH
  getch();
~,A'[$S.T   zcls(0,25,0,79);
\B9ofciNDVt   getch();s%ob9Q9RY]YK`
  }
t QCp5GW'Z3e   /*********center clear screen(中心清屏)***********/
1g4OZU;{3b5_Q   void zcls(int x1,int x2,int y1,int y2)
m*}3i$c cB   {8}8R#a$o,j&?j3w){
  int x00,y00,x0,y0,i,d;
ref EK,{ME;E   if((y2-y1)>(x2-x1)){-k~.BzN!r
  d=(x2-x1)/2;!l6S"S[Q1@S:nR3f~
  x0=(x1+x2)/2;Y2y,a;G"|+HE/C
  y0=y1+d;B\k!S.d/\
  y00=y2-d;]2Hp!]K
  for(i=0;i<(d+1);i++)k6Vg)zI2H
  recls((x0-i),(x00+i),(y0-i),(y00+i));8H] ?o9{ ]u'K!i
  delay(10); C;@It,]/u
  }&r:R ^.C*~+F
  else{B,T}WKli
  d=(y2-y1)/2;
[u.cj(W2DxAG#?V&]B   y0=(y1+y2)/2;:X8rh)P5|5]#g
  x0=x1+d;!~'Gd.Q!Yl x:Gd`
  x00=x2-d;P;~,Jf2s)h
  for(i=0;i<d+1;i++){7sP*]*Govd)G
  recls(x0-i,x00+i,y0-i,y00+i);(`#KpD"zx:u4gx
  delay(10);
Y-{ UN"lZ   }
cN1di3`[   }1Tooue)df
6@8D;Hr'ucD0EJ
  /************* clear rectangle side(矩形边清屏)***********************/#J~%MDm$O ~ Ud:X
Ve,X(~NPJ Si
  void recls(int x1,int x2,int y1,int y2)
"u@%Idm-`T7eyH%W   {Vg&c}2a W
  int i,j;n a B {%s
  for(i=y1;i<y2;i++){
H h%v6GV3KN     goto_xy(x1,i);
h%ys-l~i   putchar(' ');4UC@V%U;J&Q{
  goto_xy(x2,i);~:H${[5iME
  putchar(' ');V"hY?2`RvEi
  delay(10);&rO II5Dm1H!{ Y
  }
#\ IX0R"Xl Yw&n   for(j=x1;j<x2;j++){3h/XQ+WN
  goto_xy(i,y1);/m$^usD e
  putchar(' ');cS d9f [!s
  goto_xy(j,y2);8KzY4k+w2G C,F)u
  putchar(' ');
ae+n oG/H/b j   delay(10);
1T-UnSc Tb   }Q8jN*_L J
  }
Qmd7Y3vp"q*Nzu   /******************open screen clear(开屏式清屏)*********************/
,v Z[j ?6fj O$T#i,N)I4WF)u
  void kcls(int x1,int x2,int y1,int y2)
BeU}R   {e qi:[%Ig%ZA4e
  int t,s,i,j;Q lQ'em v3c^;}V
  t=s=(y1+y2)/2; q'c,Tin6}1T
  for(;t<=y2;t++,s--)
$HmjQ3O%V1B aZq   for(j=x1;j<x2;j++){
a/J4L!];~B-E*F"F*_   goto_xy(j,t);D]s:Xb(q9V`
  putchar(' ');x [{ C-[ P4E
  goto_xy(j,s);
f$JNw8cc3Ot   putchar(' ');
,dLvz ~Ug2h\   delay(10);;r4}k![,O7wR(W
  }
EJ0N%fH$wjs'Z   }?D^A4[,r? L C
  /*****************close screen clear*****闭幕式清屏*******************/
;^&^VeE cF IJC
  void bcls(int x1,int x2,int y1,int y2)
O^4[(J5jF P   {
2uUs)o%Ltz(@!lcUp   int t,s,j;
{ t'`+B,R ^J   t=y1;
(ikFhV`O A   s=y2;!\\b+f%Hp-W
  for(t=y1;t<(y1+y2)/2;t++,s--)'N)X/l G#z{` FB
  for(j=x1;j<x2;j++){
(\Sx(I/N3v I_{   goto_xy(j,t);p{ X'i$k
  putchar(' ');%_i a5c|Y"S
  goto_xy(j,s);
'M0K f2d'c'xS   putchar(' ');VW:b@MB
  delay(10);7Xi]'I1@Q(n
  }
yZB9NL8YC6F r   }2?[lcJ Et!|
  /******************bottom screen clear(自下清屏)********************/S d z#[0C A.[
/nz Xf cZX%s&utq\
  void dcls(int x1,int x2,int y1,int y2)
T$mhf#S#bf@*I   {-}+}h2H9Xh)[Yw:`
  int t,s,j,i;X jW\`
  t=s=(y1+y2)/2;4Dx0i5w_'Nkc#N)~
  for(j=x2;j>x1;j--)
7K+O3r5ddb~6A   for(i=y1;i<y2;i++){S1@R8y9E nX5C
  goto_xy(j,i);;u*G:uQ4K7a'T,if
  putchar(' ');
h cQ)h|XV6HE!r   delay(10);
;?+A`O(w#rr&?9U&B   }1nX!v\KG#fd
  }
f"Iwe L+{7g/O   /******************设置光标子函数******************/
hY wIHl8X ` &d-o2s4pL&b} m;FX
  void goto_xy(int x,int y)
(nB:\;E4@l;JCC   { k3t'Z UMJ7G9y
  union REGS r;
F:A*?,Uy0w2N d7P1c   r.h.ah=2;j+KDPT/B7aB
  r.h.dl=y;
ko#uje   r.h.dh=x;v9z&M2cxr
  r.h.bh=0;
IZ y6ZL)U/V|g   int86(0x10,&r,&r);~"BWZw \ u g5wpS%g
  }
5uYm9|8R .RyNOFt p
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/8g{)v+T;i.R[
d NdjW
  void puta(void) t0fZ gF;L*Com+r
  {
%[z;X)dD   int i,j;"ykZ4z8nxS
  for(i=0;i<24;i++){
tl^g)wU   for(j=0;j<79;j++){K mA${7P8r@2a
  goto_xy(i,j);
mZ}7I"g*t:La   printf("a");
n1vh h-PM"M jNp ^   }
"[Sqb+be;b   }
J,zp'H bby@   }

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


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