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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
/ K$ L5 V, L( _# D+ ?8 u, v
) J$ F& }) n5 _% Q5 G  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里$ U0 h; Z4 l' J* Y% [* y0 B& |& T+ J

3 X5 Y/ L# f. F3 w* j  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
- k1 L; a6 p! i  子函数及演示程序:, U0 g2 Y' R+ ]9 q( r8 d
5 x1 U( y+ W, d7 B8 H% Z
  #include<stdio.h>
2 `# ^! H7 o5 c( Q- D' V, M( R* R  #include<dos.h>
0 X. j9 f2 e- M& j  #include<conio.h>
0 J* m6 e/ u; S5 G; x- D8 A  ~) T2 S6 }  z4 Z1 m: N, L" I
  void goto_xy(int x,int y);6 T9 d6 c" |0 X3 X' J
  void dcls(int x1,int x2,int y1,int y2);7 R9 g% e4 y3 i( y) H' h" h& M
  void bcls(int x1,int x2,int y1,int y2);# u% h' ^3 w4 d) B3 K
  void kcls(int x1,int x2,int y1,int y2);
2 G. Q4 T3 S' v  void recls(int x1,int x2,int y1,int y2);
8 C8 t; ~5 f. D  void zcls(int x1,int x2,int y1,int y2);- J' p+ q6 B, ^
  void puta(void);
( M0 H7 Y* w, W1 F8 {
9 S: i/ |6 V' @1 F" c2 }
! J  G) ]; q# a! ~, N  /*--------------演示程序---------------------*/
: W5 [  S; ^! A8 J' F, Z, D" Y  main()
% p" ]* W' A) _* v3 N  {/ Y( P/ [3 |- x1 M9 U
  puta();4 j6 @* u. n1 Q, o1 q3 A* B
  getch();, Z/ |8 @" {3 e  N6 }6 u) }
  dcls(0,4,0,79);+ |6 L. }! U% ]% }7 M
  getch();0 L. H6 u' M: v
  puta();9 f7 _! C9 _6 u0 m
  getch();
# U9 Z) J8 t- P% ]  bcls(0,25,0,79);+ A% `" q0 k, N/ S9 N0 \
  getch();
' B$ ?$ m( r  |2 f  puta();: `1 r$ A  v: a1 i; r& |
  getch();
' ?7 D, D) m# k. ~  zcls(0,25,0,79);
1 _4 J' `' N6 N  getch();, G; b9 Q! q# w! y6 O: I0 _4 E) K1 i
  }7 O/ g' U; [  a
  /*********center clear screen(中心清屏)***********/: n; L8 ]! |9 O5 b
  void zcls(int x1,int x2,int y1,int y2)! H% q- G1 I6 W. s7 G* a" b
  {9 J/ j* `& u/ h3 D" a) [
  int x00,y00,x0,y0,i,d;
! w" i0 l3 l; @& O- d  if((y2-y1)>(x2-x1)){
; d. c6 _) g- E0 B9 ?  d=(x2-x1)/2;
& f( h5 c( k& H; o  x0=(x1+x2)/2;# v* A3 i6 P1 Q9 m- l
  y0=y1+d;
& f; ?1 C7 {+ I4 H- H5 \3 `, P! G  y00=y2-d;
$ Q3 t8 i& s& t+ e" B6 D  for(i=0;i<(d+1);i++)
0 U; ]' P1 W; A* x3 v+ N  recls((x0-i),(x00+i),(y0-i),(y00+i));
; }5 Q& A1 D3 b& V5 X  delay(10);
4 h1 T2 }+ q) r/ u2 u  }
* P- P  r1 s3 \, k+ m( I$ A, A  else{, W5 }" S  _+ d& z! }' {- c
  d=(y2-y1)/2;
$ M$ T; j( A5 ~& A/ F9 e# a* V  y0=(y1+y2)/2;9 A9 c; K: D# y, V2 U
  x0=x1+d;
/ C0 J, Q8 x3 j$ C  x00=x2-d;$ i$ ~+ p* K5 o% _+ I5 P: i
  for(i=0;i<d+1;i++)
" [7 L# X* Z7 x% A' C  recls(x0-i,x00+i,y0-i,y00+i);- x! N9 ^, ^! \! Z- j' h. s
  delay(10);$ T7 n" ~( s7 N/ m  _6 N
  }
5 _  G* n/ c! x! S- r; j& x  }
$ U6 X+ B: b& l0 p
# K( H! R8 g4 o% X  /************* clear rectangle side(矩形边清屏)***********************/) o$ X) L% y7 |" x
0 U1 z$ z! k# C
  void recls(int x1,int x2,int y1,int y2)1 \+ D% l! L" |* N
  {
6 I4 u1 K3 U% i1 I3 ?2 ]  int i,j;& U! t; i3 ^. ~4 ^) P1 O& [
  for(i=y1;i<y2;i++){
/ A6 k- l$ |  r8 F, X: d    goto_xy(x1,i);/ c& W9 U% w" f1 u) L% h2 k
  putchar(' ');
. I- S+ _9 f# t# p  goto_xy(x2,i);2 }" `. {/ Y" J. v$ E/ A, D+ e
  putchar(' ');5 H6 x* m/ A% {' O0 z
  delay(10);
) t8 e  w) a7 y' _  }
8 ^+ p! e4 F( G0 N* p( V  for(j=x1;j<x2;j++){& T  q2 P, G# x: L; X. O
  goto_xy(i,y1);. X, W  ^% Q( w- P& C5 ^2 C
  putchar(' ');( N+ T% t. N6 G5 q
  goto_xy(j,y2);
$ d( r) F2 ]6 w7 B' ]$ Z  putchar(' ');
9 n) z/ r; J' g1 B0 T  delay(10);
: {4 I2 n- z) P6 n& T+ K7 O, d$ B) I  }6 l8 P( t$ t& B2 d
  }7 c* W! w+ X1 i% {! x! x4 Z2 v
  /******************open screen clear(开屏式清屏)*********************/
8 }3 s! M8 j# o' _; q( g# x' d) p! T, k
  void kcls(int x1,int x2,int y1,int y2)
! D) m0 U3 {9 V% |2 _  {
7 ]' ]8 |' ]4 @& _  int t,s,i,j;
% a6 C: V( O3 e7 D$ H  t=s=(y1+y2)/2;1 {6 c4 G/ A0 H' J1 A1 D& @
  for(;t<=y2;t++,s--)! g& U7 b, q) g; P- o
  for(j=x1;j<x2;j++){
. w7 `3 b& q( M, _6 r( g2 [! e2 o  goto_xy(j,t);
6 J! {3 J% n/ g7 j! Z  putchar(' ');
% y7 r& |5 e8 @& e1 A' u: A- z  goto_xy(j,s);
+ ?# X3 x) X3 l7 q4 [+ X. Z9 l; U  putchar(' ');: Q  v4 ]+ G7 ?4 U3 T: R2 m. p. m9 m
  delay(10);
1 Z/ C. L; b6 n. Y. C+ Q4 X  i  }
- T  ^: k3 [9 p, v3 D- _  }' _' i7 H8 d0 K0 T% }
  /*****************close screen clear*****闭幕式清屏*******************/' s, o+ t% X6 s; N  o+ Q- Z

1 R  N, Y8 b) b5 x- t0 d  void bcls(int x1,int x2,int y1,int y2)
3 _  N6 K- u3 l4 @3 Z  {$ M9 b! V( L. I- t0 g4 d
  int t,s,j;
9 \/ {+ g) {8 @  T( ^: C  t=y1;, t0 w: B$ o! ]4 @, o& c) s
  s=y2;
2 Z9 I# [  u$ {  B& d  for(t=y1;t<(y1+y2)/2;t++,s--)$ h$ B% f3 P2 a" F5 ]7 m' b
  for(j=x1;j<x2;j++){3 s( M8 Z- i( j- I: X
  goto_xy(j,t);& q0 n+ ^6 u, D" u4 e3 V
  putchar(' ');9 _' o& W! }4 K! y. c' P
  goto_xy(j,s);- U4 \9 ]6 C) K# `
  putchar(' ');8 m8 E, z2 a7 B1 t: ?
  delay(10);
8 T3 ?2 s+ g/ `% A% x9 n  }
: p% V, b+ O6 k& l  }
, ], M7 k# p, B4 N' _( V  /******************bottom screen clear(自下清屏)********************// T" B$ Q9 P7 m6 J. W3 g

9 e/ p6 x2 ]5 k+ Y' U+ O  void dcls(int x1,int x2,int y1,int y2)) L6 X# d: q$ D' B% t6 c2 ]' E
  {$ m" e5 v4 M$ F  U4 v
  int t,s,j,i;$ V& k0 R% d1 y+ L/ }$ k$ h& i
  t=s=(y1+y2)/2;
# D& V3 M% H. W* A  for(j=x2;j>x1;j--)
  V/ i/ T6 T- [  i8 i' {# p  for(i=y1;i<y2;i++){
7 l0 s- F2 P/ ]; X9 m. i  goto_xy(j,i);5 X6 v* ~- A1 S
  putchar(' ');
& O5 ~8 {2 a  I  delay(10);
. c# Q0 G/ C# f. K# `  }
, L8 c' H: k1 M1 R1 S  }
/ W0 a; T) Q: b+ v7 k% Z  /******************设置光标子函数******************/# K  J+ c% T& O( h3 T9 o$ v
& J& U* I/ k8 `2 ~! f* z
  void goto_xy(int x,int y)( o4 H9 s, g2 ]
  {
9 J# |* v4 U7 z& X# z* ~  union REGS r;% t- p2 l- w6 `1 C) I
  r.h.ah=2;
: Z$ a' ~5 [2 J: ~. }. y$ c  r.h.dl=y;
" C% w' M' o' w8 j: E' s  r.h.dh=x;
! q" k# v0 t" d9 n9 B. y  r.h.bh=0;
: T4 T7 i+ ~; B  int86(0x10,&r,&r);1 ~- t( n+ x, X3 K& P
  }8 F" z) i0 a* `
3 O5 k- [8 Z; M* w) R0 }
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
; m$ V! W! T& T  m
% y, A$ T; ^3 A% ^4 x  void puta(void)
  Y0 D& `. \) |- I3 h  {
2 h5 \. Y, S8 c' |  L  int i,j;
3 z8 x3 U7 M9 y8 s9 Z  for(i=0;i<24;i++){" i. [4 R% E* M" d
  for(j=0;j<79;j++){* O( N/ w$ X9 k0 _3 A# P
  goto_xy(i,j);
3 ?9 R& W3 v; g$ D  printf("a");
2 M# f$ j) n. C5 m6 }  }
% ?" m6 a) K5 j: d* j1 Z7 _7 G  }6 y& Q9 x+ E0 [
  }

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