获得本站免费赞助空间请点这里
返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,/ D. T8 v/ C" c7 L1 p1 o- o
  L3 J, k0 _3 `' Z3 Z2 U
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
: H2 X7 q; H, o' A: x
! R* }  |! {3 X! ]* f$ w0 f  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. & g4 C5 g+ t3 e9 Y5 H: X9 W2 Q* c
  子函数及演示程序:
5 F( S! Z% c) V. F) f8 n$ ^* C7 Z+ z3 B) y  S& n' c# P% P
  #include<stdio.h>0 S9 o1 ~% K7 N2 T3 g0 r1 T
  #include<dos.h>
& e+ }2 Q9 b5 z3 u  #include<conio.h>
7 F  V4 l2 Z9 `5 [  ^3 z* n$ X' [
9 V" n* M# P. u& h/ z1 r  void goto_xy(int x,int y);
8 q; C! m! _' L! p& a  void dcls(int x1,int x2,int y1,int y2);
3 w* G2 X9 y! H- m7 X( t  void bcls(int x1,int x2,int y1,int y2);% d5 D; a9 ~. {3 A% Z. n
  void kcls(int x1,int x2,int y1,int y2);
  I% s6 r( m2 c6 h( C1 y  void recls(int x1,int x2,int y1,int y2);
9 n6 I9 ]- p2 A0 m; d' b. T+ K  void zcls(int x1,int x2,int y1,int y2);( S, P+ j$ D" f9 E' k0 C0 x) `
  void puta(void);4 V6 y$ c- l: X' R+ `) G1 A1 N

. |. ?- R4 ]4 R) x
' f' v+ w' {. k% C  /*--------------演示程序---------------------*/
/ W# A$ s% k; _  F1 T7 y  main()3 u% P/ B! e0 o& `
  {# N/ ]6 d$ A1 n& E) p  U
  puta();
. G# A8 x: X, I' j  F  getch();7 [" L, s! W' W
  dcls(0,4,0,79);
6 A" N" C! F- P* W- b6 {  d  getch();+ w6 J4 }8 [- H) C
  puta();9 {& O" B3 F; D0 u/ u
  getch();) I$ S2 c) k2 n+ C( ~7 \; H
  bcls(0,25,0,79);' t# ^; V5 Q- G3 v/ ]: P; S
  getch();
7 @" y+ j/ t- g0 Q" B. S  puta();
( A2 E$ }9 B1 h9 ~4 w3 Z8 O- {  getch();/ d$ K- S& y! p7 D
  zcls(0,25,0,79);
) w4 z* Z% }( t# Z: ~) E4 x6 j1 ]  getch();* K. Z1 I/ B9 J! w3 [( s3 ?- {7 ?" x
  }, y* R. A* w$ D3 ]
  /*********center clear screen(中心清屏)***********/; c7 j$ ^& z. X) a; H! Z
  void zcls(int x1,int x2,int y1,int y2)0 {7 O' c2 ^% Z0 n0 D" f
  {
% s! }+ W  H/ C, P6 i: L6 I# D9 u- A  int x00,y00,x0,y0,i,d;
# n4 G+ V" ^# F+ a7 A& b2 z: @  if((y2-y1)>(x2-x1)){/ w0 j, c& k: f
  d=(x2-x1)/2;
" l) t( }# A9 L& O# I0 X  x0=(x1+x2)/2;
7 m: ?, s; d/ \, Q$ q, n3 ~6 U  y0=y1+d;
# m4 R0 {. N# w: }- O0 s  y00=y2-d;4 {$ ~9 \0 S% N4 C% W, X) b" H) i
  for(i=0;i<(d+1);i++), d+ {5 `9 q1 H8 {5 x
  recls((x0-i),(x00+i),(y0-i),(y00+i));
4 {4 @( e, z9 e% W; w4 h  delay(10);
, F6 T) F* J8 x* _' Y' X  }
: e/ Z0 M! H3 N1 u' S  else{: \, F  I6 c4 l: V! Q
  d=(y2-y1)/2;
/ j, D. E0 Q+ s3 \! n& u  m* f* ~  y0=(y1+y2)/2;
9 Z, {( s: l, B# k7 Z( a  x0=x1+d;, M/ ^" m  g/ D5 v4 F% a
  x00=x2-d;/ p2 t7 a* h& c+ E' a, Q7 O
  for(i=0;i<d+1;i++)0 z0 w' F7 ~* E0 F) |
  recls(x0-i,x00+i,y0-i,y00+i);
7 @7 p; i5 k: v, A9 ~  |  delay(10);$ m; k2 l) v! ^) Q1 a6 v
  }+ M6 Q# s4 x2 V& k# }# }
  }
5 C6 A$ k  P: ^9 K
4 T/ [3 d3 v$ S3 ]  o+ X  e, m  /************* clear rectangle side(矩形边清屏)***********************/
  a; d, E' J* Z8 x& l+ G" l7 |. S. f" y! ?
  void recls(int x1,int x2,int y1,int y2)4 t; \9 |* }8 w9 \+ G0 v
  {
- Z& a9 L# H0 k+ \7 Z  int i,j;9 H$ ?! J3 k9 l* d/ ?8 o
  for(i=y1;i<y2;i++){
5 b1 Z  x6 O% |7 q8 q. W1 V    goto_xy(x1,i);
- F/ W% }4 D4 o  putchar(' ');2 t6 W- F3 k. H; k
  goto_xy(x2,i);. L: i9 [1 _- ^# r* c
  putchar(' ');
+ E+ l" e& X# ]7 \. @  delay(10);
& m  B( q9 f6 j  O$ b3 t/ n  }0 r( x: g* d. q% _7 p
  for(j=x1;j<x2;j++){; e. h1 s+ x0 @5 |" q' S2 I
  goto_xy(i,y1);: t- A( R; g4 k' Q5 C/ X
  putchar(' ');6 a+ P* V1 H1 C, j! `+ \, Q7 ?: |
  goto_xy(j,y2);
$ R% S6 U# o* U0 s) B  putchar(' ');
/ o2 R% H! s9 B' ]% ^0 G1 a' C  delay(10);
) E( e4 D  R/ x3 d" D! v% P% s7 [  }
0 F/ ~2 G: [$ A+ B" ~4 Z4 C& b  }. R2 X& H+ ]& j! J( l
  /******************open screen clear(开屏式清屏)*********************/
$ K3 i& G3 w% V1 P5 o, v9 I& V* M( ?0 y
  void kcls(int x1,int x2,int y1,int y2); `3 l" k( D/ G" e. o+ n; m
  {
7 \! |9 P! c+ X% [  int t,s,i,j;
6 c( m  {' X8 a5 H' D% I' f  t=s=(y1+y2)/2;+ Y7 c/ b& u+ s; q1 t4 r; _
  for(;t<=y2;t++,s--)* ]% N: Y$ D: F; n4 c  d& c- s8 b
  for(j=x1;j<x2;j++){
$ l* y8 y5 v2 X: w( R2 P  goto_xy(j,t);5 H* W: b. y: I5 Q5 X1 w$ k
  putchar(' ');7 N1 ]+ v. A# \+ k
  goto_xy(j,s);9 z& U' u' I6 Y$ t$ e% b  T
  putchar(' ');* E" ]6 |1 ]$ y; g1 [$ D( B
  delay(10);& I/ S" t0 c8 n! P' Z6 T
  }
. e6 a6 z6 k7 e+ e5 |7 S  }
2 G7 |) `# g" Q! S! n  /*****************close screen clear*****闭幕式清屏*******************/; s3 t3 k# z7 n( D5 K( Y$ r/ U

! P0 c, E/ k/ S1 M+ C6 ?7 b  void bcls(int x1,int x2,int y1,int y2)( V" m( G6 C! a* o
  {
& F! d% i& k+ Z6 W; I6 F  int t,s,j;
4 ]4 c/ ^* L) _8 H& p& b0 E  t=y1;
) Z! I) b# r' K, V$ S  s=y2;7 c0 G& h+ k/ ?' J  ~: o1 A
  for(t=y1;t<(y1+y2)/2;t++,s--)
5 I+ b8 X9 [" \8 s8 P' u  for(j=x1;j<x2;j++){# y* H4 t6 E. v" \# t
  goto_xy(j,t);9 H4 ^4 E% v! w7 d
  putchar(' ');# P) g5 ?2 ]( v1 ?! T
  goto_xy(j,s);# H9 d/ @1 e7 S5 ^2 L' s; k! d
  putchar(' ');6 G+ X% Z' n( m# p
  delay(10);
  ], Z7 O& [: Q; @- R# w1 o& u. \  }
( N; j' ?" W( f( ]  }; u3 L- Z5 Q8 w; w( b
  /******************bottom screen clear(自下清屏)********************/
6 p# d1 @/ T& W/ c3 U) H  I1 M' C8 X% }+ J
  void dcls(int x1,int x2,int y1,int y2)
4 |: F( P3 \8 O: ^# ?  {; n6 K; X+ N' w* Z  ?/ c
  int t,s,j,i;8 m' j& W: O/ I8 A5 R
  t=s=(y1+y2)/2;) u' T6 Y# z* T5 ~' n5 L
  for(j=x2;j>x1;j--)
! l1 o( Z$ c) T* j" a  for(i=y1;i<y2;i++){
" O  q; p8 P5 I1 r6 A  o% {  goto_xy(j,i);5 s) @8 ~  _8 Y. \
  putchar(' ');
% u. t% @9 L; q* o  delay(10);
4 k( S; \8 h# L: f  }! U) q3 B2 @& ]' o, f$ m% g
  }" p+ g! S1 B* ?9 n
  /******************设置光标子函数******************/
1 c+ t2 z5 y' |. P* ]
4 D$ v( E; p2 S) O  void goto_xy(int x,int y). u2 K7 d( h. F( j
  {, J" p' u, N3 Q* A* e" s0 O7 ?& X
  union REGS r;
: P% N5 {( G- Z. g5 i- I" N  r.h.ah=2;
2 Q; d( s! L, v* L) t  r.h.dl=y;2 b$ m7 }; A2 Y5 u) ^% v2 c8 x8 i( e3 D
  r.h.dh=x;! H: w# Z. R0 O* i
  r.h.bh=0;
5 r8 @8 z# t: m1 N( ^/ [  int86(0x10,&r,&r);
# l: @  @$ ?1 j( R9 L& I3 F6 Z& g  }' N9 F( j3 A  C0 t# P0 z. L
+ T4 V5 H$ n4 {) c5 ~- p$ W
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
! R3 R; `$ S) r) O. a+ C
7 Y. n0 y- \7 y6 P  void puta(void)
" t+ S/ T7 ]; }/ q2 W# k  {( V3 e9 b; d# Y6 i% ]: I, _7 D( y
  int i,j;$ s+ O7 l) T3 i/ p
  for(i=0;i<24;i++){8 a) a: ]. m2 \4 }! T
  for(j=0;j<79;j++){
2 |: j. P4 w  T7 R  goto_xy(i,j);/ T' I' r& N- v% U/ ^
  printf("a");
4 U9 ?; |/ }: ^7 E, n$ i& I8 m  }5 ]4 Q4 G& V6 D/ Q( [1 O; s
  }: ?# v8 G/ V, y/ H
  }

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