捌玖网络工作室's Archiver

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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,_i,oL5t.N
}9J WtiA
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里1g-p7r6n(oh
\?&S,Aw)l
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. (f6H}uM;doB!g}/w
  子函数及演示程序:f*Ud2?v9o}oK/q)|
$Ovo/o(ZK/f
  #include<stdio.h>+s1O,c Y!Wbm:f;R0k
  #include<dos.h>
,OXM"?6[4P\   #include<conio.h> q7TO| b7V.J)s[
M&x&ci9uih_
  void goto_xy(int x,int y);.HqwNAGK
  void dcls(int x1,int x2,int y1,int y2);
M$rm\2{0}   void bcls(int x1,int x2,int y1,int y2);
G&?8{K0u~0Z]'B%t   void kcls(int x1,int x2,int y1,int y2);{ U(E!{^b/U
  void recls(int x1,int x2,int y1,int y2);,P6[2m1e7gD6u5D
  void zcls(int x1,int x2,int y1,int y2);-VV1V,K6l8M
  void puta(void);
K YcZJ \h{6X z]/k0a

G?9m5^Y-I   /*--------------演示程序---------------------*/%h ksd%M?:z
  main()6]0WXZTf%D`g
  {#f*xpK s4] bs
  puta();
j_8O] ?/R;A-r$Q"A?   getch();:v'?,uXt4h&WC
  dcls(0,4,0,79);
6m2d5Sk2~WP%t,b-A1G+h   getch();}P^#h+zqc
  puta();
;V7o+Kw~]a{   getch();/w0X4{pNe-\-bC@,q
  bcls(0,25,0,79);Id } N I4X5`?#}
  getch();?)U`\X"n
  puta();{&T_%EE
  getch();!V&z D}1F |+Z
  zcls(0,25,0,79);;^)B7S+dP2ItB
  getch();
d.pRR)J%S   }1L6n-T ?mL9kD[2K
  /*********center clear screen(中心清屏)***********/5^1Y1Fg7]1gf
  void zcls(int x1,int x2,int y1,int y2)
Qx,VoA%O7l]   {
{rr%ftht}   int x00,y00,x0,y0,i,d;ss^B({ m4F0i
  if((y2-y1)>(x2-x1)){D Qm'Mtn
  d=(x2-x1)/2;
'n&YT!l;[(d _   x0=(x1+x2)/2;3T*Ro^m Jl+j"~g#q
  y0=y1+d;n(B^y8un;i
  y00=y2-d;iGw5a%vQV:z1jd!p
  for(i=0;i<(d+1);i++)
c,[,wTXI'y X   recls((x0-i),(x00+i),(y0-i),(y00+i)); wr6`2uW.h V$JyG^
  delay(10);!Zj Oc?a8YHv
  }
_VGe(z-U.cI:o   else{
,\NfI6X l8}4Bb   d=(y2-y1)/2;v)@&n]5T%d)RI
  y0=(y1+y2)/2;
BI;t|yI2u   x0=x1+d;
1m&|(?-d)ge-[ {q   x00=x2-d;
7wz*w2^g@0K   for(i=0;i<d+1;i++)
yE%L h7x"[6|   recls(x0-i,x00+i,y0-i,y00+i);7nCNw lhj
  delay(10);
Yb0{js$Hu   }
n%L&E gs5c%v   }
e3^Uev^:l x qd\9e,nZ
  /************* clear rectangle side(矩形边清屏)***********************/
;]8tJ7FF6E
?%p@(?}m   void recls(int x1,int x2,int y1,int y2)[4A }1H?
  {Xq8f6U0m8{,R;y*nm
  int i,j;
)TmJ7N y w   for(i=y1;i<y2;i++){.{7o [-D~id w'O6d`5mM6^
    goto_xy(x1,i);
(N[q2Iv:m&Wc }5tFm   putchar(' ');2b-KG!f6~l
  goto_xy(x2,i);
umMD(q0bjB-D   putchar(' ');
2{eA D|)z)c6~   delay(10);rJU;?d8^f
  }
~cz$t)o(Ky:X   for(j=x1;j<x2;j++){bBxc[6n
  goto_xy(i,y1);
9e `#ohmT   putchar(' ');uQ~]y y!g
  goto_xy(j,y2);
~W%g `o_xQ Q5R   putchar(' ');
$k{Z6s`t%j   delay(10);
k[q8nbE0n   }
w0Z6S)j \:lf3ig   }jYe)I$d#TE
  /******************open screen clear(开屏式清屏)*********************/Tj(e0o'k$xV
)y5@jUC VYK
  void kcls(int x1,int x2,int y1,int y2)%qX t7X)r4h
  {
@zL3~Mf5C%q_   int t,s,i,j;c'T \'q;S/F5X9X
  t=s=(y1+y2)/2;%^Dy4x2B-@,U]B
  for(;t<=y2;t++,s--)
K`s$F"o1j@AD(r~WiD   for(j=x1;j<x2;j++){ggD?:i*~
  goto_xy(j,t);Z2tT"hZfx
  putchar(' ');
"Xx Oq3\E4@   goto_xy(j,s);
9|)G_#m:Yw   putchar(' ');
+__,Ah8F U   delay(10); K3Ex p(Q)]l
  }K/o'K:y1L{r
  }e-J:{#Y Q'fv
  /*****************close screen clear*****闭幕式清屏*******************/
hl%sqzR:q} !x)B9Ds0S{+V6F
  void bcls(int x1,int x2,int y1,int y2)
&W2O"m'R\7g9@*T   {
$Y4d5hL%tA c~]   int t,s,j;(z5JF5`1y^q#T \
  t=y1;| l!~J-P ST;V
  s=y2;
vq|%AD.\n1r   for(t=y1;t<(y1+y2)/2;t++,s--)uElZjO7J
  for(j=x1;j<x2;j++){
y/o;B#WXeQN   goto_xy(j,t);
{y8Izj%{h   putchar(' ');zQi }^S]*w
  goto_xy(j,s);3Oy&s1Zej F I
  putchar(' ');8o5u0vl;N3C BU'i8sd4[.bl
  delay(10);x9?e"o.?@"F"@M-m
  }4]8EQeG)B
  }
"g ] y7c Jgz   /******************bottom screen clear(自下清屏)********************/
RE9Q(u[8qjv#l^;y
MOmMn)@   void dcls(int x1,int x2,int y1,int y2)
m7w!a0_2@   {
!U ]s(l0peI`   int t,s,j,i;
ZD-j1R#c)E   t=s=(y1+y2)/2;_;o _+Z w2|U-D
  for(j=x2;j>x1;j--)z9z Z8P^S
  for(i=y1;i<y2;i++){PZzT9t@*C
  goto_xy(j,i);
(M;Kw&X6w"Z,~4P9c   putchar(' ');
_#k%O7j;c   delay(10);
n CY&n*|5p;MB   }ll@"[E0P
  }
8M]~IMxv"}2`   /******************设置光标子函数******************/;Gk$O9He_3D{

g ^7B!x8^z   void goto_xy(int x,int y)zfM%w,{ f
  {
/D-X2t8~4SZn   union REGS r;
J5v}'w9eAr   r.h.ah=2;(rrz4p4e\ I-~E
  r.h.dl=y;v dz{HXn L
  r.h.dh=x;
2M l3nO5m];N   r.h.bh=0;
[,`8X:S!KX   int86(0x10,&r,&r);(r s K cdw
  }
0d;I-u W*n0PI zH2C /WpZEg
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/+G bkR|x P)k
}?Prbl7D
  void puta(void)
mM!T9[9t{ q   {7BZ.F+Uh0D5[mq
  int i,j; i| kP| ^
  for(i=0;i<24;i++){?:pa](FB)U(a
  for(j=0;j<79;j++){6D-[9F:Z#`
  goto_xy(i,j);
9g E.L0P Ux f   printf("a");Z}5w,MS i;hVl5P+\
  }
O:pPM7W |G   }
;z~9tXD TW;J3Rt   }

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


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