捌玖网络工作室's Archiver

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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
;w/sCH(q 8Eh!JJp0~3ck4Tk
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
v{!o|i8C
$XZ{;r3s$JS w@3JAJ!w   用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. H+m._{|so{
  子函数及演示程序:
2xU#t4AS "Ga'vH7w
  #include<stdio.h>
w*r.y2K,\P*Ck Ql   #include<dos.h>
-uwW3e8R*T'h   #include<conio.h>5iW+Y@9teS

a;h~%G-c2Q._5Ff   void goto_xy(int x,int y); @-~O)Vs~bUW!r
  void dcls(int x1,int x2,int y1,int y2);
"U:U9^f\B\y   void bcls(int x1,int x2,int y1,int y2);
7lnD V&V6i   void kcls(int x1,int x2,int y1,int y2);V f6T Z4c(Y&H`3g6d
  void recls(int x1,int x2,int y1,int y2);
W,B,ut1^A   void zcls(int x1,int x2,int y1,int y2);
PF5O Ts0C   void puta(void);}ZI`}Kr

`0lgc a[ A
G4h(? h@   /*--------------演示程序---------------------*/hD#I5u tn[L
  main()
5P"b:|b$k9Xm7uZ   {|-il Z_"b
  puta();"w9KH(]y'mC%K
  getch();e ?+]"mC/F A
  dcls(0,4,0,79);r2W%f4s,G1lr
  getch();
FA @#V1c   puta();
2@e2T$E:II5x   getch();Db ~v4d
  bcls(0,25,0,79);gb%rK%s![!E
  getch();%XlOBL%a$s
  puta();
~,W7n Pn3F:~   getch(); Hj:nBi \ nq'EeI
  zcls(0,25,0,79);!r.nP;F.H c%m
  getch();8Dz8D"@.yL
  }'K M4];[:\lhD
  /*********center clear screen(中心清屏)***********/
Qt:?2F-{Q   void zcls(int x1,int x2,int y1,int y2)[#C ~V!s#w1UAt
  {
J%JR+L^;g.f&|%VQ   int x00,y00,x0,y0,i,d;
(pn8RyJX[ Xq   if((y2-y1)>(x2-x1)){2X J'j,~mF`Am
  d=(x2-x1)/2;
~:Y`^ B4z mOgc   x0=(x1+x2)/2;#Q1eov_$Rad2tb"\
  y0=y1+d;&[nzK _#X
  y00=y2-d;
!Pcw{ qrd` d   for(i=0;i<(d+1);i++)tAC:Tw+XOu
  recls((x0-i),(x00+i),(y0-i),(y00+i));
2cSU.L?GTJ8S   delay(10);qML#RY7inx5x
  }l%X:Y0T aA"[X~;z
  else{[` M7Y.X
  d=(y2-y1)/2;
;U~$KNue c)]   y0=(y1+y2)/2;
Dj,e8YG2C D.|I   x0=x1+d;
2sSm4[.Q8P%r)_   x00=x2-d;
n3fK KN6cIw   for(i=0;i<d+1;i++)
F3V,e8P&K%GR6HO"o   recls(x0-i,x00+i,y0-i,y00+i);
0g~&z/i(kX5c   delay(10);
}a7O%pA'HO   }[#@.H:Q'C(@X`p
  }
!YV {6y] Q;c0F
gmQm,z0YK   /************* clear rectangle side(矩形边清屏)***********************/olS:ktm"vJCqB)c

b%m1m4_ v,YYh.h5M   void recls(int x1,int x2,int y1,int y2)
"zB7TwD b"o   {
?H:Z9sFM Z   int i,j; Q/ds` o#X;r;O Bb6p
  for(i=y1;i<y2;i++){!r1_1V.Z0_
    goto_xy(x1,i);;@ }FU2fG doH
  putchar(' ');
a5?.~R6S6l   goto_xy(x2,i);
g"Kn)~(VMqC4a   putchar(' ');
2s'K0CP;nY!Vh5Y'~   delay(10);2kw9^)A+K'zhBa1y
  }4z6@q oB c4^e
  for(j=x1;j<x2;j++){
S+P9aPn   goto_xy(i,y1);
.Z }7o's5T2D@/F   putchar(' ');,G"_JZ2]3u"`
  goto_xy(j,y2);Eqf6_4m x??TX
  putchar(' ');
tIk [4rm   delay(10);
qic] ZY8[niQ   }?k8@,pB!Gc
  }
9g$SDc&U!mI%X'f   /******************open screen clear(开屏式清屏)*********************/
s:q?O$Qi
jqqrO'LMg#v   void kcls(int x1,int x2,int y1,int y2)
2tB~3F}6F8s   {
6_II5n5p4b   int t,s,i,j;
(jM;T7t"s(f!D   t=s=(y1+y2)/2;
tz8]yk4i3F   for(;t<=y2;t++,s--)
0sY8Q7Z"bN   for(j=x1;j<x2;j++){&r+G$BL-j$Zl7l'Y
  goto_xy(j,t);
N"Nj7{Kn:A)h3S   putchar(' ');&@L]q3B?wily;v
  goto_xy(j,s);
OH;wr(y,y&F   putchar(' ');XMEFd N[ K
  delay(10);
Wf mfy Ry   }
CBM-B~   }3hv#df/Dro6Q q^
  /*****************close screen clear*****闭幕式清屏*******************/
"J)py$]w|Y |bB v6_0Z
  void bcls(int x1,int x2,int y1,int y2)
E6uIG-I `   {
OXE:g_m   int t,s,j;`Nd2S*J5S*S.`
  t=y1;i N0x#E j I}8l
  s=y2;
$BX,I'@D PW   for(t=y1;t<(y1+y2)/2;t++,s--)(Car,n}ws
  for(j=x1;j<x2;j++){"C!w)D#[j;YVg3V`
  goto_xy(j,t);
E*Dz.u?LS   putchar(' ');
z-Q$P'UZy-O   goto_xy(j,s);L9a:jd-zN
  putchar(' ');!A-zh$[/H0v
  delay(10);
/M1Z.{%xE   }
(~sn gB$_-u   }fl U(ZX!H.E5j
  /******************bottom screen clear(自下清屏)********************/#u4\ L*Ov

3t5MGY(MJ2|P   void dcls(int x1,int x2,int y1,int y2)*v~{U;`;S(r
  {
wo }(Id   int t,s,j,i;f.C9`-M~,u dq&Bw
  t=s=(y1+y2)/2;
S6T/Af Ja4h!GE5V   for(j=x2;j>x1;j--)n2cVN8N,O
  for(i=y1;i<y2;i++){j?C_&GG!Dk
  goto_xy(j,i);
c Vu_1\B2g3{   putchar(' ');
e hy5q+H F#g+][   delay(10);
DL$f%y^   }n%Z2\1L0iO s
  }Md7o] F_
  /******************设置光标子函数******************/
'P&y \3d xy \qJ &Ghc-j)wU+JA1I#p t
  void goto_xy(int x,int y)b4a*R ^8z
  {
R Ol(R1u   union REGS r;2m#P"e'j V
  r.h.ah=2;5U_"o3Mn9b
  r.h.dl=y;x$ng`rB*b
  r.h.dh=x;*r VHLDC
  r.h.bh=0;uj8V'r.Z1?Wf9?
  int86(0x10,&r,&r);+D\#z@s9^
  }
$m['A}v!m w};iv&[l7m
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
%^A%k ~.h uW4km)H5Hu%P/x
  void puta(void)
Fl+ag1b   { Q R1M,J&cG
  int i,j;
)xfz]4e{rX1v8R   for(i=0;i<24;i++){R \{{.uB"d {%E'v[(N
  for(j=0;j<79;j++){4ar1W)s A zi f%Lj
  goto_xy(i,j);
Hd wO+T   printf("a");:r k,Gt.V.h,E9_
  }5dN{8_j$O S:jxN @ _$o
  }
$X1lG$t(}!QJ*i   }

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


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