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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
+ g8 o7 z/ Y2 k% Z' G( s8 \+ F2 x  H
! @1 G3 V1 G7 I9 U. u( X$ C; q  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
* t: E0 V: Y# L. _6 K
3 a& j0 d7 q' i* _, \" q8 u9 d  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
$ y: P0 w+ Z6 [3 l: c! @3 Q& B  子函数及演示程序:5 t3 s' v6 b: R* K4 g" ~

9 H  Q% X, e  [1 t2 x  #include<stdio.h>
$ a) h  S+ r) E# e. Q" ?% N  #include<dos.h>; D7 k% r5 l% i, Z. c8 b1 V
  #include<conio.h>! P% M) M1 o( K) [" J9 Y
) ~( f$ T, v  z- e  A; f2 H2 x2 V
  void goto_xy(int x,int y);' y, \/ {4 L% z; ~; I/ U
  void dcls(int x1,int x2,int y1,int y2);
, A' I( @& V0 [# |4 B. z( u  void bcls(int x1,int x2,int y1,int y2);
! N5 P5 s$ d5 L3 j* b7 N  }  void kcls(int x1,int x2,int y1,int y2);! X; Q& \: [8 w2 O: \# V& w& B% j
  void recls(int x1,int x2,int y1,int y2);6 [2 |4 r! W0 ^7 p
  void zcls(int x1,int x2,int y1,int y2);
+ I9 a/ k) |4 `: F  void puta(void);
$ v# d; u- t: N! ~5 ?5 ~4 Z- `- R( ~  j

" V9 u, X( x% j; X3 ~& H  /*--------------演示程序---------------------*/( H/ h( a) [3 l$ H
  main()% |/ H" t. ^- A) f) y. y
  {
# q! N. c; ~/ l2 K% y, f$ C  puta();4 P. W+ }% j; u5 N. o1 Z
  getch();
, H$ S! ~6 T5 Y6 _9 x* c( s5 Q  dcls(0,4,0,79);+ |# }8 k4 a: k+ J8 n6 N% \
  getch();
2 u- g6 b3 {8 G. R( f. L  puta();" C! f& j0 f* Y* W
  getch();
& O! T0 U' F. N  bcls(0,25,0,79);+ }# I/ t. O' p
  getch();9 r7 e6 [  g: o7 V
  puta();
4 V" H2 m5 T& t" U) u; v( i1 Y  getch();
- K' V  ~9 I) |  B5 ]6 N. P4 S9 R  zcls(0,25,0,79);
2 b' w" `( Y! E2 P4 d  getch();. L; P; m6 z9 v
  }
' B- f) ~1 J$ N  /*********center clear screen(中心清屏)***********/
% R( U3 _5 @9 N. S! U* O) s" T  void zcls(int x1,int x2,int y1,int y2)
$ Z& U- B4 K4 `, ]; u  {1 Q2 C, g. n- X# z9 P- O+ e  I
  int x00,y00,x0,y0,i,d;6 F; B. `; O9 x+ O2 M; \
  if((y2-y1)>(x2-x1)){  Z7 ?5 L# W2 ]) y& v
  d=(x2-x1)/2;) x7 ^4 q0 q' i! q
  x0=(x1+x2)/2;  C3 R1 ]1 s0 W
  y0=y1+d;
. x. i& h- Z, N/ [! N9 a  y00=y2-d;
" p. j9 L  U1 N" Q: t  for(i=0;i<(d+1);i++)1 v  y7 Q! b5 @) d! b
  recls((x0-i),(x00+i),(y0-i),(y00+i));, L9 j9 `1 v0 j! `1 ?; ~+ a
  delay(10);& K3 ?1 Q2 d1 Z+ D6 `
  }
+ l5 r/ k$ P8 A: @  ]" n  else{
6 ^8 n) `# S+ `' ^6 i# J2 D0 k  d=(y2-y1)/2;, O. x7 P  v+ S
  y0=(y1+y2)/2;; L  t! v6 {% R0 V
  x0=x1+d;: O' ^( L$ J) }  {9 y& C
  x00=x2-d;
( C/ n  h# y& d7 j  for(i=0;i<d+1;i++)$ `, Q) V5 `8 D8 a
  recls(x0-i,x00+i,y0-i,y00+i);* X5 I5 G4 E1 o9 D- }* P- ^
  delay(10);
6 w% \, a" m! L9 v2 N. `) X4 g  }
1 X9 \* \3 K% k/ M0 S+ f  }
. i3 P, d- E/ B$ h7 h* Q/ P2 p/ K) U- A+ I. Z
  /************* clear rectangle side(矩形边清屏)***********************/
+ P: ~$ }& M6 U! j
( ]: z9 X: z4 z1 @  Z$ p1 M  void recls(int x1,int x2,int y1,int y2)
, z8 W9 X" C8 f! d6 C  {
' C- ~  M' D1 L5 A5 O  int i,j;
+ ^0 y6 A8 B. h3 f  for(i=y1;i<y2;i++){* o" i( Y7 a! Z/ H2 M
    goto_xy(x1,i);
, {" Z+ n: R% X- f) ^  putchar(' ');9 Z* [0 n5 E) w$ U3 ~( e
  goto_xy(x2,i);/ s' j; I) e' e; r/ ]! G$ {* s, ^
  putchar(' ');
( T+ r3 |! Z$ i5 I& B  delay(10);) N6 a/ g& M, x6 x; p8 t1 S5 W7 G
  }
4 R& H- L- U$ R' a% N: u  for(j=x1;j<x2;j++){2 f' ~& C7 m2 I  H6 j3 A
  goto_xy(i,y1);
5 m- t: ], K' _, }: u  putchar(' ');2 a( k0 E* r  R( h5 ?: s
  goto_xy(j,y2);5 H5 v9 m$ S- L! [
  putchar(' ');
4 y  j. Y" ?( K. ?- P. H; u( l  delay(10);! o) D8 Z6 ?# N- K! R
  }
+ V, x- G: P" V" u- y  }
- C' a  g1 a  J  /******************open screen clear(开屏式清屏)*********************/1 j9 {' Y5 k: b  K5 V( y; v
9 B* |- m" P* m' U8 T  F$ {; a8 E" l
  void kcls(int x1,int x2,int y1,int y2)
  [/ o8 S5 x' Q% I/ l" ^! t  {
/ U& E9 K# L" I6 J* N  int t,s,i,j;- F! ?$ S" |/ Z. f7 I1 k5 k
  t=s=(y1+y2)/2;8 l$ L7 S) R$ F3 e: }5 {+ {. n
  for(;t<=y2;t++,s--)
) H5 g4 |) a/ s  for(j=x1;j<x2;j++){. i- n, d; `* g4 Z
  goto_xy(j,t);
( q0 @/ i7 y) k1 p4 R  putchar(' ');
+ z/ G1 r  K, |5 Y2 {  goto_xy(j,s);' ^0 a! x9 o3 \2 v4 P' p
  putchar(' ');
1 e* [4 P! k4 `, J  delay(10);, ?4 R  c, i4 i8 M* F6 o, {
  }
$ |7 x9 W" t* _, `1 e; H$ j/ A. X  }
) f$ p- W0 }+ f5 ?/ w* P1 g$ M. w  /*****************close screen clear*****闭幕式清屏*******************/) ]/ t& {) ^% V6 F, A
7 X: a$ J" |/ r) I+ I* K# R
  void bcls(int x1,int x2,int y1,int y2)
" m. E6 I- ^4 X, y3 v  {0 `/ g/ A& k) X
  int t,s,j;
4 O9 G1 N7 ~( I- d  t=y1;
7 p# \7 v% m- k9 w$ D( ~  s=y2;
0 m* [- W2 K, N8 j  for(t=y1;t<(y1+y2)/2;t++,s--)
( C, E1 V: B4 n  G! K- ~  for(j=x1;j<x2;j++){
+ B/ u3 D! i3 c& u4 F% u  s1 K  goto_xy(j,t);1 B9 b! Z" A9 O3 `) u$ u. o6 U9 k
  putchar(' ');. {2 D( H4 M. V" i  C3 s
  goto_xy(j,s);
5 y: q  F: I; {) D( `  putchar(' ');
% d+ Q' N- T% ~  delay(10);" I: I. a, [) w- P) Z0 {3 X
  }
. ]* U9 U) ~, n  }
/ F7 @- Q: H* c$ n2 ]0 y# Z& g' B  /******************bottom screen clear(自下清屏)********************/
; z+ J3 J* f6 S- m1 D5 R
) M! }; c9 R3 E6 l  void dcls(int x1,int x2,int y1,int y2)
' D0 \7 s" c8 D  }0 Z0 P  {
* z+ n) z7 }$ e" I. J  int t,s,j,i;
' I% ?% T* q! j  t=s=(y1+y2)/2;
; V* v, [: m* w/ A6 M  Q/ x  for(j=x2;j>x1;j--)- H. v" [# }7 o3 }6 M
  for(i=y1;i<y2;i++){
. x! P/ s# A( \" t& w8 Q9 r$ d  goto_xy(j,i);' }! \" c3 c" p& N" f; Q2 Y
  putchar(' ');
. ~2 V* T: t9 I) |5 D7 Q  delay(10);3 @' x  [- @5 M$ b! m
  }' G2 p5 H3 Q9 k& p$ L" ^
  }7 s. F( o3 r6 y8 G
  /******************设置光标子函数******************/
* M  @! Z( K/ a6 C2 x; W) Z/ P8 B9 @7 K. ^
  void goto_xy(int x,int y): f1 d7 f* L5 W3 X# b% Q
  {8 F9 d2 h. b7 t# n
  union REGS r;3 X  B8 S# q- v: L: P
  r.h.ah=2;1 M7 X( O- @4 l) ?4 l0 V
  r.h.dl=y;! f( p+ d8 M1 B
  r.h.dh=x;; o/ @6 Z9 l9 i) B8 \9 h4 q, |
  r.h.bh=0;2 n1 Y& n0 v" V& B
  int86(0x10,&r,&r);; e, \! T# p/ h9 K
  }
# ?  Z- u5 ]: `$ t
# a4 A: F) X1 H& V  /**********************在屏幕上打出一连串的a字母用于演示程序******************/, y7 U  M* @- Z

: t7 v9 Z5 e) L* \4 S8 {  void puta(void). [* y5 h, q& M4 ~4 I) U" O
  {& D/ s( X2 T; Z* T
  int i,j;+ |! P0 J2 u2 o0 V* t# U  R6 S
  for(i=0;i<24;i++){7 ?$ |' p! N) x! y) @
  for(j=0;j<79;j++){
- B+ @+ ]. d& M, S0 r# T  goto_xy(i,j);
1 D6 e' J% ?/ T# x  [  printf("a");/ T  L$ F; I* |  U
  }
( h8 V; E% ?8 {8 O. B  N) A  }# ]1 w5 G" o8 {/ D
  }

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