Board logo

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

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

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
- a- D- z6 x6 V* [4 W* v9 V
, y5 J' h; Z6 X, v; b  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里9 c2 t% R- E* _4 I; u8 Q# Z7 H3 p4 G

6 ~1 P, q& a( d. S: z% b* `" U% ^  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
6 l5 p$ W0 Q: _) F. a  子函数及演示程序:& q& \) M# B! ?; X2 ]& N! P. @
( K3 k7 q4 P( i/ s2 x! ^" x
  #include<stdio.h>
# h8 \# X1 B7 o! D; M. q  #include<dos.h>1 J1 ~$ _: I/ ]
  #include<conio.h>/ c6 b! f7 A6 n/ d" Y: d  C+ H
) I& ]& |" E. _0 A  e
  void goto_xy(int x,int y);8 C8 j3 Q* h7 q' P. l/ K
  void dcls(int x1,int x2,int y1,int y2);
" S. [2 _, F& z/ N" L7 [2 ?  void bcls(int x1,int x2,int y1,int y2);
4 O6 ?$ K) P! @3 `# p3 a  void kcls(int x1,int x2,int y1,int y2);. M; z/ M& }. W) F
  void recls(int x1,int x2,int y1,int y2);
! g* Q, [4 q' g/ E) I  void zcls(int x1,int x2,int y1,int y2);
* W) v, B( }" o" I; r, C  void puta(void);
3 R8 Q8 C5 m! O( I$ j- N
: B  _, u) a4 V" i. `, q
' [* k: N# l$ W+ l  t) ^) D  /*--------------演示程序---------------------*/$ [  G: U. _1 j1 s
  main()
6 \9 v; B/ |; L  {
, |8 L/ m8 S( |+ w  puta();  X0 a: r2 @2 Z/ m0 ?+ z; x6 b% Y
  getch();3 q" D7 Q: l6 u$ Z
  dcls(0,4,0,79);
- e) K2 h! u2 Z( k, p2 v  getch();
. v( C) |+ |9 c  _) \3 o5 z9 U* @  puta();0 U1 q" W* u. {/ |9 M) a
  getch();: t* w, v" X5 D3 z  y
  bcls(0,25,0,79);
" x. X9 U6 M7 U3 N) |0 y  getch();
# u. k& N) J; D. Q9 M3 b8 h9 e4 l  puta();3 F, s' l' z* e4 g& E
  getch();
) y2 G5 ~2 y! i# Z  zcls(0,25,0,79);  q9 ~6 H5 O4 ]$ y4 R: \0 x& X
  getch();( m. f4 }1 Q: S* X
  }- J  l5 |7 P& N
  /*********center clear screen(中心清屏)***********/
: W7 x8 _" [5 a  void zcls(int x1,int x2,int y1,int y2)
, @- W. F2 n4 m7 Y  {' j: ]2 f1 L! M; u' l
  int x00,y00,x0,y0,i,d;* F0 U9 e" [( a5 l
  if((y2-y1)>(x2-x1)){
9 M7 G9 }& ?& b) D4 A  d=(x2-x1)/2;* N7 P! C+ Z- v* D/ t: X
  x0=(x1+x2)/2;
/ E, o/ ~9 Z: F8 Q6 u; T7 W  y0=y1+d;+ ^9 e2 U+ u) D: M: {
  y00=y2-d;
5 F6 g0 h4 Q- G; i* ^. y7 v  for(i=0;i<(d+1);i++)8 S3 i1 y) l4 o/ X: `
  recls((x0-i),(x00+i),(y0-i),(y00+i));" e6 i$ K, r+ G0 y1 m
  delay(10);
4 ?6 E& M# L6 T2 C% Y+ \# |  }
# s: }4 l) \& J* M5 y  else{3 k7 P% M& ?& w7 \4 R0 s2 T8 }. A
  d=(y2-y1)/2;
( @) [# p+ G% |( W! g  y0=(y1+y2)/2;
& f! W& P1 r$ W7 r2 p  x0=x1+d;4 s7 l$ M/ P9 e) ?8 k* I2 z
  x00=x2-d;
, s5 v/ U. A2 ?, w  for(i=0;i<d+1;i++)
6 [& L( I6 y( C5 ^! J  recls(x0-i,x00+i,y0-i,y00+i);
1 t% Q. `2 P8 @8 w, y# Y% r  delay(10);$ y5 y  m3 ?# S* i
  }' h) X& O. p' x
  }
/ B0 ?( |, l: @! Q( \, T/ G! W, M' O0 F: x
  /************* clear rectangle side(矩形边清屏)***********************/( c9 Y' i# [, Y/ i. b
9 t. ~$ g/ _9 S, y: y+ ]/ p
  void recls(int x1,int x2,int y1,int y2); d  I2 c* S( s6 E' H3 M
  {" B9 }$ [* y! M/ V+ p% v2 N
  int i,j;' e: J- {  F7 @  G6 h' ~5 I8 ^& R
  for(i=y1;i<y2;i++){( D$ y. m* I+ S" R2 M- }3 \1 [! w  a
    goto_xy(x1,i);
7 J8 r4 O4 {) ]: E' N) s+ \+ y  putchar(' ');; f, k7 \1 O4 S% z! @
  goto_xy(x2,i);9 @6 [" S# s& f3 b1 T
  putchar(' ');
( R' ^' }+ P! K% p9 s0 I  delay(10);
6 S7 \: S1 A. N9 h  }
5 U5 x& W1 g8 {" Q$ M, p* M  for(j=x1;j<x2;j++){
( c: i1 b9 ?  P' y9 H  goto_xy(i,y1);
' X% G" p. J* M1 |1 B  putchar(' ');0 J$ v5 F( ]7 Q8 K7 \0 G1 ]! _0 j
  goto_xy(j,y2);
. f2 g1 J. J6 B+ B: H7 b  putchar(' ');
: s4 V4 w7 [2 \9 U. e$ y8 k  delay(10);
2 R% h2 O7 Z' K3 {% {: d$ [  }* \. A; B$ ]% I8 M' }  b: k( `
  }
; d1 \6 p5 ]+ E  b5 R, ^  /******************open screen clear(开屏式清屏)*********************/
$ l$ q  A+ z9 w# b# }$ t% N( J
! H% d: g# Z, W0 d  void kcls(int x1,int x2,int y1,int y2)- Y/ T0 y; s- @+ I' G. `, E6 m  I
  {
8 u* @( f$ P, Y: e4 _% U8 g4 L  int t,s,i,j;
& _5 y+ N+ J; G" y& \- m  t=s=(y1+y2)/2;
+ v6 G/ L/ P# }& w  for(;t<=y2;t++,s--)3 ^# I3 O! D" {& K8 X
  for(j=x1;j<x2;j++){
: k/ o+ h" e6 n1 N, Z* {  goto_xy(j,t);, H$ i9 e" \+ G! D
  putchar(' ');
$ G7 k6 p+ M1 h1 X* _# n" Y  goto_xy(j,s);! S, Q$ ]$ t& D. z" n* p) I
  putchar(' ');1 M4 p/ h/ \. t% a
  delay(10);
( t2 B: P9 n& u, k. _1 A  }9 W7 x" G. M9 |
  }. t& r* E1 J/ y: H5 X$ c( g; W
  /*****************close screen clear*****闭幕式清屏*******************/
" M$ H: g# o+ i0 \5 c
6 }& @: d" A0 [: ~  void bcls(int x1,int x2,int y1,int y2)/ r/ L( o9 b- Q6 C/ K! f
  {/ T5 k0 h; O% }# _( r  t
  int t,s,j;& v  ?9 e* _6 y  H" _
  t=y1;( A' p( i# w4 p  ?) I4 d/ T' n
  s=y2;
* N+ H9 ^5 V! D% F7 H2 G" W2 t6 f  for(t=y1;t<(y1+y2)/2;t++,s--)  \7 O# n& @/ \1 ^
  for(j=x1;j<x2;j++){9 v/ ~5 W0 R) t1 e
  goto_xy(j,t);
6 m: y* t" [- _+ v! C: n) _- ~  putchar(' ');
0 D' w7 A' i9 S5 c9 Q: T) ]6 n  goto_xy(j,s);
- u; F. I  C  O$ C  putchar(' ');
* ]7 ^5 m8 t" n0 ^4 q/ n% O$ V2 C. h% j  delay(10);4 k6 h+ F! f* v2 J' c. J
  }) F, A, E' ^& K
  }
" Z7 t. Q8 g9 d! p# F' j, G' \  /******************bottom screen clear(自下清屏)********************/! o# M. [" R* U& }! r$ a7 i7 `8 g
7 U+ t$ |% ?. n1 b" a' n1 x
  void dcls(int x1,int x2,int y1,int y2)
+ j# Y8 z& u* i" v  {
" G. t; p" Z7 i0 s$ `8 Z; ~  int t,s,j,i;  {) E: d# x; s6 l
  t=s=(y1+y2)/2;/ F$ F2 C  h8 _, C. e1 C& E
  for(j=x2;j>x1;j--)
( k, |( ?* H1 \* z  for(i=y1;i<y2;i++){
" t$ S7 G7 T/ F3 N4 v# z  goto_xy(j,i);
) _. l' [8 d7 R$ p  putchar(' ');( t5 \: H4 z+ O, U4 r/ j* `. z1 D
  delay(10);. O  _' H" O# u/ K" A+ k
  }9 r; i3 D  n( O
  }
7 M' S5 a" U; S0 v) i. e, }  /******************设置光标子函数******************/; J7 d$ y9 x. @

8 Y) U6 H6 G- x  C  void goto_xy(int x,int y)3 y6 R. G$ j0 L, e/ K  H- b) ^& F- d
  {
9 P3 h% H0 N6 o  union REGS r;( i" X% Z9 }- h, G6 s( O
  r.h.ah=2;
7 h5 N; R6 @$ A# N7 X) k) i  r.h.dl=y;( [& x# |' }+ j) g8 ]
  r.h.dh=x;
& o! m6 R, E% Q0 y6 o* ^) S$ K1 J  r.h.bh=0;# c1 \" n0 u0 @, w& d# `
  int86(0x10,&r,&r);8 ^, E8 T  R) T
  }
, b& e+ j$ N% D' v3 o* p! n0 A! C1 U0 U
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
6 n% f2 Q" [+ l$ D& i# b4 K# A9 Q
  void puta(void); u- u; Q9 B0 U$ I) n' M
  {2 P: E3 @( g2 [7 q6 e# }) E
  int i,j;
2 Z+ u; P: m9 k  for(i=0;i<24;i++){6 r( ?. Z- y4 ?! P5 j* L) E/ ]
  for(j=0;j<79;j++){- v1 Q$ f" e3 z6 d$ S
  goto_xy(i,j);: g+ i; S, V/ w- l) l
  printf("a");( Y5 `7 b5 S  v
  }) @9 L3 Z+ m, W  C0 S+ v, Q
  }
4 o  C/ y2 m. x/ ~+ j, ]  }




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