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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,) E: N7 D! Y0 T0 [. `0 s" u) o

6 B' U5 \+ j- S. K  I7 N+ }) t  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
* ?2 r) S% S! A0 m7 \6 J4 A9 P! ^1 @. X
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
# s9 g( ~$ h) X: h0 k  子函数及演示程序:% c! M8 f1 e7 ]& R0 `
- Q' {0 _7 u8 N3 c  l5 t
  #include<stdio.h>' v3 R  }/ e3 Y6 L: r; S; ]% y( X
  #include<dos.h>( P0 ~. Q' s2 R9 q  |0 |
  #include<conio.h>
+ X& g- q+ [, V/ A7 p9 @/ S3 x& u0 _1 d
  void goto_xy(int x,int y);
) {$ }! m& M: y; T6 A! S+ O, v: n  void dcls(int x1,int x2,int y1,int y2);1 |) a/ }5 }) ?% @: x% I
  void bcls(int x1,int x2,int y1,int y2);
, p5 v; V" m* G3 a! C* Q" ~  void kcls(int x1,int x2,int y1,int y2);3 u2 @+ r/ i) k/ L" [
  void recls(int x1,int x2,int y1,int y2);
/ }' u! y* o7 y. C* r/ ]  void zcls(int x1,int x2,int y1,int y2);
3 z# @3 H  K: J, F* B7 q0 w5 H  void puta(void);
0 U) O# K5 q  E0 u+ x+ n6 e
0 I) U( d! K& I" l' U+ }1 m. f* m2 G5 _8 p. {( T3 z) F
  /*--------------演示程序---------------------*/( j3 A( W" B% C
  main()" o6 f% }- l$ u! `# {" k9 q, o2 ^
  {
' [  l7 @* N2 d4 h. n4 u  puta();
" H: B; h# c/ y" w! @( k) f- n/ k  getch();! \6 j" c6 U* e" @4 V! x
  dcls(0,4,0,79);
) C2 B. r# N9 s' l% C: w  getch();7 |5 E& u" a$ f7 x6 G8 Z
  puta();
$ A% H5 K9 r6 e3 L/ y4 G- }  getch();
4 A% Q  w8 ]" F( H  bcls(0,25,0,79);
/ l, c% W0 ?( G# Q* L; |& d" h5 N  getch();: w0 E/ O& \) ~% m: V- Y; Q
  puta();
% c3 d, G7 W0 ~7 W: u( J  O  getch();
$ X( X; |5 Z5 r  zcls(0,25,0,79);. p7 l/ I1 T* y7 z' }
  getch();
/ R1 Z7 N/ }0 S- y5 W5 ?: F$ C  }- [7 K' ?+ E. s* U1 q0 B/ ]1 A
  /*********center clear screen(中心清屏)***********/" M; N8 ?8 _* u$ V7 c
  void zcls(int x1,int x2,int y1,int y2)+ @# g; ]8 t6 y/ x/ ]
  {
9 b  J+ B0 Y, {! G  e  int x00,y00,x0,y0,i,d;
  Y" H6 B' N$ N$ L7 B5 m# S/ t  if((y2-y1)>(x2-x1)){& [# c( Y$ |) F
  d=(x2-x1)/2;% _' y- ]% d; J1 P7 P
  x0=(x1+x2)/2;
: K/ x, A2 l# ]8 G8 J0 T  y0=y1+d;
$ m' T+ E- k3 J# J1 p1 [5 X- b5 D  y00=y2-d;
% R% F0 H* ^  E& C$ j8 ^4 n  for(i=0;i<(d+1);i++)
7 j5 z& V$ J7 V# G! a  recls((x0-i),(x00+i),(y0-i),(y00+i));
  z' m/ N$ Y4 |  delay(10);
- O$ W% P4 C. r  }
2 Y$ W2 E' b7 n# w0 V. f1 k  else{
, O8 D7 K1 X/ a  d=(y2-y1)/2;# e; _9 t9 U( K) V3 b# U
  y0=(y1+y2)/2;$ t- d0 p+ {% e* n5 T2 L: E
  x0=x1+d;
8 l* y/ {* o" s: l  x00=x2-d;
8 O/ v0 |# j% \$ w) k! F  for(i=0;i<d+1;i++)0 j: k* F' q& J9 `
  recls(x0-i,x00+i,y0-i,y00+i);: Q& g. j9 |1 m$ Y' ~' B
  delay(10);
+ `3 E6 _5 O, ~' F3 l  }
' h. s+ O# G. z" M1 W; H  }( f$ t+ h/ Y; S' b

. b  x; }* x/ \  /************* clear rectangle side(矩形边清屏)***********************/2 J& H* K: z& W) `/ G3 I
2 C0 O' W, ?+ d6 n/ Y
  void recls(int x1,int x2,int y1,int y2)# |* i, r: F. ^! I0 o
  {; s( `) J) r- S$ |
  int i,j;7 I7 m) Q2 w" b% |) I' ^  i) o
  for(i=y1;i<y2;i++){
9 V, Y( e9 K$ L4 q7 S% N    goto_xy(x1,i);
/ c7 H1 o+ T$ W" G& C/ W3 K  putchar(' ');& h% O  v' w- b, N: v" t
  goto_xy(x2,i);
# J' I$ E2 Z. I# K) x  putchar(' ');
8 o# m6 w4 F: D* e  delay(10);
, o1 ?, a, V6 I7 c! o  }
3 u2 G' \, ^) _4 a  for(j=x1;j<x2;j++){" U6 g( i* J  L: w( j3 f
  goto_xy(i,y1);  G- u9 F$ S2 {. x
  putchar(' ');
. R# o% E4 j: p# p  goto_xy(j,y2);
! j8 p: C) ~( i) ^  putchar(' ');
; d* ~/ ]2 d; N  Y  delay(10);
7 v: x- _) h3 E: s& N3 L  }. `. H3 h; d# e3 @5 b9 h3 r
  }
4 K( d  {, c6 ?# E) z4 `4 j3 B  /******************open screen clear(开屏式清屏)*********************/! F- D2 W. O- q5 U) Y5 |4 o1 l3 r

  b+ m+ c  S6 W# I" }  void kcls(int x1,int x2,int y1,int y2)
% y% V+ U; j0 y9 Z  {
; T& _8 S& J- F' O& _3 [. R, v- P  int t,s,i,j;1 h, ^! f/ g( |& C8 y/ f9 `9 P# Y, f
  t=s=(y1+y2)/2;$ {; X3 S9 j' \9 e3 f! y2 \* O. P
  for(;t<=y2;t++,s--)
/ F* p7 ?- P, S- N1 ^  for(j=x1;j<x2;j++){' D& B. U7 d  e( N1 |2 a
  goto_xy(j,t);
2 i% E. c+ u6 Z1 a- N  putchar(' ');
( W) I6 T8 V7 G) {) U  goto_xy(j,s);  L% o) f: n8 n
  putchar(' ');
, I1 q$ B! ?* k) v' p  delay(10);1 ]$ G& g9 A, v, g2 s
  }
* O! W& I1 J( a. E  }" @0 ~8 R; |2 h6 n5 [3 [  P
  /*****************close screen clear*****闭幕式清屏*******************/
1 K) Z  _; K' W0 D) n- o( j8 S+ j8 p. _2 Q. ]
  void bcls(int x1,int x2,int y1,int y2)
! C/ k8 W+ c- F0 E7 j  {# i  K" o5 W+ o/ z
  int t,s,j;
+ G+ e/ p9 Z8 w$ z$ b  t=y1;$ W/ D1 d6 y+ p, T" L( @$ n  G6 a
  s=y2;
2 t( ~/ L  d5 [6 O( E0 K  for(t=y1;t<(y1+y2)/2;t++,s--)" y$ s& }" @) j! V, O
  for(j=x1;j<x2;j++){
0 W6 H" L4 p, P# {7 T; k* B1 H  goto_xy(j,t);
5 n( `  o' h- U  putchar(' ');. P2 q. D% b8 G3 v9 q
  goto_xy(j,s);  A# [: M: B- X2 m# ~% H
  putchar(' ');
/ m1 {5 J( N+ s' O0 L5 o  delay(10);
; M- ^6 |3 q- T  b$ U  }) s/ i1 n$ v9 j- a- y' n
  }4 S  F" m* k8 _: V8 z3 C8 K# I" T
  /******************bottom screen clear(自下清屏)********************/
- o& }) o; ^: m" `# o( w
+ u: w( U# P/ G% }" Y  void dcls(int x1,int x2,int y1,int y2)
! S, e. O4 h, T: H4 E8 s  {
* x2 S0 X8 l8 X* Z9 m0 S  int t,s,j,i;
# m5 d8 B6 @1 a! l) L, u  t=s=(y1+y2)/2;( v) @# r" b# G5 g, f2 k$ k% s
  for(j=x2;j>x1;j--)
( S5 L5 j/ ]5 {- {: C  U  for(i=y1;i<y2;i++){
8 t; }1 u1 u  S5 s  goto_xy(j,i);
% g( e5 @% k! W- T' O: C: }  putchar(' ');
; p' Y: H4 |" u: @  delay(10);- Z9 l/ y# u! ~0 \7 x
  }
& |3 A' I' ]0 Z' _* X9 M  }2 \* D9 T& x! `/ s! ~
  /******************设置光标子函数******************/
: F( r; m4 }% s0 w; ]
7 j* N2 F' u$ q* V, v  void goto_xy(int x,int y)
; D, n; |5 G9 K+ y* u  {. A0 M' w9 a- b6 i% r3 O
  union REGS r;" d5 l  B9 T/ V; a8 [5 \; f
  r.h.ah=2;* a( W1 E0 c7 m1 l2 K
  r.h.dl=y;
. D5 u6 V$ R5 }" a, r" |  r.h.dh=x;" e* M) f) ?' m
  r.h.bh=0;0 y+ @# T+ W7 x) i" T6 Y
  int86(0x10,&r,&r);
) g, }5 ?( _6 R5 i3 L5 H  }
5 A: M" `' y0 G7 v  e  F' q* e; z8 q: }0 ?$ {" x
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
; G; K0 Q- y! v, C5 ?% A. c; v: f
- p% t9 k/ \2 O) ^  m' `- I  void puta(void)
7 `) {7 W/ d4 k1 ^: H3 W  {2 q+ ]& ?, t5 x0 M0 K: B
  int i,j;5 H5 A7 {( A6 F: a- m
  for(i=0;i<24;i++){
- X" p" u# ~* B: P% p+ `. [  for(j=0;j<79;j++){, `3 D7 f- i/ T: Q/ {& a; M
  goto_xy(i,j);
; \) y! b* L' [$ b( @$ ]  printf("a");- Q3 k& ~! \: \: @
  }  m4 `6 |4 f0 S0 r' L$ L. l! O$ j
  }/ A0 w1 F. @8 h/ J9 k- B
  }

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