Board logo

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

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

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
, [  h; {2 y* n* O
. l0 T: t0 r1 u1 D. N8 e! t  @' w& Q& h  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
/ o* `$ Y' Q0 x% X. r% W, R% L6 Z$ G/ U6 r& I3 u* _5 E
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
# D! L. p" h- Q! x  y8 N0 a  子函数及演示程序:
, o' S! k4 u' ?
) ?6 H' A  d4 r% D) X0 R  #include<stdio.h>. C4 @# r8 q/ Q* v; X7 o( W  u
  #include<dos.h>
5 r* l% X7 g; Z/ I+ I! M  #include<conio.h>
4 W& W2 `/ Q2 f% w4 y: [. m- ?; L
  void goto_xy(int x,int y);) @. [2 I7 G: s' h4 c
  void dcls(int x1,int x2,int y1,int y2);+ O! B* U$ R$ e( n% `0 a
  void bcls(int x1,int x2,int y1,int y2);
5 K) c& {" V2 a; {6 O8 _  void kcls(int x1,int x2,int y1,int y2);5 e6 a' y. _0 i# J4 L9 T
  void recls(int x1,int x2,int y1,int y2);9 ^5 B7 m. m; J( i
  void zcls(int x1,int x2,int y1,int y2);9 |7 f" v* v3 O8 y- u* B
  void puta(void);0 P3 ~: q; }2 H1 b" L: n, R/ b; u( n
7 C! m& h7 M+ e6 k4 n3 m6 G8 y2 R
' T8 d, U8 s; b& X; B
  /*--------------演示程序---------------------*/1 B& D6 G( F1 \) U0 S9 N8 G
  main()
. G& ]0 I6 `4 \! I3 _  |! E/ l  {  I8 j. w" f) [) K5 V6 O8 Z
  puta();
* L3 U! L% L2 i& u  getch();
5 }7 t. @- P+ E) P+ t; t- e: H) {  dcls(0,4,0,79);1 H1 S9 d! a8 t2 Q: N7 [# H
  getch();
4 a" Q  j2 `: I3 G' V( b! {  puta();
* F  ]8 W: L) U; \% W) X0 U: T* W: H  getch();
8 I# r% j5 A- P3 I  bcls(0,25,0,79);
+ Z$ o5 ^/ i* t; K: P  getch();4 U3 O3 S- V" H
  puta();) f  P2 D- v  N' D2 J& _
  getch();  A9 j7 w  x+ L; x/ W6 H, R1 S3 y
  zcls(0,25,0,79);
7 F& k  P5 k' Y$ B2 t+ U  getch();6 ~6 a  t8 p5 J3 m% Y9 ?
  }
" M; ~! L$ Z/ y% Y0 N& E. f: |9 j  /*********center clear screen(中心清屏)***********/
0 c. T1 [* g3 K& r5 _; f+ n9 N  void zcls(int x1,int x2,int y1,int y2)% ?& G, C; T- t; F' v  A$ k% B
  {2 J$ Q2 c1 q) |1 L, Q) K4 T
  int x00,y00,x0,y0,i,d;( |8 v& h$ y; C5 U* r" O) ~
  if((y2-y1)>(x2-x1)){
3 t% P# M! N3 c( b# G8 N# _  d=(x2-x1)/2;( }5 P) A- e: [4 W# P8 ]8 Q
  x0=(x1+x2)/2;* e; ^% I; `' R/ h# I
  y0=y1+d;0 O3 p7 Z4 Z- B( ^( L8 g1 o4 \
  y00=y2-d;
. e) h  v  K9 L, j5 a  for(i=0;i<(d+1);i++)' g2 I0 o5 ^% x, I9 v
  recls((x0-i),(x00+i),(y0-i),(y00+i));) j* o2 B) N( q& Y- G
  delay(10);+ f/ e% U3 Q9 K, b& E
  }7 t8 v! \6 Q. R7 ?. a4 Q/ v
  else{, F# w% ^$ ~& [/ t1 b# H' O
  d=(y2-y1)/2;
  Z" B  K" j# u" F5 A  y0=(y1+y2)/2;
, D9 j) [; U9 ]' F% D3 F  x0=x1+d;' y& `$ O- @7 r; V9 L' k! r
  x00=x2-d;9 P# X# [7 Z6 U. m3 s
  for(i=0;i<d+1;i++)* {" e# X2 K' A% M: n% W  q4 b
  recls(x0-i,x00+i,y0-i,y00+i);' [/ A! q5 i2 ?$ S# `
  delay(10);5 r; O4 g6 j. X8 Y# F/ g
  }
8 p# v8 b' M- A& F  }
# {, C4 b: i: M2 o6 d% ?+ Z: f, K- G( ]. f) V
  /************* clear rectangle side(矩形边清屏)***********************/
+ H0 j6 a9 i+ i9 e7 E* e, \8 X+ }; ~# |6 P# C( D4 P5 A8 J9 Y; d
  void recls(int x1,int x2,int y1,int y2)
. P2 [- n9 V7 g: M, Y  {/ m( _% e8 }$ v, @5 l& N+ J1 f
  int i,j;  o' \# \7 W$ E5 ]
  for(i=y1;i<y2;i++){
/ c# e" X4 a: l( b    goto_xy(x1,i);: ~. }! P( k8 q. Z0 h
  putchar(' ');# P8 w2 h# i' C" U+ J5 |0 L
  goto_xy(x2,i);3 z" i0 Y4 p6 ?( s) Q
  putchar(' ');
) d+ Z" b# b7 ~# t. G/ K  delay(10);
. @$ D5 L5 ~2 \  I5 U  }' P. V) v5 C% s7 L$ l
  for(j=x1;j<x2;j++){
# [( |- N0 o4 @0 H# v! O: F  goto_xy(i,y1);
' q; r: r" m! i0 F8 w  putchar(' ');* |# u# ^3 \( X
  goto_xy(j,y2);
# C9 e' M' C* D  putchar(' ');
5 L* O+ b, r9 Q: @0 [  delay(10);1 v" d. b  v; u$ \* c" J1 N
  }
2 e3 N7 K1 m5 O  }
) c3 y/ }' Q! D: M  i$ ?' |5 d  /******************open screen clear(开屏式清屏)*********************/
- S8 }" \6 n4 H" D* ^% C1 X0 A3 w7 V  Q& r- Z& T" v
  void kcls(int x1,int x2,int y1,int y2)( T: Q3 u3 _& j; s! |& {/ U
  {2 j- [3 q! X: l7 e% x+ |3 t
  int t,s,i,j;
+ U" [  _+ d7 `5 ^( O  t=s=(y1+y2)/2;; d, J4 y& A- Z
  for(;t<=y2;t++,s--)
& ?9 ?: e" e! y  for(j=x1;j<x2;j++){" K1 a0 r3 A+ L% _" Z
  goto_xy(j,t);- o8 A* Z4 S/ A% P7 ~( [
  putchar(' ');: r% f) u! a6 w
  goto_xy(j,s);
: v1 h! p. d8 {! Z  putchar(' ');
! Y+ g6 V& E. S* ]) a6 `( O. V5 c  delay(10);
# X+ a# [. e% X: H# w$ E+ W  }
; ~$ ?' @1 q3 w5 _7 j6 W6 u  }
" [* ]. ?, G: |- t  /*****************close screen clear*****闭幕式清屏*******************/
4 f# q; V' i9 F. d5 T  l
. n: ]" M3 {  O8 K  void bcls(int x1,int x2,int y1,int y2)
. `0 z$ R. I4 N4 V5 g, m  {6 V& `9 u; j/ \2 q, w8 O
  int t,s,j;
& G3 r/ D, N! y  H' j# D. x' I( Z3 n  t=y1;
  A6 B+ Y' t$ @5 g, ?  s=y2;
# c  j0 {. O2 o9 O  for(t=y1;t<(y1+y2)/2;t++,s--)
. h3 E' y: U* s' m" w) ^, l4 Z# ^  for(j=x1;j<x2;j++){4 V  `" `# }8 w& a& J! L% C
  goto_xy(j,t);
  g& g( D* w' K1 K4 g  putchar(' ');
# s" R5 u( i) O9 R' W; t  goto_xy(j,s);
# W; ?; b3 i; Q5 {5 X0 _  putchar(' ');
" k, Z. |# f9 B: f) w  delay(10);/ J2 E, }& B6 ]1 F
  }
# f$ \  x  A% C  }
( |2 H/ j* \6 i$ O' e, k% C  /******************bottom screen clear(自下清屏)********************/
. s: S( d8 n( q; ^& b
: E" u, e1 P' ^! @$ J; c3 l  void dcls(int x1,int x2,int y1,int y2)
, t7 a: S. {6 X  {( K4 {; y% z) K+ ~
  int t,s,j,i;
! h1 y# B+ ?  g' f  t=s=(y1+y2)/2;8 m/ C* ]1 w; i4 A. ~5 v: z: S
  for(j=x2;j>x1;j--)
9 P% E; C2 O/ g- `( t9 ^6 _  for(i=y1;i<y2;i++){
; b2 D3 f8 N% t, A  goto_xy(j,i);: A5 t: [( S7 c+ P
  putchar(' ');
- O1 h4 A/ C4 O- A; P, e+ d1 ^  o  delay(10);
  _" u+ x" Z, K4 i$ x  }) a/ v  }
, l- X2 C4 R3 l: K  }
: i1 R; b* x# k+ c, T. c  /******************设置光标子函数******************/
5 d$ u4 r% J3 l# U" V5 l8 p$ I1 D$ N$ f8 p: P) g
  void goto_xy(int x,int y)% {6 `6 c2 o( q- _; [1 L
  {
  f6 t3 ]! Q; f+ w  union REGS r;" s) C5 @8 S7 D6 {, w: u# ?' l
  r.h.ah=2;+ X  e5 B2 P! F
  r.h.dl=y;
" r9 T: A( f9 ]( Y% T6 H: W  r.h.dh=x;& {( R5 _1 `  M8 U: o
  r.h.bh=0;: Y7 ^; @; p% c; @0 v. I
  int86(0x10,&r,&r);
5 ]. T& d% K7 {$ p: K  }" O5 _4 k% B7 ?8 h7 L( r

3 I/ h" w. C" x, p( b" z6 P  /**********************在屏幕上打出一连串的a字母用于演示程序******************/$ \/ r& g* x0 F9 v

$ D  _2 ~, E7 d3 P) y$ i$ R  void puta(void)1 E4 s' v  ^: |" C
  {
# V; q4 ?$ L: T5 }  int i,j;" X! p( W& `* M2 l% o
  for(i=0;i<24;i++){# y+ f5 T9 T# D6 B% K5 W
  for(j=0;j<79;j++){
; n+ |4 f4 R. Y. {- p& A- Q  goto_xy(i,j);
6 ^1 z% u! ]6 k  printf("a");
( X( N6 u  R  M/ p  K9 D* ^  }$ Q' P0 n- B# C3 C" p4 i' S9 f. d- D
  }- ?# ?) G4 h9 N
  }




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