Board logo

标题: C语言艺术清屏 [打印本页]

作者: zw2004    时间: 2008-1-21 17:14     标题: C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,6 M- [6 Q* m4 j# R- I' e7 O1 d
6 y7 k/ o: c5 f+ x
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里& N) H! }0 q3 I  k+ h2 q
1 A5 `: ]# |: ~! w- C
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
  N6 _6 y1 C! p9 S- w  子函数及演示程序:
0 s. M1 J- {! ]" B
. w; b0 k+ c/ n/ V  #include<stdio.h>
9 }2 Q6 p+ l1 J2 m& D  #include<dos.h>. R) p, t" H0 ]' w' o9 J  M( {
  #include<conio.h>
8 {5 E' q) @9 a" d$ S) l; ~5 s3 s- D, N# V9 U/ K5 Z
  void goto_xy(int x,int y);
; s- R. g; j3 U/ `( N& A  void dcls(int x1,int x2,int y1,int y2);( V5 a, t: m* m5 H, P5 _
  void bcls(int x1,int x2,int y1,int y2);
% t9 r$ l& y! j+ K7 x& g+ j  void kcls(int x1,int x2,int y1,int y2);3 c. {, c  U( t$ V1 B( f
  void recls(int x1,int x2,int y1,int y2);, G* S, c7 M$ T  ?
  void zcls(int x1,int x2,int y1,int y2);
+ r9 K8 [4 b+ E3 ?  W6 k8 {8 X  void puta(void);
4 {6 |4 @/ I3 q! L/ I5 [9 D0 ^7 C/ O. v1 A1 u

  t3 p$ W3 y7 f) V; V* A% E  /*--------------演示程序---------------------*/* p# `* h, W( N8 j, G: K+ I# o$ b
  main()
$ C3 q0 P2 z( @4 `9 |) R/ E  {3 i" q" w3 Y* g1 H0 C$ k
  puta();
- l% P' e/ U( h, k: r* N/ N  getch();
5 P" v/ R8 g: C- S* W3 E3 T. W, c  dcls(0,4,0,79);
* z7 c7 `% w/ \# @- Q  getch();
& m3 w% c# f6 q. z9 J7 F  puta();( r6 ^. e8 u% O# j
  getch();
7 Q# K1 b6 L) l8 ?. W) _  bcls(0,25,0,79);
  N, G+ U  m& ~4 d. a+ O  getch();
; l: f0 R6 |. I( k5 ~8 i  puta();$ j' Q6 B, [4 }# r
  getch();. @" o* X+ g; K6 r
  zcls(0,25,0,79);
( o% p0 k/ ~4 J) \6 l/ [  getch();
% J2 T* `( s( ~  }! v' p- Q. ?5 k1 C3 b! S0 T
  /*********center clear screen(中心清屏)***********/
' Y# G2 x5 P0 U+ x  void zcls(int x1,int x2,int y1,int y2)
3 _  N4 z' n. z  {
+ T% a$ b  o: ]0 k* |2 T  int x00,y00,x0,y0,i,d;
& ?0 e: W; g* ~+ x8 Y$ @* Q: M  if((y2-y1)>(x2-x1)){" L4 V4 C/ d$ j# Z
  d=(x2-x1)/2;% E  W: D" u) R; h+ m. z0 r6 [/ D
  x0=(x1+x2)/2;
( H. Z+ X9 ^( S+ W& [  y0=y1+d;2 Q+ a% q& _. k0 |. R
  y00=y2-d;
7 b( o6 U9 U' J3 t$ V% f0 b  for(i=0;i<(d+1);i++)( P1 u: w7 b$ m  r
  recls((x0-i),(x00+i),(y0-i),(y00+i));3 G. ^( i, L0 _3 O( X& Q3 S! s
  delay(10);' v$ t) y  _. r: |
  }
) s8 \, z  D. `" T/ L2 C  else{+ p5 P' }9 L5 A
  d=(y2-y1)/2;8 e4 U4 G, U3 v
  y0=(y1+y2)/2;
1 y$ p7 v, @; g, n/ g' v  x0=x1+d;) ~! E" u/ k. M, I% n
  x00=x2-d;
5 y$ ^$ W# q  |: a! R4 L  for(i=0;i<d+1;i++)5 F9 x$ j3 b# T& Z! G; u+ e% M7 d
  recls(x0-i,x00+i,y0-i,y00+i);
) H9 ~8 g! X% T. I* Z6 Z  v  delay(10);& g' s' P$ Z$ I/ _4 e7 Q5 R" ~
  }
4 O$ _7 h3 ]) A2 \4 r" D  }4 `, h5 ~5 I0 b$ M" `
% ^" W: ^1 \) a* S  q. W
  /************* clear rectangle side(矩形边清屏)***********************/
$ V% g. [7 t* ~3 i
: z. g2 m) o3 ^. A2 H  void recls(int x1,int x2,int y1,int y2)8 }& `9 ]1 \; V- Q& l+ C
  {% U7 }$ H& I: \  z
  int i,j;
3 ~1 i# ?% l. G) x8 ~5 W  y5 k  for(i=y1;i<y2;i++){% Q) R4 f5 @+ X4 c; m' J2 s3 Z" x, `
    goto_xy(x1,i);" }6 M% @- `3 E9 N9 `
  putchar(' ');/ X$ z" G( a/ F
  goto_xy(x2,i);: G+ c$ b+ S/ ~' @2 M* X. d& U5 {) Y
  putchar(' ');
0 A# W$ b6 U8 I' m8 c  delay(10);
5 y  M. O# H, ~  }
+ X) M: t. t( o/ Q1 B; L  for(j=x1;j<x2;j++){+ j" k8 f" J9 ~0 J7 m
  goto_xy(i,y1);
" Y0 A$ w/ N/ F9 m  putchar(' ');8 T. c# [4 }  y: I% H
  goto_xy(j,y2);
" @; L: u9 x# q" K# ?. T/ z: L) q  putchar(' ');4 n. U2 M' M) O2 i, K, `
  delay(10);1 ^) f0 Q) I9 [, f7 z- W6 l' W
  }1 g2 Q9 R1 V9 H. A( i
  }, f. {; U( ?! G
  /******************open screen clear(开屏式清屏)*********************/5 [* |! V+ Z. U$ I, c( o( k+ d% e
* i7 v* C- a$ M$ D
  void kcls(int x1,int x2,int y1,int y2)2 g4 W% q' O1 j' t
  {
5 n4 _6 G+ u! N  l  int t,s,i,j;
. }6 ]7 l. q  e$ R  t=s=(y1+y2)/2;
  ]9 i) Z, A9 R8 \  for(;t<=y2;t++,s--)
  f: R/ l1 x  z) j/ s5 Y. U1 A  for(j=x1;j<x2;j++){; V/ `: B9 n) m: \
  goto_xy(j,t);
  Y7 g. ]; V8 |6 d$ K- b' U1 x2 x6 O  putchar(' ');
, h2 O( B0 g" c9 h4 e0 l  goto_xy(j,s);
# y+ x- J) ~6 R# l* u& k  putchar(' ');4 o8 ~9 Y+ V$ g3 C
  delay(10);
/ Z, s" G7 |4 h0 ^2 w5 t  f$ L  }
6 V9 R/ p1 S5 }; h  l$ _9 ~% R  }* Y. K0 a% c9 D. ^. O5 g, R# |
  /*****************close screen clear*****闭幕式清屏*******************/
" i& i" p: E7 F" e% R+ Q8 Z$ p) X) `% q2 w0 J3 h
  void bcls(int x1,int x2,int y1,int y2)
/ v  `7 U' L+ U$ V4 b  {; d9 }: D' X# F, \5 T# e. T* |: j( C
  int t,s,j;
% s, \. A: v; m* l# l  t=y1;( N; R0 C; |' [- B* N* }
  s=y2;
$ I2 u! P1 I$ w3 i  for(t=y1;t<(y1+y2)/2;t++,s--)% B7 D- `; k- H0 C' a! O+ G
  for(j=x1;j<x2;j++){/ u& {( ?/ N+ Z- t, T% p! j+ I4 e
  goto_xy(j,t);5 O1 b3 y% b! d. \1 u% h
  putchar(' ');7 d3 v% [; ?8 ?% h' ~7 _
  goto_xy(j,s);+ V  [, C6 ?& U$ Y& n
  putchar(' ');4 e/ T2 ^1 F2 V) d( ]
  delay(10);
% B; `# C, e9 R  }
; G! u6 ?; s) ^. Z  }
& R# N% W; U- Z7 V% ?* A0 G) q# H  /******************bottom screen clear(自下清屏)********************/5 o3 R. P: [( d' X+ I/ r6 s
, ~' X; Q5 f% D$ o  e. K) S
  void dcls(int x1,int x2,int y1,int y2)
3 J) R) {# N# n! ?  {
$ o+ p5 a2 P/ r' j  int t,s,j,i;
  t( x: z  |3 G- ~  t=s=(y1+y2)/2;/ Q/ Z+ l9 y9 y- d* Y  H- i3 g
  for(j=x2;j>x1;j--). J! g0 {& K! u( H, E' X4 o# t
  for(i=y1;i<y2;i++){
, S% C3 B8 j' ]. y& W5 }  goto_xy(j,i);) {+ J1 O% O% Q" Q
  putchar(' ');$ B  C5 g9 }0 Y; [4 h  g. q& P8 X6 c, R
  delay(10);
5 y; v! Z* _1 q' [: e- j  }
: |9 D* V6 B. x3 V7 g! @# |  }
* @4 Q% h* Q  n0 R+ _% e  /******************设置光标子函数******************/! b; z: R& C( s: U  `& H

1 ?% p0 Y0 z8 \- c' x  void goto_xy(int x,int y)9 p( [; w% q% r( Q5 S3 a
  {' v( f- g1 j) P! b0 l+ d
  union REGS r;: }& U" }* D6 w  z
  r.h.ah=2;
; P. H( M. m5 @7 Q. v9 X  T  r.h.dl=y;
7 t! R% w+ N: a. j" r* F" a  r.h.dh=x;+ V" W3 X. Y; y9 S
  r.h.bh=0;8 ~' Z* d8 p! h5 U9 ]2 c2 V7 @
  int86(0x10,&r,&r);
6 k5 Q1 p8 s2 W" U  }
* X" B) g' C* G6 l4 F0 Z1 C: [" ^/ G2 J
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/1 i0 p- [, c) ?5 G9 Q' w( P% e0 j
1 _8 z& K. l, z; u8 n( R* v
  void puta(void)
1 `) V- }' r) P: \$ v  {( I& _: B) C) q( x+ t' j( y
  int i,j;
) N) F$ T! i1 l  for(i=0;i<24;i++){$ k& s% j! }- a2 w4 u2 ]: H* N
  for(j=0;j<79;j++){
% t5 }/ w6 r  h" S8 m" h; _  goto_xy(i,j);
& k4 ?# N8 F2 N' K2 o  printf("a");
0 F  H- Y. E  P8 R( g- K! g" d  }
. D2 w& \' r# f) o7 s  }$ W) D) a- H6 _: V' o; D
  }




欢迎光临 捌玖网络工作室 (http://www.89w.org/) Powered by Discuz! 7.2