捌玖网络工作室's Archiver

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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
N,o$o/]$tT
)Btm _pa2Sf+F   并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
7Ar5omCh$j| nfB{4v.R
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
3ZM"j:H(u Z   子函数及演示程序:rDe&M[UP3v

0k(G!p}&i$K   #include<stdio.h>zzt:rIA~+x
  #include<dos.h>9t2|0umW]
  #include<conio.h>]?0E6D @ ur,xx

rro1~L X   void goto_xy(int x,int y);
4n \ ZE5Z@ g   void dcls(int x1,int x2,int y1,int y2);
Vm1\ KAzGIv   void bcls(int x1,int x2,int y1,int y2);t5tTza6T"]
  void kcls(int x1,int x2,int y1,int y2);5XB8o?1Nx }Tw
  void recls(int x1,int x2,int y1,int y2);
t(v$E(b"_+Qx   void zcls(int x1,int x2,int y1,int y2);'xd+P,|i'G8z6f.K&M&~i
  void puta(void);
.^-D|n U'an(vbw cVW"lD#b:S

F)D\&q&|%dM   /*--------------演示程序---------------------*/!bm6R ~n#z0@_M
  main();T c u kCPi?m
  {]zt;r#t
  puta();.lL+Coc0m-Og.N
  getch();
lwRQ@_a.V   dcls(0,4,0,79);]$a1A1dA
  getch();
WE%u7ZP cFEq |![   puta();rn/qQ\Q3A
  getch();_[,J6@2^9F{)u/N]
  bcls(0,25,0,79);
C2`[6b'Kt0_n"B J4X   getch();S:l]"~5i T a3S
  puta();
n"_%Z#kHk8n   getch();_7O%}$J.}f!x
  zcls(0,25,0,79);
FC,~0iW'rn   getch();iy @){~4e"@JPE9q/m
  } K*|q#~Pf-cz
  /*********center clear screen(中心清屏)***********/f|.}&w7Ql/q
  void zcls(int x1,int x2,int y1,int y2)
UV] `kc va   {
R3~ OV_s   int x00,y00,x0,y0,i,d;&x$K0y3Ka0_z Z_
  if((y2-y1)>(x2-x1)){
Z$Ef~Ce   d=(x2-x1)/2;
ucAp7B&D'l,]   x0=(x1+x2)/2;"aC#[9\3u X
  y0=y1+d;
S-m|w/G$vu   y00=y2-d;
8B V.}8\#uF%Zd [,[   for(i=0;i<(d+1);i++)VaV6kkM1lz?F
  recls((x0-i),(x00+i),(y0-i),(y00+i));yx2id)j(CW/m
  delay(10);4q3@zzg1t'j
  }
5w/k7B { yEt!U   else{$V$s"j9@y;l TJ
  d=(y2-y1)/2;
L8b Y2q;vw'T   y0=(y1+y2)/2;;S:T.]I8jI"G
  x0=x1+d;
^C$M+r7s0m0b|   x00=x2-d;
pH:?j'\5V   for(i=0;i<d+1;i++)
e8] Z G$a }1|T   recls(x0-i,x00+i,y0-i,y00+i);SZ-|6B'U
  delay(10);
d*_8_/].V   }(vo{?.j1L4v8S8d
  }
a wsR]!B
i+LQ uH   /************* clear rectangle side(矩形边清屏)***********************/"F @R7Y;~f:`

#c7U$hgE   void recls(int x1,int x2,int y1,int y2)f ~ x g)k Z9q(R
  {
&BH+hcdM6T0M   int i,j; J \BRe
  for(i=y1;i<y2;i++){M:p5T*X kRw
    goto_xy(x1,i);
GLj3tf ?*I   putchar(' ');
S6w&v[4G   goto_xy(x2,i);3hA xZm Z3? I'| v
  putchar(' ');c#CCNEz
  delay(10);
m t7p5c9`W_v   }
t2P7jdE   for(j=x1;j<x2;j++){2n!IfqpB m&l
  goto_xy(i,y1);
Mn&k#P$U({   putchar(' ');l^7~:WP:Lq;@C
  goto_xy(j,y2);
3Gl _h+XLV-I,I   putchar(' ');"Du/I!X3C R K
  delay(10);
K.h ^[.V M `   }U$NPS,Q
  }
'a$T&`c5J D   /******************open screen clear(开屏式清屏)*********************/
1J7Pu C7I)~ DCI'O}
  void kcls(int x1,int x2,int y1,int y2)x:cH,@[yXx
  {:vK _r-YM9Q,Bg7@
  int t,s,i,j;
G&q*Tq1K   t=s=(y1+y2)/2;
,p\ }#Eq9\6i   for(;t<=y2;t++,s--)
v-CxN~Y4Cf   for(j=x1;j<x2;j++){a0C3E G X"BT|3n
  goto_xy(j,t);Dv2x6c8O$?y$}(N!u
  putchar(' ');a Z(R)da"dy
  goto_xy(j,s);:~\&],^6|0Eh2h~
  putchar(' ');
!}*KY:_V`   delay(10);
HjE2`?2i6Y-nP   }
cF }{D S   }.Vr&Z:k]9Q o
  /*****************close screen clear*****闭幕式清屏*******************/
$@"yg(a*q8AS[$P
C(z:U/}f `*F   void bcls(int x1,int x2,int y1,int y2)
%\3D7[%N/[ GLb%R   {
6O3u FDD&B w!J)k T   int t,s,j;0Uwhl5]+S&{ty
  t=y1;
M6m nu`1WwZ p   s=y2;
C5ZY(]Q   for(t=y1;t<(y1+y2)/2;t++,s--)
y.Gn1f0O Z v   for(j=x1;j<x2;j++){{'}FPYs`^4O
  goto_xy(j,t);x4i2D-f [d;iH
  putchar(' ');
cJ._,s6Iw7gj/q   goto_xy(j,s);6?8D1Zt5SF
  putchar(' ');
Ri\-|^n   delay(10);
9_!B.r YZ}   }7Ck k;c9D@
  }
sz4D[1g_J8uC   /******************bottom screen clear(自下清屏)********************/ m0y-p(G]s*V/p]

["Y*B@@k$N   void dcls(int x1,int x2,int y1,int y2)mX3C5\K%EI
  {
_tR4n:I[)I   int t,s,j,i;
B?sv'l%K o+E   t=s=(y1+y2)/2;
3O @&l-YK*z?8l5re   for(j=x2;j>x1;j--)
,Qb|N~t5U   for(i=y1;i<y2;i++){~7mv n#V,}
  goto_xy(j,i);3kz4}{p
  putchar(' ');
J0Il'V @/T$["wS%B*R q   delay(10);
/n6i*y}0`I   }+M'@1tBg
  }
;d$jf^.u   /******************设置光标子函数******************/,P;E9O S:qC{%W/RT"}

1zH5M0F1Vd   void goto_xy(int x,int y)
D5zV%Cf%pE5v SU9pw   {,j_7}PS%K
  union REGS r;Z9a,Cnr`|n
  r.h.ah=2;G)Fv~MF~
  r.h.dl=y;
ms0J9uO.L2k3S   r.h.dh=x;A:E/PwB$zW
  r.h.bh=0;
|"O1AT1t2m!u   int86(0x10,&r,&r);
w/J ZD~Ei2E   }!t3lPsar~6}

.L kw"Ee5DM {   /**********************在屏幕上打出一连串的a字母用于演示程序******************/
z7~5W5aA c
3d/n,J#d0C   void puta(void)5l$@)t g x-s0OG!p1\
  {l0x s+A9F
  int i,j;
RK9WIq   for(i=0;i<24;i++){
i2^KG$|   for(j=0;j<79;j++){1oc9v4V)K
  goto_xy(i,j);
3?tQZB5{i~   printf("a");jQ6`z9F(|!nI(P+IZ[8W
  }
S5G2`6^h1c-@   }
1} k"]n5A   }

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


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