返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
; n! c. t5 ]1 A  K+ d) A5 Q2 P* N. a/ ]
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
3 v1 Z- t, s  @6 s$ i! M$ t  N
, q0 m5 t7 B9 k3 R  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
1 C* R0 t2 _" _9 b9 ^* [  子函数及演示程序:
) o% V  x- N3 e" R: w
3 B8 ^# d# a5 y  #include<stdio.h>
, m0 E  O4 Y  J4 H5 N8 u  #include<dos.h>
& N2 s, u) v6 _/ D  m4 l  #include<conio.h>
8 f# i# O2 T$ {. W" a0 C5 r
2 J7 D$ I5 @& F7 ?" ?+ M  void goto_xy(int x,int y);
3 h! j6 m3 k3 I0 ^& ]& i  void dcls(int x1,int x2,int y1,int y2);# v: H" H9 c" J- H( r
  void bcls(int x1,int x2,int y1,int y2);
2 W5 ~& h6 |3 y" u  void kcls(int x1,int x2,int y1,int y2);
# B8 C$ ?- ~, d/ W4 f  void recls(int x1,int x2,int y1,int y2);9 i) W. r' f$ w
  void zcls(int x1,int x2,int y1,int y2);
# n6 W+ g0 J9 h+ s  void puta(void);
& N  v( ~2 s, |: I& V
$ H& L; R4 c+ l. P. X& Q% S: K( q' Z! ~- _
  /*--------------演示程序---------------------*/
, ~$ v$ [* u% {$ C! R  main()" O% ?. u2 \' e+ @+ E! M+ P  l1 `
  {
3 ?" S. z, s' H0 E- A  puta();
. A5 |; q) t: a, b, D8 m/ v  getch();. d! n6 d+ Q0 p- V
  dcls(0,4,0,79);
0 c0 {0 a' Y2 z$ c8 u. ^  getch();
4 W* w& C' C9 T% o1 J% j  puta();6 Y) T! ?/ b" v! k6 r' k- E6 Y
  getch();$ o, l: k1 g  f# X) ?6 t, N; M/ o
  bcls(0,25,0,79);
- A# X: }% S, u1 F& X# {  getch();
5 Q) B! r5 O+ `1 o  puta();
# l7 U9 Y$ p4 h# N( s  getch();
6 z0 E9 B* `" y5 R' L0 w0 i/ \/ M  zcls(0,25,0,79);! X9 b0 e% {! j, Y+ N( }
  getch();
) f8 L6 C- A% H, D* P4 Z7 e& C  j7 I  }
" w! J" g" g, s7 G  /*********center clear screen(中心清屏)***********/
0 r! n2 Q) `, F9 ~  |8 f+ }  void zcls(int x1,int x2,int y1,int y2)
  ?! l; [) h+ `) c) @8 |8 |  {
/ d& t6 J; E1 k2 w, }; ^; `% N  int x00,y00,x0,y0,i,d;: P, H9 c3 `, b# y% h7 q
  if((y2-y1)>(x2-x1)){
6 h7 `% f( M* q. f* R  d=(x2-x1)/2;. ~6 T- P3 y6 n
  x0=(x1+x2)/2;' P/ g3 N+ ]8 O
  y0=y1+d;
7 f. q4 S3 y( i/ o6 s/ V' u! |  y00=y2-d;7 I. t  S2 {# m4 T0 [$ x$ X
  for(i=0;i<(d+1);i++)
" |" G! Q9 r! i  recls((x0-i),(x00+i),(y0-i),(y00+i));
& Q3 _8 e3 ~% j$ z7 \1 o/ ]  delay(10);2 W; Q+ y) d: X0 @" U
  }
9 E% Q3 L6 ^5 E1 f+ c+ e9 [  else{
7 n& c' y, i- z2 W7 h  d=(y2-y1)/2;: C, z( x! k. m' c. B
  y0=(y1+y2)/2;
7 a6 u! k6 K, ?3 u9 m4 a* r; z  x0=x1+d;
5 {, A$ w% ?7 v) |; }& T/ J) [; t  x00=x2-d;( M9 M: I& v% y: m; o5 c4 a+ g
  for(i=0;i<d+1;i++)
  X: {& |) c5 P; K7 r3 z$ \  recls(x0-i,x00+i,y0-i,y00+i);9 n5 _3 `, @- g* [! N& p
  delay(10);
6 U3 U5 \. [5 J4 f' u8 G  }
# m. v7 V: v, h1 i( |+ L  }/ K9 ]) s5 p: M

; U  p1 e# D! K0 `* e  /************* clear rectangle side(矩形边清屏)***********************/2 h& D) D! S6 b1 j7 X5 S

; F* k9 P( h) X$ f! H' j  void recls(int x1,int x2,int y1,int y2)9 w$ ]: n- L; I3 q- b/ I& r
  {
) ]$ j% O( e! u" `  int i,j;
3 R: W4 a, \4 m1 a6 l6 }- a( N  for(i=y1;i<y2;i++){
/ X) L3 _$ {' x+ s# D1 `6 Q; a6 H* `3 a    goto_xy(x1,i);
) c; Y8 D2 e% S( E* _. x  putchar(' ');5 w* k9 [+ M6 U
  goto_xy(x2,i);
# \" K& S$ Y5 ?. U0 }& B  putchar(' ');
% Z  N  {5 `/ l* s  delay(10);( v1 m) G! S; b; s: t) K
  }% |/ Y4 M- ]% ~- `+ I9 f
  for(j=x1;j<x2;j++){0 |/ ?% I3 [& }8 K9 G( k: B
  goto_xy(i,y1);2 d5 \# d$ L3 q- G1 v6 n
  putchar(' ');
2 A3 `9 V" G8 C( \4 G  goto_xy(j,y2);
5 Q  ~5 L9 |  I% V6 e* K  putchar(' ');4 v. x  |! O. h  E5 O: Q* v
  delay(10);
" l0 E" \6 P$ X3 _. u9 E  }9 L& @/ ]! K+ m* M
  }
9 R& G) Z) ]7 \, C: H3 m2 `  /******************open screen clear(开屏式清屏)*********************/
/ ^- F0 y7 S* }7 g! z
3 n% I$ x, \! u  void kcls(int x1,int x2,int y1,int y2)( [) D% o6 u8 I# n
  {# S, w" w0 j8 c! k# d
  int t,s,i,j;
  g' ?- b0 \3 L5 }1 N  k  t=s=(y1+y2)/2;; }: H9 g1 X& k  d. A9 O9 z% Z* ~* Q( ~
  for(;t<=y2;t++,s--)( [4 T7 {" }- y; `
  for(j=x1;j<x2;j++){* N) P9 f: \6 z
  goto_xy(j,t);
, @# h* d. j: f5 m0 E3 K5 }9 b4 j  putchar(' ');
8 k- Y, n5 p3 p  goto_xy(j,s);
: _% G) ^( @- G+ c& N  putchar(' ');8 r2 k8 l8 H' z5 C
  delay(10);  ?4 m) r4 q0 _8 Q9 N* K- b* m7 E
  }
) X2 h' E9 k- B% d  }& Q, P8 r$ p3 u" X+ n% a$ n' S% f
  /*****************close screen clear*****闭幕式清屏*******************/
: I6 D( _( |8 Z4 Z$ [3 g+ I* \4 K
  void bcls(int x1,int x2,int y1,int y2)
* f; j# w0 M/ P' t  {
/ h4 O/ _' G  [) p  int t,s,j;+ n9 A# y; A6 ~7 E4 r% O
  t=y1;
6 i: c3 x) k9 U* X. d! r5 Y4 N0 V  s=y2;# O% ]  d: v/ k$ b4 ~3 \# h. g
  for(t=y1;t<(y1+y2)/2;t++,s--)1 F( u9 L( L' L
  for(j=x1;j<x2;j++){
) C$ A, I8 Z7 q2 }' t& o0 I& n1 t  goto_xy(j,t);0 L$ C0 h; R& E4 b, `; W
  putchar(' ');
! u& @  h5 W; d. Q8 o  goto_xy(j,s);
! w) A) f; M6 Q5 e8 B+ A  putchar(' ');* M5 o8 L# v2 |* E! c* r+ z/ y
  delay(10);
1 n( b( k2 P1 O8 b6 j8 x  }5 u' E9 \* r3 X. T8 k
  }+ b- v1 w3 \  O& N) @- @  ~/ q0 U
  /******************bottom screen clear(自下清屏)********************/" C8 \; T2 d' C
4 ~3 ~2 z- @: ^& R- V4 ?
  void dcls(int x1,int x2,int y1,int y2)
' k. b- a2 d( L; T$ F  {9 h9 P/ e. Q+ W' ~; v) l
  int t,s,j,i;% [# k7 L2 G1 V/ t1 L0 G
  t=s=(y1+y2)/2;
& b0 {8 M* G( l6 ?, H. I3 W/ O' M: N  for(j=x2;j>x1;j--)
6 M2 b. G/ Y" d1 }  for(i=y1;i<y2;i++){% W! ^2 f( n' |( X% {
  goto_xy(j,i);4 y0 ^2 T: N6 a/ `* x5 Q! d8 O! A
  putchar(' ');" C0 g' u4 ]# e: C$ L9 K: r
  delay(10);
+ _3 Z% O5 @% Q4 Q  }
* r7 D/ B. [6 r0 v4 Q  }) ?7 N0 O. Q6 F- O
  /******************设置光标子函数******************/6 A% e- }. F9 z! i
: \7 B) p( a& p7 }
  void goto_xy(int x,int y)1 S) \  ?! g+ N0 l3 e! r  @
  {7 K1 a4 T2 O! q2 s: t
  union REGS r;
9 }3 Q% T' u5 [  r.h.ah=2;
  w* t1 ]& T# d9 x  r.h.dl=y;. p" x+ O( {8 f9 F( v0 n5 w
  r.h.dh=x;( O) s4 U" v: c6 [# q
  r.h.bh=0;
+ h5 n9 T! [' G7 r9 S  int86(0x10,&r,&r);1 [+ Y0 z! `. ]  Q
  }
+ E0 Q# X) e  b( @& z1 m3 ~& r* j& n- N$ X$ h; X% y1 }
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
7 j( W% ]  p  U! k9 ]( _/ p' G/ ]' _5 c7 s5 Z7 U' G; ]
  void puta(void); P# m. U) g! w9 A7 A6 Z
  {+ m( Z, x/ p! l; X
  int i,j;
# ^+ f- r5 o2 u( v0 ?  for(i=0;i<24;i++){
9 k* j: Q: T# q8 P( G' W& K  for(j=0;j<79;j++){
$ G% @6 L: t( e7 u8 w! r9 X  goto_xy(i,j);0 R- `1 D5 c/ X* S8 M& p7 G
  printf("a");' \# I1 r$ C" a. R' s" U- \4 i/ H
  }
) c/ v. Z- V5 I2 |% W  }; B- e' `* v3 D5 \) Q+ m
  }

返回列表
【捌玖网络】已经运行: