Board logo

标题: C语言艺术清屏 [打印本页]

作者: zw2004    时间: 2008-1-21 17:14     标题: C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
( ^  k- G5 Y  L4 I  X. ~5 Y! k. C! a/ T' s+ ~$ R+ l
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
7 x( [4 x4 r! p; ~* t+ E4 h- ^4 V4 W& @$ t; B6 w
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. - w  ?  c  s3 u
  子函数及演示程序:- M! V; k- S4 Q+ m! ]
3 m( |# K( A$ {6 k+ T
  #include<stdio.h>  r+ t; Z$ B- M( ?% g
  #include<dos.h>
- o3 s3 v6 h; }1 e- V! v$ m  #include<conio.h>. s4 ]( x" ^- E' i
4 U& e& y5 g, A$ ?; q' O# N
  void goto_xy(int x,int y);& c7 h, p! v" O4 s( f) }
  void dcls(int x1,int x2,int y1,int y2);
$ P2 c- _. R+ m( x  void bcls(int x1,int x2,int y1,int y2);% ?/ o1 t5 x0 O
  void kcls(int x1,int x2,int y1,int y2);2 }" i1 F7 F5 X; d
  void recls(int x1,int x2,int y1,int y2);8 H5 A5 a3 O5 K5 v4 {6 J  p
  void zcls(int x1,int x2,int y1,int y2);: v4 |1 ?2 c5 v* R
  void puta(void);! _& R' w9 c; D

- E+ H% p* G0 w* P9 j  B/ a$ p; I
  /*--------------演示程序---------------------*/
3 ^2 X/ T; t2 l% h' k5 S3 \  main()8 n# K$ [" ~' Z) ^) U% T
  {8 `0 U4 K% M0 x% T0 L7 B& q
  puta();
! v' J& D# b% Q8 t  getch();9 D) T4 L  m$ }6 Q2 B
  dcls(0,4,0,79);
- U% E  j8 q0 m% i  X' v. e  i  getch();7 M' Q& ]5 Z- K; s  S( U$ X
  puta();* A, x4 l; ]. Q& D& W' H
  getch();3 ~) V" j! U9 u* g/ X
  bcls(0,25,0,79);* m5 T' A! J: \8 v/ `; V
  getch();- N; F! P; {9 w6 b* ]* Q7 {
  puta();
/ c8 M0 y$ D( [; n% q; Q. E* C/ f  getch();# @1 X* f5 `0 J1 L" W1 P& J' y
  zcls(0,25,0,79);
  {3 K. P2 S) c  getch();
! a( Y% ~; U% a% ^* r: Y  }1 c0 N- _; D3 r4 \
  /*********center clear screen(中心清屏)***********/* i+ M% j9 m# n5 T. J$ `
  void zcls(int x1,int x2,int y1,int y2)9 @9 F  F$ R) ?  `
  {3 }! q# S! t/ Z
  int x00,y00,x0,y0,i,d;% x) k4 h1 P/ ^* W5 G# \6 T( @
  if((y2-y1)>(x2-x1)){
) `6 m0 E5 e2 {- j) X& u4 E) J  d=(x2-x1)/2;
  Z0 O2 u9 |* D1 C3 o3 s  x0=(x1+x2)/2;
& k% Q4 \- A* s) x: u8 p  y0=y1+d;
: _5 b5 W4 `5 ?9 m  y00=y2-d;1 ]+ ~/ a2 H1 z) O
  for(i=0;i<(d+1);i++)! i5 k  e9 w3 [  j% n1 t
  recls((x0-i),(x00+i),(y0-i),(y00+i));
. x, P+ ^: S8 X: P' K" c* L3 ~6 R  delay(10);+ X: k; N! L) e, |! u2 ~. d, w
  }
# _* M5 c" p5 E3 D  else{& Z: O" x0 w0 p5 ^! W5 O
  d=(y2-y1)/2;9 [" R# g3 o2 [; h* H$ E; M- W
  y0=(y1+y2)/2;! m( b& f# ]* w/ @. w/ M
  x0=x1+d;5 t$ W& \3 k$ d
  x00=x2-d;! Y, v+ p" e* W* R- E& m7 `& K- e
  for(i=0;i<d+1;i++)
' H- n) b  ]. |4 Y9 K( E  recls(x0-i,x00+i,y0-i,y00+i);
. c7 s  G/ n( s9 E, y) j  delay(10);
9 R: Z8 |# A2 u/ h& P% z" R  }, J. k& @; I8 z7 }' n1 {
  }4 Q, p9 N6 z: z# r
: o2 Y: Z6 M, j  i. Y
  /************* clear rectangle side(矩形边清屏)***********************/' i6 v% z4 ?0 K: m" [' [- |/ ?

9 S5 M! ?5 i' r# [1 K$ @  void recls(int x1,int x2,int y1,int y2)% {( Q1 O* Q7 R: ]
  {
/ c# V5 o! m" G6 U- i' i: j  int i,j;
: |5 u3 g' J: l! z2 Y/ Y  for(i=y1;i<y2;i++){
+ ]$ I& I; H- g4 l    goto_xy(x1,i);
1 z& M9 g  e% r- R/ r. o  R  putchar(' ');  S9 r! ]4 v" S5 q
  goto_xy(x2,i);
9 \' n, F7 ]6 H: c% Q! q  putchar(' ');
, s* W+ {7 \' o9 J  delay(10);3 g+ ~  s" H. ^% c; }- O
  }
! J7 W* a6 ]% B, A+ }/ L) H  for(j=x1;j<x2;j++){  [, g1 ~6 S  Y! b. K7 X! g6 Q
  goto_xy(i,y1);: R! v2 D# c. m3 v5 x9 ^% F
  putchar(' ');
( D$ m$ W* H+ c0 K% k( M0 R, |  goto_xy(j,y2);2 C; q2 N" ]5 v' @0 q
  putchar(' ');  f4 b5 {+ L# T3 }7 q
  delay(10);, {  ^! o$ o, u* Q# j; U
  }
7 j+ m, L0 x+ p  }+ v4 c+ N* o/ g- U; f+ y
  /******************open screen clear(开屏式清屏)*********************/5 _: N2 w) E1 f# H* W  z

/ k. o* `: h- i% _7 P* y" E" x6 c  void kcls(int x1,int x2,int y1,int y2)! I( x9 @$ ?$ n  j4 D
  {
9 g* F0 Q3 m; p! Y# V+ j  int t,s,i,j;
7 S# u8 a9 N2 b- U7 _+ @0 c0 y! N  t=s=(y1+y2)/2;: r$ b% I/ d5 Z9 m7 }) w
  for(;t<=y2;t++,s--)& A  W1 O6 T; z4 z' `, ]+ E3 e
  for(j=x1;j<x2;j++){
0 S# q2 G: ~% P5 R  goto_xy(j,t);
  M2 j0 O8 ]6 B5 m- R  putchar(' ');  n3 _" G, h9 c7 j6 L5 l" d+ [  W
  goto_xy(j,s);# H/ X. d6 |6 @. x$ ?
  putchar(' ');
# o: W8 T( l! s7 Y" s0 X+ S; a  delay(10);
& J* q( _+ n9 v# U  }
' ?1 w2 h& g8 l8 g  }) I/ y0 o' N- a+ P' }
  /*****************close screen clear*****闭幕式清屏*******************/
+ w; E$ d% N1 R5 J9 |; M; T- S2 b) m$ w+ K5 U$ E' L
  void bcls(int x1,int x2,int y1,int y2)1 \; H( W2 Y% l" F1 H
  {
) R, p8 e8 H" w  int t,s,j;6 ^2 x  c6 ^+ A/ ?2 \  i8 w3 G: U" x) V
  t=y1;
# ^1 l* U* U4 N& f( p* @. ~7 e5 Y  s=y2;
, s+ m" _: |' a  for(t=y1;t<(y1+y2)/2;t++,s--)# m& n$ T/ |: {7 d- F
  for(j=x1;j<x2;j++){
1 ]9 X( e# ?7 z* b; h  goto_xy(j,t);
' Y+ x7 z+ m6 S, h9 m+ h  putchar(' ');5 u* K/ s1 A$ n( O% ]
  goto_xy(j,s);
& G. `0 `2 n; z3 Q; N  putchar(' ');
1 ~5 D3 k- U9 v6 o, q% r  delay(10);& T! P: G. M2 ?! z, b5 |
  }
1 L& M* j" Z3 A+ J8 n" w! D2 Z  }8 r  E& f0 Y- t+ p+ L9 K3 X5 L
  /******************bottom screen clear(自下清屏)********************/
# R1 D: R' D- S  p7 h( D% N
) {6 P% q; U! X- k+ {  void dcls(int x1,int x2,int y1,int y2)
& p! ]# k+ o7 @2 a  }" {9 X  {
3 e# P, _4 @1 j* ^% i  int t,s,j,i;2 K, ~3 C5 }1 j- u4 k+ k
  t=s=(y1+y2)/2;7 E9 i. k0 P  ]: s: ^. t
  for(j=x2;j>x1;j--)
2 |7 j& R5 Y4 d- c  for(i=y1;i<y2;i++){/ ^  t# {7 a9 U& h. P- f( k
  goto_xy(j,i);  i( c9 [9 B+ X8 K, g
  putchar(' ');
2 M/ x6 X' M" |- O  delay(10);
1 w% C: S1 Z) @; f, B  }
' ~% N4 t) V  @9 r5 n* X  }" v4 h, y1 s& @2 L' s' Y
  /******************设置光标子函数******************/3 S0 {3 _$ ~: P% C! ]0 g
9 W& C1 x2 q8 l7 a1 g$ J
  void goto_xy(int x,int y)( p6 O$ S. B: O0 ^
  {3 w7 G' [" P. g) \  K9 G) b/ ?
  union REGS r;
$ H  x* H# n# @* A+ u  r.h.ah=2;
$ y0 d, Q. ?. V5 E  r.h.dl=y;
, {8 _6 O% |3 I( S; g  r.h.dh=x;" I6 g1 ?8 f7 F% M* h' l+ t
  r.h.bh=0;3 Z9 s! h- n8 v, i
  int86(0x10,&r,&r);9 V# L* c' t2 j0 f
  }0 T# [8 n8 q) i8 o/ M6 H) a  C5 Z. V

+ N4 k2 D7 S! Z3 I3 o' O/ [  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
: d- P' n/ H4 e' ?4 ?  X+ [( @2 I
& S1 ^5 \+ Y( ^. @  void puta(void)
: P8 _8 A* f& T* N) l1 r5 k; o  {, \0 K9 M5 E5 t1 q* a# a
  int i,j;
. ]% s2 O. M# b8 @3 L' R  for(i=0;i<24;i++){3 Y4 ?- {4 h' u$ f; W
  for(j=0;j<79;j++){
, ?- f' a9 H' r0 y( X1 p  goto_xy(i,j);
& U) @; T6 D! _6 b+ l) c  printf("a");
' w: y  D& _/ R9 g" K4 V0 s  }% d3 T( _- c1 H; v1 T0 G" }
  }
9 n4 g& b* {7 i) ^- @1 u- d/ W  }




欢迎光临 捌玖网络工作室 (http://89w.org/) Powered by Discuz! 7.2