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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,8 \4 S6 O% O  i6 @
' f! @0 v4 J% I+ T$ B
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
# X  _5 U/ p* G4 C* e! h8 d: s: t$ _* I, E9 \
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
7 D! c" L$ i* S0 H& A; ?  y: g  子函数及演示程序:
+ ^. R- v0 ]+ Q4 ]/ B- ^, ?  [$ [- ~: R' d- [: n8 I1 w/ k; A( x
  #include<stdio.h>: ~+ j9 q; r, @9 C: E
  #include<dos.h>
7 U7 d( Z$ w! @  #include<conio.h>
& c0 Y5 @- W$ j
2 ]; v+ a: ?( v, t& \+ v  void goto_xy(int x,int y);: G) o) \* e! Y
  void dcls(int x1,int x2,int y1,int y2);
4 a6 Y& L. k! _, M  E6 ?" d2 i  void bcls(int x1,int x2,int y1,int y2);. z: I1 F" r3 k, t( G
  void kcls(int x1,int x2,int y1,int y2);( ^  e0 S/ @( j
  void recls(int x1,int x2,int y1,int y2);
5 s' g/ V6 N; k" S0 ?. g. x& _6 r, Y  void zcls(int x1,int x2,int y1,int y2);
3 Q0 V- {! B6 D$ M& N* v9 c' J: y  void puta(void);6 X( H1 `8 a/ s, S9 c
* P, o9 }: v& ~  Q2 S7 S6 l* x

$ ]0 ?3 t7 l! e) [+ J* A8 m$ @  /*--------------演示程序---------------------*/- O3 H& `+ I! y
  main()7 z" v, o: g5 i; D! m. [
  {7 O$ Q7 D  B3 F' O1 {/ f0 u
  puta();/ O5 M. |# ^* B" m/ `( _
  getch();
5 y, H! y$ \+ b4 ?# I/ w  dcls(0,4,0,79);$ k3 _5 ?/ R& M$ s$ z
  getch();, b4 L; U3 v: R6 }: [% }1 C
  puta();
' X4 c# c  j6 ~' t  getch();
1 e( p4 K3 d) I5 {8 O  bcls(0,25,0,79);' y* F% F3 f1 u. v. J7 ?) Q
  getch();
8 @2 a* R' t) c  puta();5 Q% U/ P* k% r
  getch();
. a1 P) n5 {& c) a: z: y( `  zcls(0,25,0,79);
* D1 \" O$ M8 G  getch();4 L! }) M  a" e6 i% ?) C) F) v
  }
3 q3 G# b7 Q3 J; J' q  /*********center clear screen(中心清屏)***********/
8 N6 V- V: i' L, w! y  void zcls(int x1,int x2,int y1,int y2)
4 X& u( v+ R' p4 C1 R  {
( z, r" F+ {" n  int x00,y00,x0,y0,i,d;0 _, X5 L* \7 J4 P
  if((y2-y1)>(x2-x1)){7 x* X/ I; o/ H) s! ^
  d=(x2-x1)/2;; e5 U. y" K2 G
  x0=(x1+x2)/2;
/ L7 b' D& E8 x0 x  K3 b, c$ Y. A" @  y0=y1+d;) Y' C3 p' ~  [
  y00=y2-d;/ A4 L2 L" ^8 d# _' v: [/ K% n& }
  for(i=0;i<(d+1);i++)( Z; K) W) A$ J
  recls((x0-i),(x00+i),(y0-i),(y00+i));
& |1 u5 ]  w# a; {, j  delay(10);) F. J; }7 j1 m+ S" d
  }0 F1 |. f, [9 s: s" j
  else{
% ~3 M/ v" ~( W5 f! t4 u: h+ M* Q  d=(y2-y1)/2;
0 L; L8 X4 g9 j5 ^  y0=(y1+y2)/2;
( l3 C4 Z$ A% o  x0=x1+d;% u9 y1 C0 ?( @. ]$ a8 m
  x00=x2-d;
; O1 a% Y7 D7 E1 x) k$ U9 d  for(i=0;i<d+1;i++)# z  E% M. I5 y2 Q% q4 D
  recls(x0-i,x00+i,y0-i,y00+i);, r2 B) Z! c. j5 d9 t. A6 t
  delay(10);
* d" f1 l% S2 _; G' D- s9 }4 N  }3 I6 b5 Y( {! W1 }! b9 V
  }
4 e& ^% c7 V2 w) j  \$ c8 G5 ]# L  ?
  /************* clear rectangle side(矩形边清屏)***********************/
! @4 a* {" i  W+ ~: B! ~% q9 ~$ L, S9 N$ a* M; ~) j8 ~
  void recls(int x1,int x2,int y1,int y2)( p* [+ S: C  {7 x% f( [; n$ q+ s' {
  {
! f1 f" X& M/ y2 o- u  Z2 o- \1 @  int i,j;1 T# m8 D/ i5 K# z3 @' E
  for(i=y1;i<y2;i++){
& W3 y( q( `1 O) r" ~& P- {    goto_xy(x1,i);
. \; v: G9 u7 A( U4 U4 [; s  putchar(' ');7 M: I/ N- o& z7 l' e
  goto_xy(x2,i);) T* o' B! X9 N2 ^& K
  putchar(' ');4 s6 h' \1 `4 `: j, c
  delay(10);
. f& O( K% t4 z( y  }3 d$ b9 M! k3 }; |. {
  for(j=x1;j<x2;j++){3 f) A" i0 J2 ]0 z9 V% F; ]
  goto_xy(i,y1);; j3 T# [: |7 h! ?4 g. d. m
  putchar(' ');( B* t; U8 b+ O6 R; L$ D
  goto_xy(j,y2);8 A; T$ t. p+ q/ y( P4 n9 ~; T3 J
  putchar(' ');
) T# Z. \& n( C, u0 L5 I2 `7 U  delay(10);
0 ~+ A7 R6 M' A2 p; P, c2 r  }
$ S! ]: N# d) w$ m; p2 M  }
/ w  o, L! ?' z+ z3 Q7 }  /******************open screen clear(开屏式清屏)*********************/; L& @" \2 E: V+ o; Y2 D' G6 V

- h  {9 o& w( f$ Y3 F! ^% ~  void kcls(int x1,int x2,int y1,int y2)7 Z7 t9 F6 b/ P" a
  {2 Y. _8 ^0 C2 o9 [9 `7 v, L+ J
  int t,s,i,j;' x, s0 w* w5 X4 j9 e- Z! E
  t=s=(y1+y2)/2;5 k8 L& E) P6 M9 I0 W
  for(;t<=y2;t++,s--)
$ f" f7 q/ T8 d' s1 V) P4 K  _$ ?0 H  for(j=x1;j<x2;j++){. R6 p7 h3 C8 N$ R! @: _2 m
  goto_xy(j,t);4 k, G% m7 S1 `( ^, b+ X, I# y( l
  putchar(' ');
. @! p: {9 m2 O7 x1 ]4 V  goto_xy(j,s);5 e0 G3 r7 L+ |
  putchar(' ');
2 A+ }$ @1 _, K' O$ s  delay(10);
7 p& K! Z" Z- a5 k' T1 J9 R. e  }/ y. ~- |7 v. v, Q
  }5 i: P3 c: x) R6 W- s
  /*****************close screen clear*****闭幕式清屏*******************/
! T# ?- k# P: ]9 ]% P  y5 c7 j$ ^4 J5 r" b4 _$ [9 N; O! Z3 Q
  void bcls(int x1,int x2,int y1,int y2)
  Z# h; q8 L$ x/ k1 a, ^  {# O8 r% V0 W" J7 c# y
  int t,s,j;) J: C5 k5 ?3 I6 u9 e, p9 |
  t=y1;; u$ b( h; h* o8 T9 ~# C' i" D
  s=y2;$ A5 o* G+ x: ?3 @* _
  for(t=y1;t<(y1+y2)/2;t++,s--); u' t+ c$ ?0 w. {/ z) o9 N
  for(j=x1;j<x2;j++){) D3 G; ~% \( e4 Z8 L4 ]- P; R
  goto_xy(j,t);; i7 P, z' l: c5 t. A3 q6 e: }  w
  putchar(' ');
/ A0 a4 P5 R# n8 n- K  goto_xy(j,s);
4 y: s9 j* X3 q$ B/ C  putchar(' ');' e  _8 k8 P# m. Y1 d5 w$ Q
  delay(10);
0 ?& \4 B; A4 L- E  }
+ E. T3 }) r- r" c! Q1 m  }
7 m& B, b; g8 j6 {& i  /******************bottom screen clear(自下清屏)********************/$ G: ^. d2 _" [& O& a7 y. o
; Y, Y9 q2 @' `7 p, h
  void dcls(int x1,int x2,int y1,int y2)
+ z; j( l" N$ T; ~7 Y$ h8 n, q  {
: N0 W7 o0 u7 c: J  int t,s,j,i;1 g: y& ~9 X7 q* u8 x# \4 D
  t=s=(y1+y2)/2;) o5 c+ v, u3 K& u! }8 w3 s$ \0 Z( ~
  for(j=x2;j>x1;j--): `4 S- E+ z; g/ H1 ~
  for(i=y1;i<y2;i++){
1 ]) O( H9 `  k& k. d$ J8 K/ [  goto_xy(j,i);
; p* B9 h' }# ]" u  putchar(' ');% R0 I5 e) u1 Z6 r; Y5 a& i
  delay(10);
4 A9 a2 p  w% U  }7 s) S0 n0 b. x
  }+ w; I2 a/ K6 K2 g
  /******************设置光标子函数******************/7 u3 R) t) H5 W# l- v6 i7 K
5 Y8 q0 @, d1 C. ]9 y. B
  void goto_xy(int x,int y)
* `' _7 b2 P2 m3 I0 v4 R/ L$ c  {
8 y/ L: @/ a+ J, r# [8 Q- b  union REGS r;
; O6 s. T% m* C9 g! g6 b* Z# e5 X3 ?  r.h.ah=2;6 b" m) h" {0 n5 Q6 m: q# U2 K
  r.h.dl=y;4 _9 ?3 B# p) `! b  C
  r.h.dh=x;
: \1 r0 h$ h1 l% B# ^! w  r.h.bh=0;3 h, q) Q- J9 j, e
  int86(0x10,&r,&r);
! h! t) n* a8 e1 J$ Q* ]  }
+ X, s; ]& i% j' D  Q* o) `# Z$ C4 h
) t" O% {0 Y  g0 @" Y$ b  /**********************在屏幕上打出一连串的a字母用于演示程序******************/- F* E5 Q  q  N! I% Y

3 @: y8 N) `; b3 O1 t3 r( }( `  void puta(void): F+ u! M( ~7 |7 P
  {3 M" v) ~$ x- E4 P' ~: z5 q6 n
  int i,j;" o+ `) D! I3 L; U+ G1 a
  for(i=0;i<24;i++){: r  x9 b6 K. _' D
  for(j=0;j<79;j++){
% Q) y  k: ?. p$ {  goto_xy(i,j);
* K, s0 ]( Q! l6 Q* G, K  printf("a");* ^) j3 g7 O9 \7 f+ v7 Y
  }
9 N2 k; C! c* k* ^- G: }7 P! |9 B  }/ T" a! e( n' H- c( G; Z
  }

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