返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
6 Q, L( Z# c! M+ k' h% `! P
) ~9 S, t, f1 X1 _/ C* h0 x2 P" Y  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
! s1 b3 m# A: V. h# R8 V. B; H. K! F% n! V# X% o8 s- k+ H" g
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 7 R8 W* L3 m' i' x' d  P: A3 r
  子函数及演示程序:/ g" z1 n9 B1 ~, G) m. J# V

- U' s8 S! e, x: A  #include<stdio.h>
8 n3 h& t% M4 w) [5 V3 K' J6 `' }  #include<dos.h>( j+ w2 j: C7 n( y" f2 d5 |
  #include<conio.h>6 M. Y7 y; I' @! L1 P9 d- P) s' h1 V

/ U4 A3 E. J) \  void goto_xy(int x,int y);8 ~9 s$ C4 d' a9 i  j
  void dcls(int x1,int x2,int y1,int y2);) B! L# b& A1 H- [
  void bcls(int x1,int x2,int y1,int y2);, l: `3 |5 H7 @9 b9 F, q8 t
  void kcls(int x1,int x2,int y1,int y2);# t- L5 |; |" n+ X; P
  void recls(int x1,int x2,int y1,int y2);
1 v+ N$ m; a& f* H, i  void zcls(int x1,int x2,int y1,int y2);
0 L/ @4 k$ f0 @# z# f. d  void puta(void);
4 u: c1 M* |, _# J/ e4 ?* O# {/ }; Q) s
( M; A- g: z$ L: d4 N
  /*--------------演示程序---------------------*/
& t# {2 ~" O' ]7 Y9 x2 M/ |  h: V& b  main()
/ m5 n! r( F; ?! K  {5 `" ^1 ]2 c% \3 x7 e- b" v& e2 D
  puta();; t1 \0 w+ e8 H* i# H
  getch();2 d- j# j( w( E' G  D
  dcls(0,4,0,79);4 N  O& A% K$ ]6 g# X( A
  getch();# O0 {6 h8 U/ _% N
  puta();
1 u4 y; e+ ~  K  getch();
5 T; H, u7 a! t' b7 |  bcls(0,25,0,79);& d* k; ~0 a- b5 ]3 K- x' A
  getch();9 b& J0 O+ {: Y& q
  puta();
1 v& T6 m8 `  I; f, v  getch();6 k4 s* C0 m4 N- l
  zcls(0,25,0,79);" \$ ~8 ?% Q3 _, k
  getch();
4 L. Y: ]. C$ G3 w0 \- V' w$ N  h  }9 e2 _) m* x8 ^( l. i
  /*********center clear screen(中心清屏)***********/$ C4 `$ y; Q! X
  void zcls(int x1,int x2,int y1,int y2)% O8 `3 ?& u8 ~# M6 n) f- Z, Q+ W8 H
  {: j( Y- `/ g) \4 r$ ?* K% C5 S. ~
  int x00,y00,x0,y0,i,d;, N/ h: I( J+ C" R  S! k* k
  if((y2-y1)>(x2-x1)){
1 a7 j. Y/ P: }5 M% b  j  d=(x2-x1)/2;
$ s- f5 F' v0 [" m/ n! @  x0=(x1+x2)/2;
' K) o' P% I6 N2 n& K% m3 N, }  y0=y1+d;; J2 u7 m4 X4 i; j, @6 Q- _" |
  y00=y2-d;
) {: {3 s# K- _' S( f7 e  for(i=0;i<(d+1);i++)
' [7 U8 ?% _" _( g# j7 h6 R# M  recls((x0-i),(x00+i),(y0-i),(y00+i));
3 w% p. @! A$ `3 C  delay(10);
/ r' L. ?0 A: o, L  }* v( t! B3 f4 I9 H5 N
  else{  ]* ]* q7 w, T& b) n' P' C  ^
  d=(y2-y1)/2;
  W& Q- Q0 s; m1 \9 Y4 }  y0=(y1+y2)/2;
( F! ^& g. ]/ l) k' o( C  x0=x1+d;
7 x1 V# A" Z4 i% y  x00=x2-d;1 q" ]6 |# y$ ?( q  d* _- Z
  for(i=0;i<d+1;i++)
6 H9 Z" v4 n4 x  recls(x0-i,x00+i,y0-i,y00+i);5 n! l+ ~( Y7 O
  delay(10);
, Z: h8 u2 S, P3 {7 j7 }  }# E6 j1 n3 l+ a. G* c
  }
4 ]) P1 r( d/ R7 q  J* V' U/ J
( G2 A3 x: ?- r8 E7 ^& b" Q  /************* clear rectangle side(矩形边清屏)***********************/
0 Z! V6 w' y- b( R/ W$ r/ t( H6 n. _! D9 [, G  j% x
  void recls(int x1,int x2,int y1,int y2)
9 M$ s" E' M! S+ g" D) Y( p  {
1 V; n& @$ b" B9 C* [; g( b  int i,j;
( c3 x' t1 l4 P- Y& I$ c  for(i=y1;i<y2;i++){
; i/ J4 {* _. H5 V    goto_xy(x1,i);
$ u4 P- P) j$ J5 y7 @1 h  putchar(' ');9 z8 V; y$ A  U8 x/ [* e/ N
  goto_xy(x2,i);, B: @% d& x  M: A2 T1 ?; c
  putchar(' ');. |& z+ I$ d& C* p; g( x! E2 r
  delay(10);( Z5 O! W5 q7 d, h5 E4 B. \# D  w
  }9 b. l5 s9 u0 V
  for(j=x1;j<x2;j++){% X  [5 j2 U' g7 X: e: R* A2 m, ?
  goto_xy(i,y1);
. ]' T3 B2 y; S3 u# o  putchar(' ');/ Z, W. P& U3 Z7 A* F: k  a
  goto_xy(j,y2);8 G8 I9 r. m6 x! I" B$ P& K
  putchar(' ');- N! t  u! h) b) W
  delay(10);# r6 r2 M0 u& x" V
  }; W* v. |# @, y$ n
  }
0 g  N6 C) g* r, ~1 M; w* Q  /******************open screen clear(开屏式清屏)*********************/
2 o& N6 X+ F8 N" r
! |8 a! {) c# C; K1 j6 c2 J; T  void kcls(int x1,int x2,int y1,int y2)
2 G% X( q3 n  a; \# Y  {
7 G/ o# v) ?3 f  int t,s,i,j;
" l. I, j1 p( W  r5 J7 E0 [. P  t=s=(y1+y2)/2;
1 Z* P# t, O, ?: Q, i$ E  for(;t<=y2;t++,s--); ^( f& E6 |. s) E
  for(j=x1;j<x2;j++){: O: N# `6 R' [2 S( M: H$ u; l
  goto_xy(j,t);
/ ^) a6 x+ V! C* n! h* b* r1 e  putchar(' ');: e& M# j' Z4 w$ X4 g; P% g8 A
  goto_xy(j,s);
+ C2 G" e) ]" \/ e' J/ I  putchar(' ');
8 d1 v0 p( s$ G3 g1 V  k( _! l' y: g  delay(10);% u8 O* U; ^) d! q$ k1 f; T& a
  }
# o! g. A- q$ c9 U  }& x! T  F* l/ b5 N7 G& f
  /*****************close screen clear*****闭幕式清屏*******************/* ?, I3 `$ Z' B6 d4 c; ?

" E* v; k0 u' ?+ W* @& }1 ~  void bcls(int x1,int x2,int y1,int y2)
1 F! [1 A! E+ L0 U+ Z% d) S  {  j+ A7 w; H9 }7 s' r$ X. w/ e) d
  int t,s,j;
& r; R1 \. j; ~  n! R$ {& Y# `+ X  t=y1;: ?! S  R7 [0 p) r7 |
  s=y2;% @/ `8 H) G6 l4 s
  for(t=y1;t<(y1+y2)/2;t++,s--)
& J5 l1 S6 P2 g2 h) M2 ?! g! B  for(j=x1;j<x2;j++){
( Z6 \7 y% ^! W5 _3 R3 U  goto_xy(j,t);' }5 j6 w3 C  C1 g  u* W  p
  putchar(' ');
: R3 ~: _, w; u2 a7 I  goto_xy(j,s);
* o5 V, `8 x) |" ?5 N$ Z8 {% `8 F  putchar(' ');
8 V# s3 M+ f" u0 q! Q  delay(10);0 }5 O; B) x' D  M. e( ]
  }: a9 R  j2 f$ M: W8 x! T( v* i; j" ^( ]
  }
/ g9 ~3 |" p& d" [  /******************bottom screen clear(自下清屏)********************/
6 C2 I# H$ c7 G4 p$ `7 v! v1 j* r
$ y5 X7 J* g1 ~. ^" w  void dcls(int x1,int x2,int y1,int y2)
/ S. e8 B4 {7 U  {! K; ~! q" E6 w  x& m  Z, g
  int t,s,j,i;7 u1 X1 c0 V. W  I- N8 [
  t=s=(y1+y2)/2;
. n2 Q4 ]; B, w( A8 z& ]3 U  for(j=x2;j>x1;j--); t) J# d8 |6 ^  a% ~5 B
  for(i=y1;i<y2;i++){3 @; b! ?7 r7 a9 Z3 J: z
  goto_xy(j,i);+ @+ u- A# C9 u4 @' n4 a/ {( e  V
  putchar(' ');2 v3 `3 a9 Z) [
  delay(10);+ z4 r3 C# P/ j! B9 Q3 t
  }3 h# m; E; K- H& D& K
  }) n' b( K! K5 }+ z, H
  /******************设置光标子函数******************/" X+ A( b/ e' i$ q* |+ Y

6 _5 ?# S, z1 @9 P! A; e% \  void goto_xy(int x,int y)8 {6 j8 |/ e6 S+ g9 l. X" N( p
  {- r' d5 f% q$ E* [$ {, R) n$ s# H
  union REGS r;4 _+ L+ Z7 ^/ r( s6 Z- a
  r.h.ah=2;
% f. ^* l$ m, p$ f! C  r.h.dl=y;  q) m9 p: V! _3 K
  r.h.dh=x;
% \2 J4 z4 S. S1 m; r$ i" T( ?  r.h.bh=0;
$ Q# l* k% x7 m  int86(0x10,&r,&r);
% e! n9 \' G( i' Z  }
# l0 \7 @7 L$ J( C' ~+ H$ ~' M$ _
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/! h: z; b- m2 z+ K3 H% q6 Q" O1 G

0 X' T( D# V  S5 A2 I  void puta(void)
, T9 q5 U, W: L* N1 q, t) n  {
6 Y  k; N0 U0 o9 [% E/ ]: x  int i,j;  k" n; M$ `' P! B- }$ i4 z
  for(i=0;i<24;i++){- a1 X6 H6 Q2 J- q, b
  for(j=0;j<79;j++){$ V) t6 \2 k& f. C- \# ^, B. o
  goto_xy(i,j);- z1 I. q5 p6 J7 z
  printf("a");4 m" b( v4 ~1 N5 o: U2 R. S
  }6 m4 O% a7 @) m& r5 ^2 x
  }9 z, H/ p* q3 B
  }

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