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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,! `& }( q( N) e* y

5 y/ H! P; m* |. `4 v2 U  V# m  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里4 A! }# t+ h' O9 Q- S( B

  K& @' I9 c3 A  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. " z. P( w3 C! ]% o
  子函数及演示程序:
: ]4 Y) X6 i# E9 s+ C* d* j, Y# e9 w' b* ^; V! V1 s
  #include<stdio.h>1 ^  B* R8 }- t+ R4 u3 m
  #include<dos.h>! R. Z" e* W% n  o
  #include<conio.h>
+ }, T( k! x2 s9 y6 a2 `1 Q4 Q2 ]% ~6 U8 {- a
  void goto_xy(int x,int y);  o8 U! d% i( ^
  void dcls(int x1,int x2,int y1,int y2);
# V7 K4 S; U9 T% u6 l" e7 Z  void bcls(int x1,int x2,int y1,int y2);
: o4 Z" P0 ^) L* q2 K) F  void kcls(int x1,int x2,int y1,int y2);
/ E. D" [5 M! H) {  void recls(int x1,int x2,int y1,int y2);* K- y9 S' q; _0 o
  void zcls(int x1,int x2,int y1,int y2);
% O; _6 H! ^* L3 y7 _# r  void puta(void);" y* b! }# X& _5 u4 a

6 ~6 N& E, w: s$ m$ L6 A1 n/ o
  /*--------------演示程序---------------------*/
0 \3 r6 L% I+ ~: r1 B0 q/ q  main()( T% a1 a/ R& D2 [% q
  {
+ ~- `, u/ D( Z* g$ o: t3 i  puta();. f1 m9 u, Q$ X0 L
  getch();
8 f2 G$ E) g6 M- x  dcls(0,4,0,79);8 w8 [6 G% \9 [; o, q- U. j, h
  getch();
; `; b# u4 N2 t" \7 T  puta();
( f. Q7 u) P7 i9 n3 j& s1 s  getch();) i; P4 Y+ V9 O1 q7 R* z( P
  bcls(0,25,0,79);" {7 T( ]" Q  _; d5 Q) c" C
  getch();: E# G7 I0 r. |3 P1 _- M' z3 u  R
  puta();
+ n: n, G; q: O* x9 Q  getch();
' Z" e1 G6 i6 D1 b$ g. G6 t/ p/ E  zcls(0,25,0,79);' _( K2 |0 t5 B1 H, O7 ~% _2 J) c
  getch();
( U8 V/ R% U; E4 Z  }6 [( e: M( o- i; ]: l1 a: @
  /*********center clear screen(中心清屏)***********/
  ]9 M" w6 |2 I5 f  void zcls(int x1,int x2,int y1,int y2)
4 w) W) K' r/ w2 Z7 U6 v  {
& H9 N8 C& f# ^1 M: ?  O- d; f9 R  int x00,y00,x0,y0,i,d;
! f+ Q9 A: O0 @. y# j  if((y2-y1)>(x2-x1)){$ y& M: |5 ?. n2 p8 h
  d=(x2-x1)/2;
7 f# {& Y7 N: K$ m! R2 g' Z$ l  x0=(x1+x2)/2;% _( U4 ^/ j) n5 m# V1 L
  y0=y1+d;$ C  ^% X3 `8 T
  y00=y2-d;
6 O( h5 k3 ]  g3 |% G5 [  for(i=0;i<(d+1);i++)
  K  T% X4 j+ z; `, c  recls((x0-i),(x00+i),(y0-i),(y00+i));
! E* T+ |' i# V  K8 K, H- I  delay(10);
) e/ D  {4 B. M  }. n  }3 _; ~8 W" Y( j! ?
  else{/ d) A/ D, ^$ G: U0 x+ Y5 R7 ?6 K
  d=(y2-y1)/2;0 `6 w3 H1 {  w  \8 s
  y0=(y1+y2)/2;  }- a# U; x0 Y7 y; F- q
  x0=x1+d;( {8 ?# M  b6 W1 q: n
  x00=x2-d;1 }+ z( e5 o: C9 [" _
  for(i=0;i<d+1;i++)
" Z! N- o: K1 M  recls(x0-i,x00+i,y0-i,y00+i);- H- a( n; }- E" }% }
  delay(10);- i& h) k/ F9 `! G; R- v7 u4 u
  }6 r. J/ K# T" B6 D. I- n
  }6 X. i* T9 y" }8 f2 a! c& `
8 Z. j, X" ~/ l6 I8 P
  /************* clear rectangle side(矩形边清屏)***********************/
0 g2 v$ ~  l$ H5 X& M5 t) t
4 T6 Q% |/ Z; Y  void recls(int x1,int x2,int y1,int y2)
, ~! S0 \9 f; P' W. p1 {  {# f$ g- E* ]! p
  int i,j;
) K$ Q6 j3 I- G7 d3 j2 f* p  for(i=y1;i<y2;i++){- K$ Y- u: `( F1 ?) N
    goto_xy(x1,i);- S- K) z+ p- t( B
  putchar(' ');9 x* u/ O, O/ G8 d" t, e
  goto_xy(x2,i);
4 c8 [/ }& d2 c4 \  putchar(' ');
* _# @  `. S% c( Y8 g  J  delay(10);
  |% i4 w0 b7 v" C; t9 o  }0 x" U+ U$ O  X' M9 v
  for(j=x1;j<x2;j++){! |. J8 x; W  P1 m+ m* y2 b
  goto_xy(i,y1);* O/ y3 V1 ~0 N* y% |; J7 O
  putchar(' ');6 A5 B/ h4 a8 p
  goto_xy(j,y2);3 O. {. t/ G: I# q6 W7 X
  putchar(' ');
& U3 d" U& e2 U) G3 p  delay(10);
- w& r7 f7 Y) O% t, ]* e" W+ \0 j  }) E  e; r4 W: x6 E/ [4 u
  }1 k) _6 i5 r1 g
  /******************open screen clear(开屏式清屏)*********************/
4 q" j# B! Y9 X1 k& f
% T( C) }4 Y0 w- k2 [  void kcls(int x1,int x2,int y1,int y2)/ r- n: _4 @2 ~# _
  {
3 J* ^: O6 M$ G3 b  int t,s,i,j;
: n% ?' n7 I+ K, B! K/ |  t=s=(y1+y2)/2;
( w+ A6 q% R& s3 l! ^7 t  for(;t<=y2;t++,s--)8 y  e5 W5 b3 q% C% a
  for(j=x1;j<x2;j++){% L: J5 ?( y* N0 y% q& O9 M
  goto_xy(j,t);/ M. l5 w* c; l" ]7 ?1 W; w
  putchar(' ');* G( `# X/ v. l% |# G& N5 X5 I$ o
  goto_xy(j,s);
3 [7 W" t7 l$ y" }3 X7 [  putchar(' ');
2 P" Q; U( [" g0 c' [  delay(10);( w1 v, s; |$ n" H" A
  }
; d3 d1 Y$ y3 u8 R5 `  }
: h# Y) n' V) `" c( u* T  /*****************close screen clear*****闭幕式清屏*******************/$ I- f0 h9 v$ G, t, f" `6 N
) S) \- ~, w/ N, P" E0 G
  void bcls(int x1,int x2,int y1,int y2)
$ o* ~& x3 P8 h7 f3 F  {
' H, f! E# d4 _" R8 X  ?9 S& Z  T  int t,s,j;
# ]- [. h. @% ~+ d$ u$ [9 l  Z  t=y1;
0 u9 {+ V4 D, B) x  J5 S1 E  s=y2;% ]9 b. l( K3 ~$ ^
  for(t=y1;t<(y1+y2)/2;t++,s--)- S0 B7 I1 b& k/ d8 q: a
  for(j=x1;j<x2;j++){6 h2 N: F1 _7 h  l3 j4 m
  goto_xy(j,t);
6 l- A: Z5 x0 ?) [  putchar(' ');+ r; z  c; l7 D5 K) n7 ]1 a
  goto_xy(j,s);
2 F* o) l) w/ K8 ^/ e! `5 j+ R  putchar(' ');
6 a+ r' l  l- D, B- k) x  delay(10);
! h: Q0 X7 b2 ~$ \$ a  }
" m& R, t9 H! L+ C  }
$ _. s* [+ Y; k6 `5 i  /******************bottom screen clear(自下清屏)********************/
' \' k' `' c$ M# e; J5 L
1 q, ]+ T2 q7 q) ~* A# c) T" O! W$ Q9 M  void dcls(int x1,int x2,int y1,int y2); X* m6 |: C4 i- p3 E
  {  D- d: S6 ^$ o) a, D
  int t,s,j,i;
5 i, [$ |2 P. h  t=s=(y1+y2)/2;
! ?" }% R, z/ Y) [  for(j=x2;j>x1;j--)
/ ]( u& T- f& ~+ ?  for(i=y1;i<y2;i++){7 A9 i5 \' S7 H
  goto_xy(j,i);) L" k- O2 s- o: ?
  putchar(' ');
2 ?+ ]4 {8 z2 M* R& q* {. b  ]) g  delay(10);
9 s# J8 u3 x  a5 P+ @  }
8 y3 I. b7 p8 x, t: C; z4 l1 [  }& m3 {# E2 ?' S0 P" _2 [
  /******************设置光标子函数******************/( ^3 S, W2 L- z- X" \2 U3 t

9 m0 o1 x  w4 U+ P: D& c& M; C5 y  void goto_xy(int x,int y)
0 f- E' q3 K0 y) R  {3 D: S3 H2 w- O
  union REGS r;
9 o/ l. l$ l. A: ]. g8 `  r.h.ah=2;
0 Z9 |3 `8 y* {' r, B. c  r.h.dl=y;' g& a- a: [: _3 r
  r.h.dh=x;
  ?+ V% z1 }, y& Q( i% p! d6 @* x6 z& `  r.h.bh=0;9 \( W% T8 z5 M6 ?6 j' h+ R
  int86(0x10,&r,&r);
; c2 Y, D! U$ t) D' i6 Q( u  }! v+ Q" l$ {& W3 v
0 `/ {! }0 w/ v7 X" ?- V
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
) F0 B: j, H' u. Q5 t5 f) K$ T+ B4 T7 M/ }# r5 Q  B- h" t
  void puta(void)9 }% ~1 ?/ w* N3 G- m% _
  {7 n. V6 o1 n: u9 `
  int i,j;
! F* X% P1 b! z6 u* o  for(i=0;i<24;i++){2 C1 i9 e5 W0 J% f6 ?
  for(j=0;j<79;j++){
* @% x' m" q4 X( `/ O  q1 @8 ~& T  goto_xy(i,j);
& y  b6 a/ }6 L% r4 m+ x+ U  printf("a");2 D+ @/ ]6 Z8 ]* \6 M
  }
) O: d# J  U) y) z+ C  }
8 S+ J. Z" V& s2 Z+ k& U; L  }

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