Board logo

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

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

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
5 i+ f4 Y" n0 M% P
1 h* y; K1 R- E9 `% b& j  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
# G7 @$ @/ ?' n: j. I8 w+ z* X
4 J' H/ q3 L0 o, s% O3 H! L( Y  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. / f9 x2 U* z8 a
  子函数及演示程序:
, n% ^' e5 H6 l
3 X5 \5 {' y& k& W  #include<stdio.h>/ e  R2 X* D/ w5 l' P) `- @, y
  #include<dos.h>
2 l; v% K* _% @9 d& V" [: ?  #include<conio.h>
5 Q! e! m2 `  G- D
; _5 M6 S  [* z# |  void goto_xy(int x,int y);' A+ N' q, m, V: W4 h0 r* n3 O. U
  void dcls(int x1,int x2,int y1,int y2);
5 f9 Y6 ?" a% V$ o+ {  void bcls(int x1,int x2,int y1,int y2);; v$ p4 |5 x, g# M" p, H
  void kcls(int x1,int x2,int y1,int y2);
; ?( c1 S' `% u7 j( o  void recls(int x1,int x2,int y1,int y2);+ t" U# O9 \( C" }. a
  void zcls(int x1,int x2,int y1,int y2);
0 p* v/ e: d+ [; u" e( _: c  void puta(void);
' H. V* Y% `# C6 A' x5 w: I# M: s8 U0 X& K
3 j/ i4 d6 l7 s' s/ [8 M# c
  /*--------------演示程序---------------------*/
& C, P% l& {: J/ V  main()
8 A1 S. {$ J. T) F  {' D4 p* u6 c5 [
  puta();
: E/ K9 `- h4 n) H  getch();
% r! [3 w5 @9 [% U  dcls(0,4,0,79);' a- S' T% w4 ]
  getch();
) Q5 c. |7 M+ B& e, L3 T0 V: s' _: U  puta();
# W0 B2 u1 m! f" ^8 X, @0 _; M  getch();
& j- m! O- E, J' _4 k  bcls(0,25,0,79);
" _$ D9 q6 A( R# c/ U" O. m  getch();
! p) f; \: M# \4 Q1 x. U  puta();' p+ {4 c9 ~1 Q" Q5 a2 s* @
  getch();2 r6 b4 t6 L2 J. M1 L
  zcls(0,25,0,79);0 p- Z" z: s( v, V; y( i
  getch();
2 Y4 e4 ]4 o7 Z' y2 K. K: z4 d  L  }2 Q" a/ K! I* Q; K2 u+ \' f; ^
  /*********center clear screen(中心清屏)***********/
# e& h& ~" X5 x$ P* y5 f  void zcls(int x1,int x2,int y1,int y2)
4 `6 }& l2 @/ |: {  {" u* M" R3 @/ @; a
  int x00,y00,x0,y0,i,d;. q( w0 D/ k/ Y* V0 K
  if((y2-y1)>(x2-x1)){& B% W9 ^7 V" C" J: D# Y
  d=(x2-x1)/2;
; ?/ w0 X; Z) A8 D  x0=(x1+x2)/2;
7 R& ^4 Y9 j9 C3 O, W+ R  y0=y1+d;
, ~+ u; Q' {+ M8 e+ F, g  y00=y2-d;
4 B2 m  f* I4 l0 g' `- C3 k  for(i=0;i<(d+1);i++)
$ \7 P9 q9 D2 S+ p. z3 G  recls((x0-i),(x00+i),(y0-i),(y00+i));3 w2 _$ U0 E+ g) j9 L2 Y" B
  delay(10);/ X' g3 r# c! d6 y$ {/ J5 g
  }% p4 Q  w# h5 V6 {! P+ @6 ^4 t9 B/ ]; q
  else{
: d% Z) H# J/ M. @, W) s9 y6 o4 w  d=(y2-y1)/2;0 F- |3 K2 _% B, R5 [% H
  y0=(y1+y2)/2;& P  \+ @! F! H; f8 w) c0 T* }* g* M
  x0=x1+d;
4 A7 C9 i- \/ R4 |" a  x00=x2-d;, ]/ v- X' i# |9 p9 p/ A1 ~" V2 X
  for(i=0;i<d+1;i++)# ~7 X+ S. a) n. @
  recls(x0-i,x00+i,y0-i,y00+i);& P+ l% n' N% b' t) ~1 L1 `
  delay(10);' ^- ]" j* m; M  z3 u
  }. k2 `7 t* L+ _  h" i( r0 e' h6 j
  }
: y" @. q( ?3 [2 r" ]# H; o0 l$ v% ^8 W/ c0 s
  /************* clear rectangle side(矩形边清屏)***********************// N0 }) v! C7 o9 v

1 [4 g8 K( O* Y$ b- F5 A. p  void recls(int x1,int x2,int y1,int y2)
8 J" K0 ]! F, G8 y1 E( m$ ^  {% I" [' f/ l, o9 J0 N0 J/ `$ }8 u
  int i,j;, p* a+ _; o# P8 A
  for(i=y1;i<y2;i++){6 x3 [4 o3 \; S
    goto_xy(x1,i);
! v; U3 U5 R" s0 U% A  putchar(' ');
& y2 }$ ]6 D/ @- q/ ~! V  goto_xy(x2,i);# L9 p5 M' @8 g. i) Y! A
  putchar(' ');
; X" o9 `4 l3 C1 |( V  delay(10);! S5 J% c$ e( j- ^/ U- f
  }
0 n5 ]* r9 ~" i1 M; t/ a8 Y  for(j=x1;j<x2;j++){
  G2 S) y2 H0 y+ `- ~6 R8 L0 Z; F  goto_xy(i,y1);: U' V' H+ X5 o1 e7 J
  putchar(' ');$ ]) W4 V' _" m8 O: _
  goto_xy(j,y2);+ w* |, T8 I. E- l: T+ G8 W
  putchar(' ');
. @  |( k1 i. h  delay(10);% o8 _/ P7 i$ \: P- R
  }$ Z, \' y+ E+ N$ m, A# O6 P
  }* r' c% _9 E8 D& T9 O
  /******************open screen clear(开屏式清屏)*********************/: P) j4 L6 y8 ^4 y
$ M- F8 h/ y9 g% z2 l/ x) Q
  void kcls(int x1,int x2,int y1,int y2)* _2 o  x3 p5 f, R
  {
# l. `1 l. _( O4 ^' S  r5 ?  int t,s,i,j;
( L# c: M$ n9 F6 d+ {  t=s=(y1+y2)/2;
. g7 }; ?. F" S! H8 J1 b% r  for(;t<=y2;t++,s--)
. S8 p0 ?- ?# A- F' d: N. Z  for(j=x1;j<x2;j++){
% {5 k! u6 m2 @' }* m  goto_xy(j,t);
+ B9 `) i) Y0 N+ j" d  putchar(' ');
: i% t+ i* L1 k& s  goto_xy(j,s);
/ Y" U: v3 X2 b6 c& n9 z  putchar(' ');
1 {( V# P5 `3 J( T5 n* C  delay(10);+ I& |9 V) b% B
  }
& Y3 r4 M6 A' T/ R. f3 I  }
- G$ ^# J+ J! f# H  /*****************close screen clear*****闭幕式清屏*******************/  C9 N8 [2 [, ^, B

$ N9 K" X/ `1 C  {3 j) T; d  void bcls(int x1,int x2,int y1,int y2)5 Z% q# C* }' V) `2 {
  {8 o1 r  o+ P1 c% _
  int t,s,j;5 W+ I( f" k' p! G- ^
  t=y1;# B, d6 j; h5 U' |5 k, K
  s=y2;
) S( U9 K# K" O  for(t=y1;t<(y1+y2)/2;t++,s--)# q  r! U7 \9 _; \8 C) \
  for(j=x1;j<x2;j++){
+ a/ q# j- w2 ~; U6 t6 J  goto_xy(j,t);
  g& T4 `4 i9 y0 }  putchar(' ');
1 X0 e5 c0 E  t( |  goto_xy(j,s);2 M& R' \; v6 H$ x* O
  putchar(' ');; n' R- S. Y* X1 P' L5 c2 A. d
  delay(10);
. f" I% f! Z$ D  }" k) H' t3 \- k/ y/ @% m( N  ]: J# Q
  }
( M3 m: \% d/ K" O& s& @8 n  /******************bottom screen clear(自下清屏)********************/
: |9 z. C$ A! i1 S+ \. ?& F1 ^) ], Z" m1 ?8 [, u& i
  void dcls(int x1,int x2,int y1,int y2)3 ]: Y# S2 c% M! o; `
  {
% J+ m" z7 x4 t7 H2 e5 @5 ]  int t,s,j,i;: z+ ~$ ~+ R6 Q7 F1 N
  t=s=(y1+y2)/2;, B$ U8 \  l' M
  for(j=x2;j>x1;j--): J" k7 y6 ?2 X- h
  for(i=y1;i<y2;i++){
) g. r8 }# q, A1 e  goto_xy(j,i);
/ T' p( y. U3 S, d  putchar(' ');' s; b! g7 O2 w/ t! ]8 s
  delay(10);
" S: i# M9 C! j. v3 }  }( G) v1 a- D9 R3 U/ D& p2 v
  }0 [2 ]1 R$ C2 b& }- B
  /******************设置光标子函数******************/
. [) h, j9 M% u* z6 ?- _) a( ^4 Y$ O& F, Z: T8 m9 [3 P
  void goto_xy(int x,int y)
- x1 |$ d5 H0 ?/ h) K% f/ Q- G  {! X# G) a" L% S; o
  union REGS r;8 }; V- D( L  r  J
  r.h.ah=2;
0 N, }% T. V" V8 w$ j  r.h.dl=y;: W5 R; Y1 P" E) R/ S# ^7 L9 y
  r.h.dh=x;
/ O! a4 L& N; R; }% ?9 |  r.h.bh=0;
& d7 ]0 i9 O( \3 J# T& Z( h) t; \  int86(0x10,&r,&r);
" d# ^2 Q6 @' ?5 P8 P: k, a  }
5 l6 Q( A& K8 q$ S
! ~8 l( _( e1 O8 i  /**********************在屏幕上打出一连串的a字母用于演示程序******************/5 s5 S1 {3 s2 Q

/ p8 I7 [, }0 _4 Y4 f: \/ v  void puta(void)
* j4 y, q3 e- `7 O& n  {& s5 S; G& c3 t! X% E5 H) t2 X! E. ~
  int i,j;6 R8 k7 o, R0 B: }  }
  for(i=0;i<24;i++){! m  V/ h( F" m+ m0 T5 t
  for(j=0;j<79;j++){/ O1 Y& \% h' O/ [% m3 x
  goto_xy(i,j);0 e- y; q) Y  a# e9 t) @
  printf("a");
5 t, @" L% h  R( `1 f  }
  l) q" ^8 x1 a" m7 g  }
  K) V4 @+ h4 y+ Y, \0 B* R  }




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