返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,8 ~" c( \9 d( U0 B2 E5 ]

/ Z! Y  x: n7 n1 {9 r  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
& E6 U7 p4 ~" o; b0 z, |0 p9 Q" ?, _
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
7 T/ ?* o/ z: U$ _5 U. a  子函数及演示程序:+ W0 H( l, V* W( j/ Y/ Q$ y
4 A+ N0 C" g) t5 _9 A
  #include<stdio.h>7 \: |" b+ J  R3 L# x2 V6 u8 e
  #include<dos.h>
3 G  e2 T9 a( k0 W6 {  #include<conio.h>
/ k# |) Q  j6 T& w$ ~
5 r! b  G# q( A0 @  void goto_xy(int x,int y);
: p7 D& ^& e4 ?. d* M8 W7 \5 j9 {8 i  void dcls(int x1,int x2,int y1,int y2);
2 g- ^; s8 D3 l# F& N2 \0 a- r+ W  void bcls(int x1,int x2,int y1,int y2);
6 @" r' A' o+ p) a  void kcls(int x1,int x2,int y1,int y2);
# d# u  Q( J& w& H* V6 S  void recls(int x1,int x2,int y1,int y2);
% }+ n& V$ j2 @$ ?& m$ m) `1 I  void zcls(int x1,int x2,int y1,int y2);6 `3 y0 V3 ^, K( u$ T/ [9 D
  void puta(void);
8 |3 H6 h0 X* F
# _) e- N! A; T! a( {0 I& H) A' K; R& a, r2 t* ~1 A6 W! U
  /*--------------演示程序---------------------*/" v& j" \  s% t1 D4 l5 C9 _
  main()
1 M* n: K% m! g- Z, D) @  {
' f9 [$ Y- U0 B7 m) n3 g0 ~7 a  puta();
1 F1 E7 @+ U6 V4 s( V# T9 f  getch();
/ G+ R3 b4 h# j+ t9 c  dcls(0,4,0,79);
7 _" R+ b7 g  h, q( o0 F! |- s6 \9 R3 j  getch();
/ ^4 @' ]; L' X3 y& l" v  puta();
9 Z) F) Z3 S* ~1 E- s8 C8 v  getch();
3 ~' l- s1 W2 b0 Q0 N, u, O  bcls(0,25,0,79);9 E; }# r& B- F( O+ W9 }, Q
  getch();) C/ e" _$ x+ x3 ~4 {( d
  puta();; n6 B" c% }& I3 L6 P: h0 X* h
  getch();- Z# ]- k# ?; ^5 D+ }9 B
  zcls(0,25,0,79);5 B8 Y8 m5 K( ^& a/ I' u
  getch();
) ]. w! l2 [( h) G7 h  }
, Z) v* a1 c2 g) Y* t% `" B  /*********center clear screen(中心清屏)***********/
1 ~' }5 F& U2 N1 l  void zcls(int x1,int x2,int y1,int y2)( j% `, |7 s. L! S
  {
8 a% ]( U% b" U1 H2 h- Y  int x00,y00,x0,y0,i,d;* J$ B; O- ^3 f
  if((y2-y1)>(x2-x1)){9 J7 [  x; [* ]5 p
  d=(x2-x1)/2;
1 p/ v! d3 Z1 ?. M/ ?  x0=(x1+x2)/2;* S$ P" V" O3 t( y0 n( Y) s% {4 l
  y0=y1+d;+ o: @* I" j/ _, o
  y00=y2-d;5 y# d9 m8 y8 S
  for(i=0;i<(d+1);i++)
& i: k3 j0 H* q  F5 G4 _* v0 _* j  recls((x0-i),(x00+i),(y0-i),(y00+i));
8 j. T, \4 T0 X  R1 H4 @  delay(10);
) {4 Y$ c: d; Y2 B* w  }: f- o! o: [- [0 |
  else{
! k' K8 a$ Z: x6 b  d=(y2-y1)/2;
, o% h8 K* {6 b2 s  y0=(y1+y2)/2;
1 b# F9 [" b6 ?9 b' z8 U2 U/ K  x0=x1+d;
8 o* f7 l# B* b9 o2 _  ^  x00=x2-d;
# `2 V5 r- V7 b0 f! \: h  g  for(i=0;i<d+1;i++)6 _6 x* ^& V9 d, w! e
  recls(x0-i,x00+i,y0-i,y00+i);
' j7 A7 [: G0 O' K" d! k: W% e  delay(10);
7 G3 e7 w& {) k) |  }
& Z+ R" i6 [/ O3 e5 A  }4 l1 d7 w# G9 S
/ y  ~$ g& K1 B7 G5 O
  /************* clear rectangle side(矩形边清屏)***********************/# p8 V2 A4 R# o6 }
4 A  P' Q* s4 u# w5 K
  void recls(int x1,int x2,int y1,int y2)& o, a- R/ K$ c4 ^3 L
  {# {: x0 D  a' ]) P0 Z
  int i,j;
+ P1 J# G, d" e4 o! m  for(i=y1;i<y2;i++){
* z1 k/ U. a! g' U+ g    goto_xy(x1,i);
- n9 Q8 u6 ~; Z( x. }  putchar(' ');, b5 R( Z- c8 r9 Z8 y
  goto_xy(x2,i);5 Q; B  |3 G# Z: O
  putchar(' ');4 `0 Y8 {4 {5 T9 y
  delay(10);; R  `' P5 J% `, U
  }
( i$ j* F  E* U9 w9 S  for(j=x1;j<x2;j++){. }/ R/ t3 n3 O8 B3 L
  goto_xy(i,y1);
6 g) g, `5 V: {4 T5 N  putchar(' ');6 @1 d5 V' v. a9 ^% r! e3 ?
  goto_xy(j,y2);4 m8 _# d- x! s4 T& t: U
  putchar(' ');
7 d: x' |5 f1 }$ t! b! `) ^& J* _  delay(10);5 _( C: y8 J6 @! u5 U9 y) O; u( ~
  }, g) U& ?, U" M% R+ y0 Q9 m
  }
9 O5 c( k+ |7 D; _$ L+ l. ~* l  /******************open screen clear(开屏式清屏)*********************/
6 t6 ^& p6 s  T: l7 ?- n6 v! T6 J% L# q; C  A* j7 p
  void kcls(int x1,int x2,int y1,int y2)1 Y) ?- r) F5 z0 t4 C6 Q' d! V, D
  {+ b9 e( X  ~2 a& W5 m! t
  int t,s,i,j;
% h4 m+ ?: d+ q+ m  t=s=(y1+y2)/2;
, q! G) y: N& c) u1 ]4 u  for(;t<=y2;t++,s--)
& F# z+ Z8 N3 V# ?1 w3 c  for(j=x1;j<x2;j++){( y8 L5 u$ A3 c; i! j" w
  goto_xy(j,t);
5 I8 u- |5 P7 H: E" Z, d  putchar(' ');( ?; B) C9 K2 ^7 }3 u4 Q5 f
  goto_xy(j,s);
- O1 B3 F) E  O0 I% x) ~1 `  putchar(' ');
) o4 [  F7 Y8 k5 b- {5 g5 t  delay(10);
- }5 W% R4 [# B8 k  }7 r* w& ]' m& B/ \. C3 P, d, ^& X
  }" w+ K5 s$ ?/ v2 p
  /*****************close screen clear*****闭幕式清屏*******************/+ I, U3 d" S: M7 N
/ g2 w9 V- X/ h2 T, h: t
  void bcls(int x1,int x2,int y1,int y2)2 u; t: O5 {& R$ E% _
  {7 O8 j% }2 n, y6 ?
  int t,s,j;5 \) C3 u2 A# u! i3 I
  t=y1;
" e) j/ x  K% n! J( r  s=y2;# m; H5 d+ [; p
  for(t=y1;t<(y1+y2)/2;t++,s--)
1 R- H: S, H# ]* G+ t& m- ]  for(j=x1;j<x2;j++){/ k% C2 ~, E# r9 J* ^# \
  goto_xy(j,t);. Y& J. I  y# ~# p/ L; G
  putchar(' ');- `8 M% A4 F1 {3 `$ u+ D  s, T
  goto_xy(j,s);
9 x$ w9 X  e! _7 i9 B! c  putchar(' ');
& g" N7 j0 }/ E6 E1 o- l  delay(10);
! \& q+ s1 A" f1 v9 w# n  y  }
4 d% p8 r' g* z" C  }" W9 Y: k* E8 P% u' R! `' r; g
  /******************bottom screen clear(自下清屏)********************/
' n" m0 }( z# C
# D- k9 g7 A1 X& u5 @8 K  void dcls(int x1,int x2,int y1,int y2): ?+ R0 j# n: }* f: K
  {
6 e9 F$ A$ a& S  N& x6 U& k- B  int t,s,j,i;
& F& S+ b  n8 P  t=s=(y1+y2)/2;
& l; ~7 h( `8 W6 c9 q8 \  for(j=x2;j>x1;j--)
2 U% @# O5 b, Q3 l$ x2 G2 \  |+ S& I  for(i=y1;i<y2;i++){
7 e/ \0 h( X  Y% h$ A  goto_xy(j,i);
7 ^. h. U0 F1 z6 y4 r3 y  putchar(' ');3 D  I9 s% g1 l2 O
  delay(10);+ @  Y2 f! i7 ]8 n3 E* F
  }
: q. w2 S$ n% z" n7 x' [  }
. p+ L. {# A' @( T+ v" O# u: L% z  /******************设置光标子函数******************/5 @& r* ^$ z( j& T6 Q
  R& n5 g  F0 @* S4 B
  void goto_xy(int x,int y)  K* f/ V6 j8 V
  {+ I3 Z0 g+ |( C+ y8 F
  union REGS r;0 X* |# Z/ y3 t
  r.h.ah=2;
' x' A9 i4 r) G2 ]  r.h.dl=y;
  M7 t' u3 j6 A+ t! ]2 B3 \. Y' e  r.h.dh=x;
0 M1 }' E2 l9 c  r.h.bh=0;& g/ I5 P: }' w& D5 v  b4 w" J
  int86(0x10,&r,&r);/ e& h7 q! [& H' t  X' q
  }
- `& {3 K' ~4 D" x
3 E3 p& e* D' K/ F7 q  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
6 ?" B1 I8 X  d* K
* Z6 {# L5 h- F  void puta(void). T# T' j* E1 o) \
  {
1 T! i3 n: _/ T1 E  `  int i,j;
3 v6 N2 P( p( f1 l- f! l  for(i=0;i<24;i++){4 ~% I( M# R+ p4 f7 g2 B* e' L
  for(j=0;j<79;j++){
1 d7 l& d5 K5 i5 ?0 {5 q  goto_xy(i,j);
! S# C8 M5 Z3 B/ p7 u% i  printf("a");
/ M/ T1 V1 f1 W: }3 a  }. Q7 D4 C; ^7 S! e: x7 K
  }, V6 C; B2 s# A* Q: r. A& D
  }

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