返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
: Z4 O7 y1 V3 Z0 V% Z" }" R- `" P+ G. @- l7 v: p
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里0 @$ }0 p7 I' g( M& x. l0 W* b# d$ U
( J/ u  g6 v( g4 |
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ; a7 L1 h4 q4 t4 u$ Q) W
  子函数及演示程序:" l; {  Q; t" ?5 n$ b

% e, N8 S8 o, _, U9 ~  S  #include<stdio.h>$ h0 @( J0 w; p4 C
  #include<dos.h>+ g; E# Z" m- j7 Z
  #include<conio.h>
3 y' Z% W7 a! I3 z" P: F6 E, d# a; B0 ?3 _3 l: W6 k; J
  void goto_xy(int x,int y);
# a5 m# o7 N; R& p  void dcls(int x1,int x2,int y1,int y2);
- q4 {4 g7 [$ a, q# P7 j  void bcls(int x1,int x2,int y1,int y2);* \1 k. G7 k4 {& [. q6 c" e' p
  void kcls(int x1,int x2,int y1,int y2);2 D% n/ B, i6 U% D$ y
  void recls(int x1,int x2,int y1,int y2);
; I" @2 w; K6 Y7 _6 _4 P- \: O  void zcls(int x1,int x2,int y1,int y2);
' E: z0 ~% S) q6 @, V# V+ l0 ~2 L  void puta(void);
1 {7 p8 Y$ R' ~$ [) o
7 N% v% o0 Z- j. ^4 S
* r; n- B  ~, J; ^' }  /*--------------演示程序---------------------*/( ^7 U& {. N7 ~8 C
  main()
, J; v8 P5 D% ~2 i2 i& m5 }  {; @" g1 v8 Z1 H  D- Q' q0 C
  puta();
& d* T+ C) z3 \% z, n1 U# G% N  getch();
! C4 p: U5 n. B1 J  dcls(0,4,0,79);7 A. l/ T. z; \" p2 e$ {- y" e5 S1 p
  getch();
9 g. F( k& E6 s9 y, W6 l  puta();, z; d: F( k5 Y: l2 O
  getch();
( `$ h) U/ G( {; S0 C+ Y  bcls(0,25,0,79);
& u  w* q9 h* _& ~0 d6 O) m, i. N  getch();
# x2 p# X8 ?! c, p" u9 S8 Z7 v  puta();
8 \1 J( F/ R  e; M# |  getch();
' E7 S+ w7 t3 y+ S  zcls(0,25,0,79);4 A' b) Z5 Z1 O) E( j/ ~* w+ K# ]
  getch();
. K0 ^# X# t' e( V5 |; M  }
5 c  ~* m9 T) P- f; z$ s% z# c  /*********center clear screen(中心清屏)***********/
% H) s. F% O4 y7 ]  void zcls(int x1,int x2,int y1,int y2)
/ ]4 @+ \$ _& ]  {) W' x0 O$ b7 C. Q9 P2 T, S* x" O  p
  int x00,y00,x0,y0,i,d;
5 u( q$ R, m: p* k2 f$ k9 P9 c  if((y2-y1)>(x2-x1)){
. a& y, T+ O; J  e: F) f  d=(x2-x1)/2;
6 V% {% m" N2 j- H# ]: [& _$ r6 ~  x0=(x1+x2)/2;0 X1 I) A" S: a5 M% C
  y0=y1+d;) @& X( u! y' c6 n  s( {
  y00=y2-d;" ?% Y5 T" r3 S3 V
  for(i=0;i<(d+1);i++)
! F6 ]9 M1 M% ~# K/ o6 j6 q  recls((x0-i),(x00+i),(y0-i),(y00+i));
; e5 U2 m/ @) j  delay(10);
8 S- U4 ~, S' h0 p  }7 X- f* x' Z4 G+ U/ _
  else{& H7 e  l' |  p' ~8 f
  d=(y2-y1)/2;% V' B0 i$ T' n$ }  j; c
  y0=(y1+y2)/2;
' Q# e8 j6 }- t7 \4 K  x0=x1+d;% J2 `4 t( `9 [" H) P
  x00=x2-d;* r6 Y. C9 m/ n: ~1 w. O
  for(i=0;i<d+1;i++)
4 h: Q+ z# r/ J% b  recls(x0-i,x00+i,y0-i,y00+i);
$ d( r. f2 L. I$ v* M6 F- \  delay(10);
2 O& G  d" g6 [" g8 j* O  }
9 m# J  c. n+ ^9 Z# L' m  }. ^" X& L8 V$ I- i' T8 i

% q. l# F/ L6 \  [2 |) \& @9 O, \) J  /************* clear rectangle side(矩形边清屏)***********************/1 w- e3 U5 A) q* d& Z* U+ x4 f
. e$ S0 r7 a( R3 ]
  void recls(int x1,int x2,int y1,int y2)
: O0 K+ A" f9 L  {
- V( T; U% I. @( s7 B! C4 N  A$ T  int i,j;4 T7 O) E0 ~$ i7 [7 H
  for(i=y1;i<y2;i++){% M% p/ R, x% m9 i7 L8 i
    goto_xy(x1,i);2 L$ i8 i6 i7 U& y% y
  putchar(' ');
9 F9 x2 Z6 F+ a% E( x) H  goto_xy(x2,i);
) B$ ~7 V  r3 @  putchar(' ');
. _. p) I, U( M- k6 O  delay(10);1 h/ A' o9 Q, i9 M" p
  }$ u9 |4 I5 {* C( C% N& Y6 E
  for(j=x1;j<x2;j++){, [8 C9 I  p8 F1 g  Y! G
  goto_xy(i,y1);
, E1 F  _; X: p/ r4 _  ^4 B. f. S  putchar(' ');$ p0 \1 N. P9 I5 c: ?- X1 w
  goto_xy(j,y2);
" g* \' I; p5 [/ X* X  putchar(' ');
- ?7 e+ X8 F: p/ l/ Y1 J' z  delay(10);
2 p) w: s( w0 x8 W4 o  }
4 a2 p$ e' x6 z% J1 J; I  }
7 n1 S. W2 p$ t2 a  W7 G' x3 r9 G  /******************open screen clear(开屏式清屏)*********************/8 S' J5 k( M- U  F: P+ C  m5 w: Q
+ _. X$ P# f2 S1 j5 {3 J9 C0 e2 _
  void kcls(int x1,int x2,int y1,int y2)0 o: e6 T, }3 W
  {
1 c. Z; M6 c7 k( Q) _5 o- N  int t,s,i,j;$ \8 Z$ `  H/ n0 I9 ?
  t=s=(y1+y2)/2;
, `% n9 b( H  ?& s  for(;t<=y2;t++,s--)5 K& @1 P! |8 X
  for(j=x1;j<x2;j++){3 a; s" p7 H2 M
  goto_xy(j,t);
  V" x4 L/ M% g- `- ^1 _2 v  putchar(' ');5 u4 ^8 H. p# r" S0 [2 }" z) G
  goto_xy(j,s);- @5 u" }& k5 T, U5 u
  putchar(' ');; ?6 a; e: p1 b! `/ I- |0 S
  delay(10);: o: X4 K$ M/ L# t
  }
- B4 I! E/ }' H  @  }, t' W# m. ]+ Q  _3 w# X5 h
  /*****************close screen clear*****闭幕式清屏*******************/) ^; B4 n* Z( `4 |/ ?2 e5 y
# `# ]2 {: A8 Z/ H& t4 ^
  void bcls(int x1,int x2,int y1,int y2)
; _, O. N, y' s4 r, }; ~) s8 P  {1 M3 H& h- X$ s- s9 q' c7 i3 _
  int t,s,j;
) E9 @/ j( }$ a0 d  t=y1;
) F: y' }/ S8 g2 q  s=y2;
5 D7 N  ^5 U5 o  for(t=y1;t<(y1+y2)/2;t++,s--)
( h5 F) _' [) j% J1 z4 O  for(j=x1;j<x2;j++){) b: D0 J4 ?- r7 D+ t+ e
  goto_xy(j,t);
, ^: ]" B0 v, n  putchar(' ');
8 J6 Q4 z, U" W$ s/ o& P  goto_xy(j,s);) _9 M* _6 D& }, r6 S% P' t
  putchar(' ');
3 D6 s& G8 a) ^4 A' N  delay(10);7 `9 w3 y* @" c  X
  }
8 E) U$ l3 Q4 u7 f' ?+ q* ?/ P  }
) t3 \& r4 p2 `3 c4 \2 f  /******************bottom screen clear(自下清屏)********************/
1 y+ ^  e) `  ]
6 n1 |5 S% z) O0 D9 p8 }3 A  void dcls(int x1,int x2,int y1,int y2)' Y* ?. x7 ?$ D" H/ `0 n
  {
$ a6 B6 `3 j1 M3 C5 q  int t,s,j,i;6 Z5 [0 j) P" ], D( l
  t=s=(y1+y2)/2;
6 G* T. q$ ^( v  for(j=x2;j>x1;j--)
0 S( J1 `& \6 C& x% G  for(i=y1;i<y2;i++){  E" |+ z# l9 `7 Y  n
  goto_xy(j,i);
9 K2 |' K& q8 G2 Y" W7 m% a$ w  putchar(' ');3 {6 H; @. R  b* {3 f" l+ |* `
  delay(10);2 H2 _' V: t6 Y; V! @7 u
  }* K0 T3 T1 @; S& K5 T/ }
  }9 x7 n8 h& _6 }% i5 P+ h% s
  /******************设置光标子函数******************/
3 C4 b4 R# w* g* K' D* p- ]9 D  g5 m% b9 s
  void goto_xy(int x,int y)
+ Q0 Z! P3 f) z" {  {
5 |9 \6 I1 j+ T$ x( M4 \: s  union REGS r;$ o9 `2 f) A" N7 p: t3 A
  r.h.ah=2;
, J$ m, x9 V# t0 @  r.h.dl=y;
- x# a* Z. ^/ c$ ?4 Z& z. F7 g  r.h.dh=x;
+ n* _  V* d1 p5 X' }# S# E- s- U  r.h.bh=0;& Z3 a  m6 w: U7 K+ N5 ?) n* p
  int86(0x10,&r,&r);* ^) {5 G( b0 U0 l, o3 v, @& [7 ?0 L& [
  }
8 y# X. i  W7 h
3 z/ S/ c# a+ d  q& I7 h; m: \  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
& S' _2 ^4 a& E" \  F& j
( S6 f+ w- }  t2 _6 z  void puta(void)6 H+ \. \& c6 {
  {
9 j) `. `( r6 @7 V7 Y1 k  int i,j;* K$ V4 y: g" l8 M! L% k9 q& K4 N
  for(i=0;i<24;i++){
- J" j8 V1 [9 K* c" \+ b: V5 L; E  for(j=0;j<79;j++){7 U3 l% l2 s3 n+ f* P* Q1 [. h6 p& v
  goto_xy(i,j);
8 E. `- o3 {2 G* I  printf("a");
- I2 }6 \# H: r, z9 O% d/ `  }
! H5 S9 U9 Q, h4 @) a; V  }
' e6 @8 L) \4 n2 o% r  }

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