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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,4 l+ b% A! q6 m

' q( |2 Q- q4 u  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. @0 |" D3 Q& |/ c# W( P2 P  T( m0 Y
+ M. P7 @% ~9 l% ?  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
; q3 E' X/ T) Q$ |+ E  子函数及演示程序:  f7 S( U9 H3 X2 G4 V% `

; N6 t, X& c7 P( r2 U& ]  #include<stdio.h>
3 M. l, J* G8 x" l( h) F$ [  #include<dos.h>
0 v- [- {/ C3 m7 B; ~5 R5 u% r  #include<conio.h>
, z. ~& ?+ `8 A9 S
" I" X. ^& M9 x8 h; B8 f  L  void goto_xy(int x,int y);
- z. x" v& L: d4 A% l  void dcls(int x1,int x2,int y1,int y2);3 j+ b5 Z  F! [- l5 S0 i6 {" l
  void bcls(int x1,int x2,int y1,int y2);- W1 {- G; A9 @* C- J6 o
  void kcls(int x1,int x2,int y1,int y2);! P, _$ g4 z+ f* ?+ Q
  void recls(int x1,int x2,int y1,int y2);
6 e  V0 V; W7 l9 P  void zcls(int x1,int x2,int y1,int y2);* O6 u2 |% v2 }: l
  void puta(void);! K- g) c8 v% r8 s4 \

/ i3 z) W% t, o: f9 ~; U& g. _+ C+ A8 a) e- d0 |+ Q% y3 }3 c( f
  /*--------------演示程序---------------------*/
: F1 f5 s, b  t, ?2 Z  main()
0 g/ {. U7 R2 t! g. o+ h  {
$ i) B4 W3 i; h# r3 \  puta();
: M* @7 `' Y6 S0 p! F& x* l5 w  getch();
8 v4 |) K2 i3 S7 _  dcls(0,4,0,79);! }6 A4 }. ~+ p( ?' p
  getch();9 o& r6 {" |) G) s4 s
  puta();
! z) I; q! Y7 F" `& ~4 Y% |' B$ A  getch();2 o7 f) A3 `8 ^3 A9 ^5 z1 f3 O
  bcls(0,25,0,79);" Z% [" l; I8 W
  getch();
$ d( X& }0 w& y  i& p# F  puta();
0 Q+ o' ]+ |0 T8 L5 X( H  getch();
; c* |( c1 H, r2 r( i  zcls(0,25,0,79);
8 y; K% q9 S7 l# L  getch();
8 y  z; P' X+ ?# y* c) W% M  }! X# i' C5 ~& ?) C. r) j
  /*********center clear screen(中心清屏)***********/
- E6 Z& o5 e' l8 {# P( Z  void zcls(int x1,int x2,int y1,int y2)
5 B6 {) D  S! y  {
; M8 E6 s7 P: O( U8 X# c- t0 o& u! S  int x00,y00,x0,y0,i,d;/ ?: z' [" ^, C* ~$ Y$ i
  if((y2-y1)>(x2-x1)){! v& p4 \2 [- s; l$ ]
  d=(x2-x1)/2;
' j) G. @3 d4 e( O, \! q0 B/ r  x0=(x1+x2)/2;
+ ~' L1 F' e. H: E$ Y  y0=y1+d;; W9 p4 @2 T4 s( T% I# z
  y00=y2-d;6 K+ c' }9 w' a; K. t2 W) H( ~
  for(i=0;i<(d+1);i++)% Q4 X3 ~8 m8 j2 c) `+ Y
  recls((x0-i),(x00+i),(y0-i),(y00+i));5 ?. o/ a3 |/ W/ y- w
  delay(10);
& x) j5 R( v+ Z  M  }
  Q1 a* t* k% N  else{" o5 V# p( i: q( {
  d=(y2-y1)/2;- l" \4 j0 b6 u# P0 |
  y0=(y1+y2)/2;3 L5 n2 n, k  e6 o& Y
  x0=x1+d;, a8 P) h+ E3 b2 U' p
  x00=x2-d;; k+ L5 x8 N3 Z1 e
  for(i=0;i<d+1;i++)
8 W# e0 X  R; A5 v& y: B+ {9 {5 v  recls(x0-i,x00+i,y0-i,y00+i);
; j6 Y" r2 M0 B; a2 Z7 O' |+ P  delay(10);
/ E: w% E8 H, K  }8 o- A+ [" d/ i* L- a
  }; {( V- q: n( r6 V! `( o

' U) v. K( r$ c( i  /************* clear rectangle side(矩形边清屏)***********************/. @+ o1 H; B; R  n. z& M; R, n
7 ^+ r  o, L7 ?$ A5 U, F5 Y* ~
  void recls(int x1,int x2,int y1,int y2)
; v+ S4 h2 w- \) }% x6 L( c( R  {4 b! I) d, J4 O5 C5 |* {, t6 ]( ~
  int i,j;
) x5 \" o) ^4 C4 x& w% q+ U  for(i=y1;i<y2;i++){
2 B1 _* ]( y+ `3 [    goto_xy(x1,i);
7 Q8 `- b2 d+ L5 G8 W  putchar(' ');0 [5 Z3 q* A' @
  goto_xy(x2,i);' s0 N; @; ]( h7 `/ W+ V  p
  putchar(' ');
" T' l$ G4 y' I; Q$ q. A  delay(10);; {2 X- j. ?% n7 B8 q8 E. w. e
  }; N! t: i3 I" N3 J, U
  for(j=x1;j<x2;j++){# Y: _3 J  O2 `) x
  goto_xy(i,y1);
0 E: K# z" E- S9 z# c0 v2 V% x" F. G  putchar(' ');( [3 Y5 a" A; S' l
  goto_xy(j,y2);
5 U: {" O4 _$ P+ \3 e0 g: |# q  putchar(' ');4 b5 o0 z! K; f5 ?  P7 J
  delay(10);
7 D; i1 C: r6 g$ V. p! o5 {  ]  }" ?- E+ L: g6 @' v8 ^
  }
* u5 ?3 i; r2 ]1 e( A" h: U  /******************open screen clear(开屏式清屏)*********************// A$ R# S: v' b6 B. u5 }
) \  U" A% y6 p: E
  void kcls(int x1,int x2,int y1,int y2)
$ s2 {5 d+ C0 t& W, \( Q  {
+ `" A6 B  o$ D  }8 U8 [  int t,s,i,j;
5 W$ z/ k/ j# Q6 z7 w+ @8 K1 v  t=s=(y1+y2)/2;
% m- j7 z, p1 l' D& w+ Q- G$ @  for(;t<=y2;t++,s--)
% P6 f. g  O8 B5 v( j& ]  for(j=x1;j<x2;j++){
% o, T( J' X- A6 m* C  goto_xy(j,t);4 O: T: \- ]8 S  k# r, t
  putchar(' ');
* ~7 k" w( H8 C, q  goto_xy(j,s);
) V+ o) K0 E0 |! ?5 y9 o+ d  putchar(' ');
( L! ]1 g+ H1 K+ r  delay(10);
/ d7 }, c6 E" x  }* I6 Z6 [5 K. J0 E; h# b
  }
/ ]1 X, x! M. }# b# y  /*****************close screen clear*****闭幕式清屏*******************/
2 C* Z9 _( {- H) ~8 `0 p% e1 T- u& H0 b" d/ w# x6 B
  void bcls(int x1,int x2,int y1,int y2)
9 u7 L0 p4 \, Q  {; L. P6 H5 T+ W# z
  int t,s,j;1 s3 ~3 ]# A5 r9 u- b% G+ Q
  t=y1;
( z/ v- d  z  x; q8 v2 G  s=y2;
/ U* t' Z7 a' @/ g* Y- y  for(t=y1;t<(y1+y2)/2;t++,s--)4 y6 I5 t3 \* @: p' s" z3 X2 w
  for(j=x1;j<x2;j++){
' q  m4 d$ V4 X* r  goto_xy(j,t);* b5 G, x, b; g5 A$ S
  putchar(' ');" g' o/ M* y* d+ _9 C+ |
  goto_xy(j,s);
; |" d/ ~8 D, H" Y, P; w  putchar(' ');
2 d5 |% t& S9 l7 X. E$ j" L  delay(10);
+ e3 R& `* f6 ~& d  }
: z" K6 l) p! T  }
. I  u8 z, D9 B7 q+ h+ z' w2 w  /******************bottom screen clear(自下清屏)********************/
% @5 A% e/ G4 w& c, Z/ B3 Q1 B  G! z2 |
  void dcls(int x1,int x2,int y1,int y2)
/ _# k6 p+ k: v  {% o% V- u) d! [
  int t,s,j,i;
( V* T. p4 Q4 E; k  t=s=(y1+y2)/2;
5 f9 B, t) U! @3 ~* W  I  for(j=x2;j>x1;j--)
; f0 I1 C# N( u+ q# n2 E7 r  for(i=y1;i<y2;i++){
: r- O6 ]. H3 r# u0 x0 g: m2 d. W  goto_xy(j,i);' x% {" g. s# ?; s; D$ s
  putchar(' ');
. y  O) C2 m8 o3 `% b& K- N# D: o  delay(10);
8 m" C5 f  `' J- ^3 G& g  |1 h  }
$ f( R) k0 |3 V0 G2 D% g; v  }
! [! E8 ?$ c7 l! j; m: S  /******************设置光标子函数******************/
% C# o' M1 O) g. O) l0 l- `$ g( D
  void goto_xy(int x,int y)) n$ B( n- k3 W7 u( F2 @( u
  {, h* `& G" h) Z$ }, ?8 d& R
  union REGS r;7 T7 [- i+ L- i2 P5 q
  r.h.ah=2;! x5 b' ]. ?6 }
  r.h.dl=y;4 T1 ^3 R- I: y, R" p  M' q
  r.h.dh=x;
" f0 k$ E- ^% [  r.h.bh=0;. r: Z. ]3 ~# d! r% v+ N" C: |, W) V
  int86(0x10,&r,&r);9 W0 Z0 n/ y- \* h$ f! r
  }' U: }9 V! T$ p0 ^7 C+ @

# u: d1 g4 u4 ~/ ~) F) Q  /**********************在屏幕上打出一连串的a字母用于演示程序******************/) {! ?& {9 R: r% [9 C
9 Q5 n( Y! p* d
  void puta(void)
' z; d+ f* I# Z& V9 @1 `: Z6 _  {, X! i) J7 [1 |2 }
  int i,j;0 s9 L5 o& [2 [  J/ M" Q
  for(i=0;i<24;i++){% j! I  H& n; `5 \9 N
  for(j=0;j<79;j++){% o5 f; r0 d, I/ N$ @7 J
  goto_xy(i,j);& Z4 ~' @. {% |* u! W
  printf("a");3 U( g9 G. u" J4 f( W
  }6 v; D, l9 H$ X( C
  }0 r9 W$ y1 X7 G, I+ J
  }

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