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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,. I7 _$ D& |9 [  w" Z+ U

+ x! N2 n( F: ]' }- O7 p4 X: g& Q- g  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里/ q  ?4 l1 K5 E! f$ b  c9 b
- {4 Y  _5 N& i0 m) f% t# x1 A
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. - C! O9 K" h  ]; o5 ~
  子函数及演示程序:" m- E' H; W" i& x, J$ b5 K

, v) e8 h$ y# d  #include<stdio.h>
/ z  d; b: M$ i. R# X  #include<dos.h>
+ }8 C2 ~5 }, l7 q  #include<conio.h>
% I( c; w. r( q; P6 O3 G1 m& B( @3 Z4 w4 N# O$ P
  void goto_xy(int x,int y);4 d* ?! u# ~, u( l/ h7 Y* P' o, u6 T
  void dcls(int x1,int x2,int y1,int y2);% `2 _! Z7 D) a" b. g
  void bcls(int x1,int x2,int y1,int y2);! ]8 Z; E8 i- X' T5 h" C1 o7 x
  void kcls(int x1,int x2,int y1,int y2);
8 K3 R, Q4 _$ p  void recls(int x1,int x2,int y1,int y2);
$ }" f0 O6 G7 |' `( |/ W) e  void zcls(int x1,int x2,int y1,int y2);
+ ]- u$ B. |$ D$ o; ?) s1 F1 f  void puta(void);
  Z) ~1 |, v* v5 B% d1 I0 o0 ^8 ~8 _- M/ Z- S1 `  f
7 P" o+ I4 q7 t- K; s  l4 p
  /*--------------演示程序---------------------*/
3 L" z0 w% @: N' y& [/ c* O  main(). w' ?) ^: E0 b  s; }7 B2 y1 x. J
  {8 ?. G! U5 x7 E+ S( Y$ v2 @% X
  puta();
9 `( S" P+ [9 I6 L+ q* S  getch();
8 Y5 h2 q8 K' K) M1 ^  dcls(0,4,0,79);
) ?: O; p' y  S" n' o  getch();' H' t3 Q0 ?* ~/ D& L* w9 f
  puta();
3 Z7 u" }* Q8 U; v  getch();* Q  l" j) V- c) R4 k+ S7 i. S
  bcls(0,25,0,79);4 n9 G0 l+ K, r0 i
  getch();* [  L* P2 Z9 U3 d. F
  puta();: ]2 @- V4 ]% x6 R( s* w4 t
  getch();
% O# F$ d* [# W+ c" J: Z  zcls(0,25,0,79);
+ V* N: y% L+ F* M  Z+ L  getch();; [  \6 l+ }( S# ?$ I) \5 m& E
  }
& i- r8 U& G! C# z% |& R; d) C  /*********center clear screen(中心清屏)***********/1 l% [; ]$ P. S, D3 w1 i/ @7 h
  void zcls(int x1,int x2,int y1,int y2)
: q$ F9 y, c7 m. P/ O! K6 |3 B+ i' u  {. w5 y3 k. ?$ E8 @: h5 a! q
  int x00,y00,x0,y0,i,d;6 u+ u9 z' v! M. i! Y% p
  if((y2-y1)>(x2-x1)){
% n9 x; b; ~6 L9 N/ p6 `  d=(x2-x1)/2;
4 f/ |; G* W9 v# j1 L  x0=(x1+x2)/2;4 r" y3 O) ]0 D& E& ^
  y0=y1+d;
+ @3 l- r2 ]4 B  y00=y2-d;
7 x/ |0 X/ P, p2 A  for(i=0;i<(d+1);i++)
/ t( a7 s& _. N) l1 @  recls((x0-i),(x00+i),(y0-i),(y00+i));# d/ c5 |0 ^) [3 G0 ~& @
  delay(10);( ?- G2 e+ x( ~/ L4 \( @0 U6 ^! v
  }
, n* }1 G  }; J; Q  else{- V/ r, l* J+ d
  d=(y2-y1)/2;% X( G/ s1 A/ I. I5 d
  y0=(y1+y2)/2;8 z' G9 e8 h+ l2 a! W+ p8 I% h
  x0=x1+d;
7 p) ]3 c. [: S  x00=x2-d;2 t5 q) b8 Q3 w& C2 j8 ~& A' w
  for(i=0;i<d+1;i++)9 b$ _( P$ v$ N4 Z. A" h
  recls(x0-i,x00+i,y0-i,y00+i);
2 @% r( c7 a9 R: F! `" |; y  D. {  delay(10);
6 R" C* I# h" a6 m. K, Z  }3 f: Z5 v5 K9 R) w# Q
  }
) t, W% p% z" k; P; z: Q3 \* m
  /************* clear rectangle side(矩形边清屏)***********************/1 Q& E; _$ J, I2 x0 ]
* |, R6 q0 r: [( m0 E  x
  void recls(int x1,int x2,int y1,int y2)
& P* \/ T" W9 U/ K  {3 j* U# Q5 G& f& X( l+ Z5 |
  int i,j;/ J7 R9 X) N+ r; k
  for(i=y1;i<y2;i++){2 Y% y& a2 S! I, O2 F- O
    goto_xy(x1,i);
5 A0 z6 l& p* Y- s1 s  putchar(' ');) m5 a. B0 D' j; D( H) {/ v' |+ S
  goto_xy(x2,i);
, v; g, ?; B$ e% n  putchar(' ');
4 A& ]+ T- p/ l7 S7 m  delay(10);; N1 O+ U6 L" m9 N
  }# `5 i" p: g/ P6 |+ g( {
  for(j=x1;j<x2;j++){5 I! S' W. M# N/ Y% t) v# i3 Q
  goto_xy(i,y1);
8 y. Z, i5 t/ _) E, i0 d  putchar(' ');
- L, N" L' W; t$ d  goto_xy(j,y2);6 u* [: H0 r: P8 ^- W
  putchar(' ');
) c5 m9 V: E. J$ C5 g6 p% L: E- G  delay(10);) R$ h) O; }  F; h; F8 ~9 ~1 J
  }4 m, n$ [; j7 ?0 b/ s9 T, a
  }3 H' A* H  e% x0 O3 i
  /******************open screen clear(开屏式清屏)*********************/+ g' t8 i! T# {2 x( v0 f+ T* ~
2 Z% l2 u% f2 m9 V1 @
  void kcls(int x1,int x2,int y1,int y2)
3 _; Q8 R/ h/ p6 E4 R  {
4 r) Z. k9 F* \0 F  int t,s,i,j;- h" s4 B2 f8 [# O( L' `0 y) C
  t=s=(y1+y2)/2;  p; A7 y6 y+ u! l
  for(;t<=y2;t++,s--)$ \# a# S* u0 g2 T* b% d6 x
  for(j=x1;j<x2;j++){
" B2 B0 F0 R* i7 l. h  goto_xy(j,t);- R6 R3 x6 ^, m9 q- X0 S6 m
  putchar(' ');
5 M* a" U4 z9 O# b3 d6 U; t# z  goto_xy(j,s);
5 O& y$ w7 X# @6 T& Q# U  putchar(' ');5 W; O! _4 M; d. ?3 L% I5 L
  delay(10);1 ?5 o& k  X: |/ l3 N
  }0 [8 ^7 {+ ^! @$ i
  }2 }7 v5 [) b1 d) y2 c
  /*****************close screen clear*****闭幕式清屏*******************/
  b3 w# y8 A  y5 ?+ i
0 ~) ^$ r: @. |2 N1 k, B5 O  void bcls(int x1,int x2,int y1,int y2)
( {: S  v8 m& J: k  {
' O) G( V" _9 f  int t,s,j;# c6 r# z0 [7 ?9 Y% T  h2 M
  t=y1;0 L1 g% \3 n4 R3 Y3 H# {- ]
  s=y2;
' J0 s! S3 x# c8 }  for(t=y1;t<(y1+y2)/2;t++,s--): a9 \6 X! ~6 f3 m5 k8 e
  for(j=x1;j<x2;j++){9 @( n2 |0 Q) V5 V% E# k7 v
  goto_xy(j,t);  x) I" @4 x/ b) e6 C! }) t
  putchar(' ');, N4 ]' D, f3 ]6 b$ `/ w
  goto_xy(j,s);
8 A2 s( y# ?$ ?  putchar(' ');
8 I! U1 {: H! _+ ?+ c  delay(10);
. V. l" M+ V- v1 e' P$ d  }
# b+ f0 `7 D- j! L/ d, U# b! ~  }
  B  ?) J2 j0 c# K: _9 H  /******************bottom screen clear(自下清屏)********************/
/ M" |) y- p( m: a+ L5 ~/ T1 C5 S! I8 y3 C$ ~- ~) l+ h/ o5 k
  void dcls(int x1,int x2,int y1,int y2)3 I. _7 G% t1 N) z
  {
& z# t% i0 r. I, h! n9 L  int t,s,j,i;6 F5 T" J" R+ V) w/ t& J6 ]
  t=s=(y1+y2)/2;& }4 P+ [# W/ l* G3 Y7 f! r
  for(j=x2;j>x1;j--)) N% J. Q. H! W0 h
  for(i=y1;i<y2;i++){
0 g& }+ ~" `3 F, i: K, n) S  goto_xy(j,i);
7 i& F& b# q8 ?9 i  putchar(' ');
1 m0 f4 C; w& ^" S  delay(10);
: C  D2 B; K4 I* k5 S; P  }5 }$ _( r) W* p3 ?7 V8 l5 @
  }
- ~! F7 p" q: S0 P$ F# p0 B! C# Q  /******************设置光标子函数******************/; a! R7 l3 _% y8 v; Z& T/ }
5 G/ v: X! q# N# l
  void goto_xy(int x,int y)
' }8 o# t) Q* B/ T  {# b) F4 \# c0 S
  union REGS r;
4 ^, G0 S7 f8 i1 ^* z  r.h.ah=2;
  ?2 V* ?5 ]% |  E3 q. r7 R5 g+ k  r.h.dl=y;
2 S1 n8 \1 k: a' z  r.h.dh=x;
9 o+ ?2 a8 _" [! |6 R" O  r.h.bh=0;1 Z& a# \$ m0 p8 [, S$ y6 \
  int86(0x10,&r,&r);
+ F  F$ ~8 ]; B3 R# S0 m( S  }/ E, f/ S6 L3 \0 I* q* B
$ A% [; ?  I; K' T% f1 ^" |
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
3 J' R& @7 r+ c" j( b/ P; z6 V( Z8 E% w9 `+ [& c  L
  void puta(void)' F, V0 v1 w& E/ f" b
  {; K& J+ R8 K4 y' F# i+ w8 T4 A
  int i,j;
7 X5 l, m2 t& F8 G% V& O  for(i=0;i<24;i++){
. F2 l' Y. o% T  for(j=0;j<79;j++){/ z& C8 U6 q$ P* Z
  goto_xy(i,j);
# h# q/ v; l4 U& E7 C2 |' [6 A. b6 t  printf("a");2 ~$ S3 p, L: Q; r
  }1 X" w8 w' \0 U0 H4 C* w
  }$ K7 a( ]- J  k3 R8 V9 x! a
  }

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