获得本站免费赞助空间请点这里
返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
+ W5 w+ t" I5 E' v! ?6 B- ^. G
9 c$ e& o8 J3 q, R  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
) x6 U; S" K7 z
( s3 i- _* H3 M, P0 m" o/ R  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 5 _6 M6 h4 ~7 L0 l' I
  子函数及演示程序:) B& ^6 m6 A; G8 T2 Q6 A/ |
! }# i! k2 q, j2 X# |" G# P- `! L
  #include<stdio.h>
& y! }% V/ M0 u* \" X& l# d" M  #include<dos.h>
0 E: V8 J1 j6 H0 v9 L" |' y* G- Q4 {  #include<conio.h>
- o5 ?2 a5 p7 v8 l4 d2 T! }# N
' E2 l% m/ P" `1 K! G& d  void goto_xy(int x,int y);
5 W- f6 b: f6 K) s3 \# H  void dcls(int x1,int x2,int y1,int y2);
- _6 P% h3 e- y" {: f$ j  void bcls(int x1,int x2,int y1,int y2);4 n9 W# |& e$ l3 N. a
  void kcls(int x1,int x2,int y1,int y2);
( u9 |' i  i2 k1 s0 d+ _. j, k  void recls(int x1,int x2,int y1,int y2);9 }  n5 j5 x! J* W% x7 t
  void zcls(int x1,int x2,int y1,int y2);
, Y$ u/ a! V* J8 ]  J  h  void puta(void);# K2 E% X9 J% ]# e

% ], i" @3 H& I7 |
7 p, i  W1 o! c* s) g- K( j  /*--------------演示程序---------------------*/
+ G' \- l. z8 V1 S* U  main()1 P) o7 O' [2 u
  {( j) W9 n$ C  V- W. q, w' v9 x
  puta();- Z- y7 l$ B, Y/ L( w1 ~/ O1 F
  getch();
: Y5 T% l( @% c* a" j  dcls(0,4,0,79);+ U" ?$ o' o8 O$ p- j3 e) V& u( y
  getch();
8 A; e6 Z; Y$ P$ T2 B! ?; Z  puta();' \6 E1 g  b* Q, V
  getch();
' H2 |. J" h6 |2 _5 K  bcls(0,25,0,79);) m! J. \  E( r% F
  getch();* d6 v( z6 r; e
  puta();
3 A5 L: z5 q8 \; T4 Z* ]  getch();
3 {9 m7 w' w; F/ S; [! C2 M6 G  zcls(0,25,0,79);6 _; k) O2 J. t: E; w
  getch();1 Q- e" y& m& r( E% r
  }
7 \. c; x) q0 |- D( R& ]  /*********center clear screen(中心清屏)***********/3 {% ~# Z6 h, ?, I/ V
  void zcls(int x1,int x2,int y1,int y2)3 W# q) N# N0 f% A4 {! m2 D4 W
  {
/ H; |% H: t3 o2 x* q3 W" o  int x00,y00,x0,y0,i,d;4 _% b9 }- _" e
  if((y2-y1)>(x2-x1)){
3 }( Q/ A2 J) [, ~2 W# x" J, }4 n$ S  d=(x2-x1)/2;% s1 W3 r% H( D. V; _$ ^: ~$ G8 X
  x0=(x1+x2)/2;# U9 x+ e4 @2 y# J* k
  y0=y1+d;( m7 n- i0 j  w( a) e% ~7 k- s
  y00=y2-d;( K" ~3 ?/ b+ d# O: F! U/ U
  for(i=0;i<(d+1);i++)' H5 ]6 `3 U5 U2 B
  recls((x0-i),(x00+i),(y0-i),(y00+i));. f( S' b2 D$ n* B3 x8 K
  delay(10);
% j; [; P. d3 ^  }  }9 a( ?, J. m: D. J
  else{
  i: D) s' s( O9 ~( j( q( s/ @  d=(y2-y1)/2;- \* c. X% g  w4 e
  y0=(y1+y2)/2;) q7 \5 u' O5 L; J0 l8 I: ]+ R: O* Q* p
  x0=x1+d;
7 H& N) I8 P! k3 Y" o$ S. ~6 @! b  x00=x2-d;
) B" ~: f" Z! t. w3 O/ j! U: H$ G  for(i=0;i<d+1;i++)" K$ h4 u3 o0 v
  recls(x0-i,x00+i,y0-i,y00+i);0 ]3 t% ]+ ~) R. J8 v! J2 x
  delay(10);6 ]9 [0 b6 V2 R# q# P
  }
6 m% h7 ~- P$ I  }
( I( c0 f$ D. e/ d- ], H
+ Z  X% o  o& {' j  /************* clear rectangle side(矩形边清屏)***********************/
  `7 _- G0 j: J- c9 I* _8 w+ u" r  a0 I/ T
  void recls(int x1,int x2,int y1,int y2)8 x! `3 d3 e3 s) w' H5 S: p
  {/ A9 N9 r. R6 }) ]1 G1 |6 F
  int i,j;" F% x0 P9 M# H2 o7 ^: ~" z
  for(i=y1;i<y2;i++){
9 f0 V, q% Y' L* U    goto_xy(x1,i);2 A8 n' p2 k  S
  putchar(' ');& j8 X8 Z4 ?9 E% n% g
  goto_xy(x2,i);
% M6 V% Z# Z. T+ q5 l2 r% o- Z  putchar(' ');  r, _; s& N+ V8 o( _5 @9 O
  delay(10);6 G: `1 h: L9 M4 S% L3 D. k' ^
  }
+ B  G$ r* Y5 o* m. C  for(j=x1;j<x2;j++){( o6 W. [9 H9 z4 \! L! v
  goto_xy(i,y1);" N' }* t- W2 y( J
  putchar(' ');
$ d" P9 ]9 `% B  goto_xy(j,y2);
5 d# P2 O2 O* s, n6 O- A, i. r4 q  putchar(' ');
8 A* G3 ], \4 h: n2 j0 U  delay(10);
! b! l( z( b3 M, \  ~  X: X  }/ k% }5 U0 j# g, `- S
  }2 ?4 m+ Y+ p  g+ k% x( m; O
  /******************open screen clear(开屏式清屏)*********************/
$ j9 X7 F+ k2 N" F3 A' O
, q" H5 d, b* X. M  void kcls(int x1,int x2,int y1,int y2)
, T: E& X, u1 j/ A. D% ?# ~+ J  {: V; ]0 [& S3 |# P% {$ f6 ?3 Q
  int t,s,i,j;2 y; v9 O( C2 J5 B, ?8 W, I( G
  t=s=(y1+y2)/2;
% J7 y( p- T+ Z  Y6 z  for(;t<=y2;t++,s--)" [7 {! l; L9 s% z  u! J; @
  for(j=x1;j<x2;j++){; V, }3 R& d1 P' o# E! B$ ^
  goto_xy(j,t);; h* P; x' v# a# d" R' u+ R
  putchar(' ');
5 e, `0 F& {3 p7 m  goto_xy(j,s);8 r% p8 B% p3 l* o. N2 \
  putchar(' ');  k1 d: }6 N- c! f. ^( e+ U
  delay(10);
( K9 K* C$ M6 o8 a% a/ M# b+ c. [  }
; ~4 G7 I/ y5 R$ x& Q  }
- r+ s% @0 r, {  /*****************close screen clear*****闭幕式清屏*******************/
4 \9 b0 z6 |( D( W
3 H( [7 J6 r$ Y! _1 C$ j$ G  void bcls(int x1,int x2,int y1,int y2)/ U; J9 Z; s6 U; \! ^
  {1 L/ H4 S( m: Q4 c2 j. e
  int t,s,j;
1 V: m5 U" t! w' E& a8 a5 u  t=y1;. k" u5 i8 b4 T0 g" |! ?0 u, J
  s=y2;
1 C, _0 R  W( z7 ^7 A/ G% r  for(t=y1;t<(y1+y2)/2;t++,s--)# i) D1 Z* F$ |
  for(j=x1;j<x2;j++){
' T5 [; f, ]0 [% d( }' Q( I  goto_xy(j,t);
) E  h8 U8 g" v( r" Z1 a4 }  putchar(' ');
3 \& f! Y' M$ Y3 _/ X  goto_xy(j,s);
0 w6 S( c3 S: N1 y! V+ M  putchar(' ');9 U1 w9 x) s1 _2 Y4 S, _7 {! I
  delay(10);( e8 j; Y) K# M! ]) r. F3 l8 U
  }1 w; m9 R- J7 P% w6 V1 j
  }
8 m5 \# O/ u" W7 Q' d2 _8 K' c' }  /******************bottom screen clear(自下清屏)********************/
5 N0 t1 ?; X8 X8 z" q: p& k
$ F* n7 ^0 I5 O; A  ~$ }# d2 G  void dcls(int x1,int x2,int y1,int y2)
. t' R$ c/ w" ?  {8 C7 y/ P) N3 Z" i
  int t,s,j,i;" l: R' O3 H; F# t
  t=s=(y1+y2)/2;
" K2 v5 E" d5 r  for(j=x2;j>x1;j--)
1 J, g9 J0 O& a) _! S0 n6 x  for(i=y1;i<y2;i++){/ x+ U* w, t  ~7 e. l
  goto_xy(j,i);' }: X5 p% r* S2 D# F
  putchar(' ');
: d( I4 l; n7 l4 S8 d  delay(10);, Z4 C4 O* h; W# \
  }
( H3 w) D8 u6 c; s  }
+ q' r$ P5 n& C& n' H0 f% u3 P% t  /******************设置光标子函数******************/# _$ k4 E0 G$ a$ B
: ~& L% t$ C/ m
  void goto_xy(int x,int y): v" X9 ^  T7 Z; z/ n' s: [- ~
  {: n$ L5 l' t/ O$ v- t
  union REGS r;( b0 B' q* z/ s% @
  r.h.ah=2;
7 s/ }" U9 T' T3 p9 k  r.h.dl=y;* A8 Q. w' p4 e" N/ d8 W4 s
  r.h.dh=x;' x0 U9 Q# ~! R
  r.h.bh=0;
. ]9 o3 D2 M9 I( d- W. R3 J% l5 u  int86(0x10,&r,&r);: I. x& ^9 h. X. i: m7 z4 R* w
  }
8 T3 x+ [5 L$ N4 \& i& [  T  w/ @0 m1 Y. g7 i
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/  N6 D5 R3 l6 q: ?, S: u/ [

5 d# y  l8 J# Y8 r3 b  void puta(void)  H& g0 R+ _9 \& Y
  {4 r8 A/ r9 b( O
  int i,j;) }* g" u8 Y0 g
  for(i=0;i<24;i++){5 D; [0 O  v4 I% D
  for(j=0;j<79;j++){$ S4 P/ F4 i  H  k
  goto_xy(i,j);
# i* f9 c* m( n7 ^# [. i  printf("a");
; L) W, y2 k: C6 }/ V2 V$ p$ o/ }$ e  }
2 w8 ]4 B) ?, z/ Z% h; @  }
: h' c+ c+ Q3 D6 Q7 P8 r" O' o  }

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