返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,4 }1 R7 F: F" Q. a/ B( n2 J

" g9 C1 F7 X8 e( A  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
7 \4 L$ E. B0 d
. A7 Y7 A; w/ u: F  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
' ?1 L; q+ U8 J! r  子函数及演示程序:0 z$ e1 f# [  k. d! M5 C
+ S5 V; F( B$ G4 W* P
  #include<stdio.h>0 g$ \; D+ Q+ u  ?' s
  #include<dos.h>
# [* \" F& U9 [' f  J& B$ F  #include<conio.h>9 k6 W! d' c, N& S- y9 e. x! T& I

$ W1 I, U4 D8 {8 Q  Z& x+ N. v# g  R  void goto_xy(int x,int y);% ]3 A( @$ q; q+ T7 Z5 H, D' G
  void dcls(int x1,int x2,int y1,int y2);
, O# q1 q3 x: g, i& P: F+ x" c. o! E+ a  void bcls(int x1,int x2,int y1,int y2);  ~# S# }5 J6 F. H4 f7 t  m
  void kcls(int x1,int x2,int y1,int y2);8 g  I0 M: ]+ a. V: L
  void recls(int x1,int x2,int y1,int y2);0 K! g% z: I5 d2 {$ T
  void zcls(int x1,int x2,int y1,int y2);
- Q0 w; H' l/ |* _4 v$ ~0 ^  void puta(void);3 L7 j5 D. ?: t1 C
- |7 ]. [/ Z" E+ h

  ^6 L' k+ R7 W* u6 u! S2 J  /*--------------演示程序---------------------*/' E& u, Q- I2 B/ B  x* @/ J' X' `
  main()
* W' P/ @1 G& {) ]$ C) l/ `: p( t& t  {
+ N2 D& S! m. {6 r% ^3 e% w1 q  puta();3 T, J/ U& f0 _) F: a
  getch();
% p  ~  J% I* s/ R+ Q  dcls(0,4,0,79);
/ ]% r: j: }" k. U6 j6 z& m; h' s1 c  getch();' Q/ r% l/ d$ j; P& g
  puta();: H5 [$ l8 ?4 f4 U6 m9 q/ r
  getch();
8 f" d) \& L* N  \8 V  bcls(0,25,0,79);
7 i) `% s! d1 O1 t/ k- x4 g* Y  getch();
" f4 h0 Y0 R. Q/ ?) P$ y  puta();
8 Q* r1 m& R! g4 v+ Y* r# `  getch();& J& s: {3 c3 X6 g) ^& b. G3 ]
  zcls(0,25,0,79);6 t  [, a$ @& i8 e! D2 r5 i: e' j( |
  getch();
3 Q: n2 B- d/ V& m9 _  }& [: D$ H+ ]. k' Z1 G
  /*********center clear screen(中心清屏)***********/
' [( p7 ~' M3 m8 A! u  void zcls(int x1,int x2,int y1,int y2). c3 Q: a; s+ x
  {
6 |$ M; }" r+ Y% L8 Y& o; u  int x00,y00,x0,y0,i,d;1 V( s  o& H6 x8 J% R. z& q
  if((y2-y1)>(x2-x1)){
. h# {! t  z+ e  d=(x2-x1)/2;- Y4 t6 @/ n$ t, a$ G, H
  x0=(x1+x2)/2;) H: K% Q6 y: a0 D& K' Z1 w
  y0=y1+d;
' [& U- E( ^2 L; w  y00=y2-d;7 q# h% d0 j7 d  Z0 ~* @5 {
  for(i=0;i<(d+1);i++)( M! E3 Z8 J. Q! ?1 O
  recls((x0-i),(x00+i),(y0-i),(y00+i));1 s6 ?1 a, k) a- E
  delay(10);
$ I+ A- _! o! R7 j  }! Z/ s/ x' n  \- @1 @* x: v
  else{! N& g7 d4 o0 Z) {! u* r
  d=(y2-y1)/2;: r& Z& ]0 k. w1 p
  y0=(y1+y2)/2;
' J% p! H4 i( |" }; {  x0=x1+d;
  [- W% [+ z/ M- G0 `, j: b  x00=x2-d;
  J9 |( w* M/ }  for(i=0;i<d+1;i++), C( o/ m* h. ?; U: D" `
  recls(x0-i,x00+i,y0-i,y00+i);% Z; Y9 [7 K5 k
  delay(10);
0 I$ D9 x, g$ u/ H; S6 b  }" k1 a# `7 w! Y" T! u# T0 {) l  I0 v3 n
  }) g+ w% I( L/ T) O
" y) n" C7 `+ @, `8 f" M: E
  /************* clear rectangle side(矩形边清屏)***********************/
; ]5 p  a/ t; x/ C6 |3 w" S' Y+ a" j. U) O0 j9 I
  void recls(int x1,int x2,int y1,int y2)' V, ]; A  @7 B! E& E
  {
% f1 A, K4 q* F# _+ W( H  int i,j;
1 g5 z1 Z- w0 `( _; _5 \  for(i=y1;i<y2;i++){2 M) O' O" H" L' g9 ~; P9 \
    goto_xy(x1,i);
5 @  f) k) b: ~9 L1 x7 i3 Z  putchar(' ');8 F0 }5 A' W2 Z& @! X8 \& l$ N5 @9 z2 H9 Q' t
  goto_xy(x2,i);, h7 P# S8 `; Q
  putchar(' ');% ?+ [8 h5 c  R( B# X
  delay(10);& v+ _3 K" n- u$ S% p
  }
& b; m7 |" q8 Y9 `; Y0 s; g2 t  for(j=x1;j<x2;j++){
- @' |; F; r; C! \/ ]  goto_xy(i,y1);
' P/ y' C6 I! w6 Z  putchar(' ');1 F( g) g$ ~" C( z) U
  goto_xy(j,y2);- m6 M) e3 d, E7 r/ j! j: Q
  putchar(' ');
) s; U3 M7 X6 C6 E+ {+ Y; S0 d; X' G  delay(10);! P( V2 H, B) C  H5 g7 @! e
  }8 q5 _) X3 k$ d, \8 w* j; L$ h
  }
& L( d& u% A0 e9 O( ^3 e  /******************open screen clear(开屏式清屏)*********************/5 T9 {8 k8 K) G5 M/ U2 A* ^0 @

2 }, R4 I1 B! @# c: y/ G! x' B' l  void kcls(int x1,int x2,int y1,int y2)
# Q+ \; i' s7 ?  {# B4 [; W6 F( q4 \! I+ @
  int t,s,i,j;
0 O" \: w) G* Q6 X% i4 B  t=s=(y1+y2)/2;
( k8 L7 L. f4 n& \  for(;t<=y2;t++,s--)
  R) {1 E/ @6 ~/ `; G, x/ }  for(j=x1;j<x2;j++){
; Q2 M9 Z1 ]+ P) y  goto_xy(j,t);
, R& P4 n' _+ t9 ?: Y0 R* b" w6 |  putchar(' ');
7 f& K& V9 s1 P. D% T4 i4 b* b6 i' f( S  goto_xy(j,s);! Y. i2 _, m1 W! x- d" @
  putchar(' ');
# N0 R8 p/ W/ [# S. P$ i2 T6 K  delay(10);
6 [' s9 t5 V2 z' V/ W/ Q  }+ ^% [! a% w& Z4 D: B
  }
& ~0 d/ h, h* p5 p+ Y, s  /*****************close screen clear*****闭幕式清屏*******************/
+ C; b: r/ e* n6 b/ H' f7 W2 L; {0 z( Y% L% x' O
  void bcls(int x1,int x2,int y1,int y2)
0 U. A, s1 @9 ]  R! B( G  {! l" B+ u( D$ C1 [/ V, m
  int t,s,j;
( W7 G, D' @1 w  t=y1;) d9 b. s6 u  Z, ?1 B6 H
  s=y2;2 g' B/ j$ M; u" v, v. T  Z
  for(t=y1;t<(y1+y2)/2;t++,s--)) ^: s* T* T/ x9 J4 Q% S8 }4 V
  for(j=x1;j<x2;j++){
+ D7 Q, g7 {2 D* c  goto_xy(j,t);1 D$ i8 x$ x. L% _/ f& v+ o; A, x
  putchar(' ');
7 }; F7 y) d3 \( s  goto_xy(j,s);
+ X' y/ B5 }6 W  putchar(' ');
- {3 X% h4 O3 @8 N) J  delay(10);: ]2 b) T5 L# v* c+ [+ y
  }
; W$ |5 W0 w% f4 G  }& f/ C& J/ H! d, R1 x3 x. I' L
  /******************bottom screen clear(自下清屏)********************/3 N* v% r* N0 v: J

" h/ m1 @  j& v- ], k2 M  void dcls(int x1,int x2,int y1,int y2)
# [2 b5 x( M& {8 }7 L  {
5 U. N* W! h/ |! c9 Z  `' `, F5 {  int t,s,j,i;% U7 L! e* a6 P5 j3 c
  t=s=(y1+y2)/2;
  _) z# d" ~% N" V+ Y  for(j=x2;j>x1;j--)1 z$ F8 l8 T5 T8 w, C7 e/ K3 m
  for(i=y1;i<y2;i++){$ g6 a" h$ D5 Y
  goto_xy(j,i);
, _$ G! t3 L4 q! b# F2 i  putchar(' ');* L3 o& s9 H8 K1 g/ ?, s) S+ f
  delay(10);
( W- C: p- i2 y! [/ P4 h  }
$ d2 R1 m. ~0 n# x! u- K  }
( ]: g$ W$ Q' C; k1 O- b  /******************设置光标子函数******************/
) B- w+ z; f: ], p
5 V" J4 ~( }0 c  J' E  p  void goto_xy(int x,int y); d5 {: s( X! _3 y: o4 S
  {
2 P* I1 h! [1 d/ J& s0 T9 @  union REGS r;* x! t7 s( J' E! B) m
  r.h.ah=2;
7 U  f+ ^# _+ _4 L: h  r.h.dl=y;
. p+ z" Z6 j6 P4 e4 |# T3 s  r.h.dh=x;, E9 ]* P0 t, y# N- G
  r.h.bh=0;
& |$ q! ~- f& {7 b* h/ N) B# l4 j  int86(0x10,&r,&r);  d7 [! m  ~2 |6 D# V0 `
  }
5 c& ?+ Q. G) ^: t/ b' |
! L0 A+ ?3 W7 @, ?# Z, Y  n  /**********************在屏幕上打出一连串的a字母用于演示程序******************/. y+ l; N( L& \6 O: k  G

" b: x: L6 u) y3 K3 ^5 X7 o! }9 M8 i  void puta(void)+ ?! T+ c, N$ L3 S0 a
  {' [2 v5 s" x  o
  int i,j;6 I$ c- J' r( l- e
  for(i=0;i<24;i++){/ }+ Q% \+ p8 g  O- Z
  for(j=0;j<79;j++){
; p; J; ~9 ?$ ]5 ^! @/ b  goto_xy(i,j);
3 p% O- P$ P5 q, ?9 P, P  printf("a");, ~7 ^2 f4 d- \
  }
# i9 M/ x* [5 m  b  }8 A5 }8 c* W; L$ \; b8 S: {$ C! T
  }

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