返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,3 W. B- v1 a) k" E1 l  s! I

8 @, T- J* o4 B8 W3 }' Q3 Y: J  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里# o; O" ^' ^$ N7 r3 n% G( J

# k7 p) X3 T8 \8 d  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. # g; l5 c* O: _5 E- F$ A
  子函数及演示程序:8 P0 M0 `# T2 h$ S, p0 W

9 V2 I0 F7 A7 B2 D1 y  #include<stdio.h>
$ I9 z' |/ ~% S3 D: b9 P  #include<dos.h>
( m" H7 y4 _( n8 S0 ~% n( q  #include<conio.h>
1 L3 D0 y  s' R2 @# Z' N
. [0 j, j4 _6 }, N0 e  c7 ]- n! T  void goto_xy(int x,int y);
8 M0 H! O) n7 W5 b  void dcls(int x1,int x2,int y1,int y2);
2 G4 h# [+ j( ?  \4 x: }  Q  void bcls(int x1,int x2,int y1,int y2);
: M0 K% H: N" D, V8 @  void kcls(int x1,int x2,int y1,int y2);
: h$ C5 s2 Y3 ^  r! d0 q% ]  void recls(int x1,int x2,int y1,int y2);. x* n  F4 h" C5 F  l5 P5 @6 h
  void zcls(int x1,int x2,int y1,int y2);( |2 m$ F. R& V. C- V' w8 U
  void puta(void);' Y" z0 r) M0 r. B- Z5 K

1 X* i4 H  r2 y, E& j4 }7 U" c( i7 K1 ~) N# S9 X8 w* z
  /*--------------演示程序---------------------*/0 u* D0 O5 x" Y, M* ]0 Q) S
  main()
0 ]/ f2 c. z" e' G  {/ j7 `1 s. J) M3 r8 n5 a! y1 j- ?
  puta();
/ I" H# a+ L1 ], w1 Z9 e  getch();! Z9 y& X" [% n& j5 `
  dcls(0,4,0,79);
! x3 h) F& m% m3 b! _1 |  getch();: _! M, r5 y! o( J$ m( j
  puta();
/ X4 C# N9 |* Y# T/ }' j' [4 r/ U  getch();% @, k- _, y. g! s3 k
  bcls(0,25,0,79);& O2 |6 u$ \, E
  getch();% i. l; j- i/ `3 q  s; l0 p
  puta();/ G8 v: r$ L4 S, I  s  \6 f
  getch();
" Q$ u: M( K" s7 @% m* [! q8 H5 [  zcls(0,25,0,79);
) \9 \9 R: |) H# n% B  getch();8 l6 q4 ]2 d. r. n6 i. T
  }
6 ^6 `* i, t. D- T% s4 }( ]* f& f  /*********center clear screen(中心清屏)***********/
0 C& K" T3 \- c7 T$ k' ]0 I" a  void zcls(int x1,int x2,int y1,int y2)
6 n$ V3 A8 d, `, S  {
" Y, }' r/ [% q7 ?% j  int x00,y00,x0,y0,i,d;
5 d% s& S  L  X, m) V7 t6 T  if((y2-y1)>(x2-x1)){
( g0 e/ X4 n% w# W  d=(x2-x1)/2;/ ^# E, U) N  F$ z6 ?3 Z* K
  x0=(x1+x2)/2;
" j* P" K5 q3 {. I( L5 g5 M  y0=y1+d;3 J. d; p& A% I- r8 [
  y00=y2-d;0 w+ E- G& b4 L! u. ]: g$ ^2 V
  for(i=0;i<(d+1);i++)  t+ h5 J! m4 B/ z0 a- ]
  recls((x0-i),(x00+i),(y0-i),(y00+i));
  ~% A; ^2 |5 w0 l  delay(10);
6 u. r- K5 M' b  o  }, Z( q7 `- z; I' b* f/ x, R
  else{2 g/ ]. w" o4 d% M
  d=(y2-y1)/2;( e' o- V4 ?# x- B, C; i
  y0=(y1+y2)/2;: `. ~# L  ]3 `' F
  x0=x1+d;
+ a. l; Q$ v. J+ R: j- v  x00=x2-d;
- R0 G- ^* Y& T7 \  for(i=0;i<d+1;i++)
  }1 i! |& I$ `0 J- _. @8 D0 g, X  recls(x0-i,x00+i,y0-i,y00+i);- A8 Y( z. l: n: Y" H$ d: A
  delay(10);; Y; B( W1 _7 `, P
  }. b3 V. e& R7 t& E0 Z) W
  }
# n/ }2 W' K' Z" T5 |( F" p( O7 x* P/ y  @( u! T7 k6 F
  /************* clear rectangle side(矩形边清屏)***********************/
4 w" L+ l9 g& ]7 b. @6 K$ l: a6 M3 s
  void recls(int x1,int x2,int y1,int y2)$ ^! Y; U% c1 n. ]1 W6 w
  {* E0 A+ l4 `0 G2 F0 s. t
  int i,j;  q  O2 R1 I! v& _, C5 N3 q
  for(i=y1;i<y2;i++){
" K% m, S) D* F9 U1 g    goto_xy(x1,i);
" l5 H" D8 l/ Y+ A  putchar(' ');
. s, u) g  k( K7 b) N  @5 A/ E5 T  goto_xy(x2,i);& y$ _/ ~; i% Q  w& v1 d
  putchar(' ');' E5 K( H8 K1 K' K/ s0 v
  delay(10);
, [! h6 \% ~4 E  ~& j! O- @1 n  }
6 L; s0 g5 a) }/ R$ q  for(j=x1;j<x2;j++){& N& I/ n0 O2 w  V5 Y
  goto_xy(i,y1);0 q4 _+ U8 d* S# d" h
  putchar(' ');! w& r/ R9 Z4 F' K9 b% o
  goto_xy(j,y2);2 f$ R5 R5 g# U) f5 z
  putchar(' ');  M% b2 I& G1 L; K" A' a& P
  delay(10);  d( F4 s# v" g  E
  }% }' t7 W- U3 h
  }5 ~" Z  {7 z3 z2 U- N7 M8 a
  /******************open screen clear(开屏式清屏)*********************/
  v( w' s3 j- G4 i. b  B6 f* C+ o9 v3 [- y( P" S
  void kcls(int x1,int x2,int y1,int y2)3 B: N6 f" @: j8 |2 K3 o5 ^
  {
; U: g5 V6 v# y7 a2 H3 m) s  int t,s,i,j;* o$ ^+ @: N! h8 b- s
  t=s=(y1+y2)/2;
' W. m4 m' L* \6 r# W8 o  for(;t<=y2;t++,s--)% {6 j- p7 I; o) g
  for(j=x1;j<x2;j++){
8 N. I2 M% F4 n; W8 p  H& Z  goto_xy(j,t);
1 G& B/ [2 X8 q5 y- l4 y  putchar(' ');9 U4 a* C' |) L8 I" C
  goto_xy(j,s);
0 c9 a! G; c) X" D% P: Y: R  putchar(' ');* V7 K1 D0 K# w, @5 T" t
  delay(10);
6 S3 b# V" n& E2 u- k- }  }3 ]! N5 a/ x* V' P2 `2 P
  }3 s) }- ?9 V+ w8 t
  /*****************close screen clear*****闭幕式清屏*******************/6 \! f" y. Y; F4 R
' i" a6 F# w' r( r$ ^/ a$ u
  void bcls(int x1,int x2,int y1,int y2)$ Y8 g( b+ q! x3 D9 U/ z4 P/ L
  {
/ ~) F6 {+ Q8 E% m) a3 t  int t,s,j;
/ Z5 d5 N' J0 H  t=y1;
  D% `& Y! Y, |+ ^- Y  s=y2;
- d5 G5 v- e* P/ ~* P  K3 x7 t  for(t=y1;t<(y1+y2)/2;t++,s--)
& W) A2 N2 H; I" y" j  for(j=x1;j<x2;j++){  u  W0 e* L' A7 n  D2 M
  goto_xy(j,t);
9 s3 k6 z6 U9 c7 T  putchar(' ');
; i1 Z2 u. O! @0 ~- g7 ~" h  goto_xy(j,s);
6 V  T0 p. t3 h& q! w4 t  putchar(' ');
- b( Q- U4 S: y  delay(10);
1 |4 Z6 N/ e: C. D" W4 v, T% @  }
% @- z+ ^9 C# M& o0 K3 c  }! x$ k8 p% q4 j. t; |! U0 l
  /******************bottom screen clear(自下清屏)********************/% E) b" n9 q, i  k7 ]
5 }0 \! o( F/ w
  void dcls(int x1,int x2,int y1,int y2)
: h, f- Z% ?* S  {+ J8 N- K/ Z8 s$ X
  int t,s,j,i;6 X& Z. k+ z& J7 Y
  t=s=(y1+y2)/2;$ n# W* S+ m; s: ]8 ?8 _- D
  for(j=x2;j>x1;j--)
/ ?8 A0 O6 [* p5 w: V  for(i=y1;i<y2;i++){/ [- A; Y. J9 ?
  goto_xy(j,i);
& T; J- |9 b+ |' v) ^  putchar(' ');
5 H2 T/ W& v4 A8 N  delay(10);
9 n/ ^9 _3 Q/ \1 y/ W, r; k  }. {+ [; ]( S5 ?2 N6 C
  }1 {1 u' q; _0 ~2 i
  /******************设置光标子函数******************/
  G/ t- Q1 `! @1 U+ D2 j( m: u
( G2 k1 Y8 Z; o# u% B  void goto_xy(int x,int y)
( u6 h2 d" J$ E9 O/ K- n. W0 o7 v  {
  V& X) e; ^# I) X4 ^# X6 B  union REGS r;$ v- M7 X4 U6 r$ O
  r.h.ah=2;
& k1 k. w3 k& s1 M( G5 P% `  r.h.dl=y;
4 z$ U) [, |1 M- o+ u" C% J  m  r.h.dh=x;: i7 ?% g- `) X/ |. B2 ^
  r.h.bh=0;
; A  a* F/ r5 s5 L  int86(0x10,&r,&r);
+ |. Q1 K$ b& N! ~  q7 g& E% j  }* V7 m. Z; W. b/ c& @8 T7 H
1 x$ ~, T+ x. c, w# t$ V3 D
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/$ ^+ x# G- W9 X& y  P* b

0 \( v7 d) k5 {7 ~1 _: N  void puta(void)
" M) c$ n3 `, x: H3 E' M/ ^, a  {2 M! M# E% i# j& ?9 e
  int i,j;, n& ], Y9 R) F1 Z0 Y! ]& G/ ^5 c$ S
  for(i=0;i<24;i++){3 U- I* b' c5 L6 W; o
  for(j=0;j<79;j++){
) `$ e' ^+ j; Y) H% \  goto_xy(i,j);
3 x. Q# K( x2 g# z  printf("a");
! K- R5 {2 s9 d- J  }
+ Y4 N, T* n% j0 y, u6 S  }/ E. x- q2 t8 ]5 T6 k6 j
  }

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