返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏," M  F$ M. [* m* B1 E
4 [$ V) E" u3 g9 ^% L* k
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里' U. s1 t/ G* d/ t2 j

7 A. l% T; t& \6 V+ J+ v- e  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. / S' x8 M4 W8 V: H3 D1 Z$ K- P' X
  子函数及演示程序:# u$ {. ^& u/ F- z) L/ i$ g& c* H

8 G" h$ {3 P4 n  y' n  #include<stdio.h>
# g+ @" _; w8 }& v: J" V; {9 y1 L; \  #include<dos.h>
. }' q. W& X0 Z, c# X. D  #include<conio.h>6 c4 }; N9 }2 H9 u2 q2 L
) z% a; M" n$ w; c" D
  void goto_xy(int x,int y);4 @+ a! H/ j7 h' B5 m" Z2 ?1 Q0 k. p. h
  void dcls(int x1,int x2,int y1,int y2);. |" g& N  x, F* y3 H
  void bcls(int x1,int x2,int y1,int y2);9 B" C$ z. T  I( {0 B' U( ]' ^$ f
  void kcls(int x1,int x2,int y1,int y2);
2 E. [- @7 O1 P3 I5 x3 C) N0 o/ u  void recls(int x1,int x2,int y1,int y2);: K3 T# e. T. E0 N& n! @; M
  void zcls(int x1,int x2,int y1,int y2);- T9 }9 J$ y9 I/ r) R# |
  void puta(void);
! S- d- \, x) A- f5 y. ~1 s" i* U/ u- f- z/ ^$ _2 F

" Z& K+ ~" k( o+ v, c. a  /*--------------演示程序---------------------*/
" L* q  j$ z& Q) ?: ?  main()
4 B  w( l' i3 F% B6 m6 O* e1 S  {
! F; P/ {+ B0 W/ P$ o" N  puta();+ A6 m, P6 o/ i9 g) G1 d
  getch();
# P1 n# g) j/ \  dcls(0,4,0,79);: s( M! }" ^' J. u* u
  getch();! n0 W3 K  y* {. y3 g3 ~  T7 Z
  puta();$ d+ e- ?' K( T* I9 W2 I
  getch();% L0 ^" L6 _2 Q& B
  bcls(0,25,0,79);
( h5 K/ ]+ j1 @0 X. w  getch();
: c5 r; X# W, M9 t. |6 l0 P3 r2 ~  puta();5 O+ T6 |  l* S$ z8 C/ |9 R
  getch();
, D9 N0 D- J) c  zcls(0,25,0,79);5 B: q' m2 \! L' ^) q3 u/ Z/ R2 z
  getch();* S0 X. G" u' `- K+ F
  }
3 W- y0 n, K6 |) L& t  /*********center clear screen(中心清屏)***********/* r; y) B; D6 D' j9 ]* V
  void zcls(int x1,int x2,int y1,int y2)
( S5 H* [. I% p' F; x  e  {, e' v& I8 C; |  ?
  int x00,y00,x0,y0,i,d;
, a/ O' a1 u4 r  V- Z  if((y2-y1)>(x2-x1)){0 B1 y: j8 Z) }; h
  d=(x2-x1)/2;  N/ Q1 H! {$ e' R
  x0=(x1+x2)/2;5 |/ i2 C/ {: C1 {. N8 p/ p# ?
  y0=y1+d;% Y9 B5 o. i; c& b  }
  y00=y2-d;
) Q& V8 S5 m0 K7 E  for(i=0;i<(d+1);i++)" u( h) L- H% e- A8 n
  recls((x0-i),(x00+i),(y0-i),(y00+i));
- W9 M# d, ~$ `4 \) a  delay(10);/ S7 n& W/ P) `/ A: P6 s% c" _
  }' O5 |! E9 y8 P
  else{
6 W: Z8 G2 Y4 F  d=(y2-y1)/2;. Q1 {$ Y! w) O8 ^
  y0=(y1+y2)/2;
' B: r8 b& v  ?4 l& i2 W6 M/ h3 Q  x0=x1+d;+ R# p3 q: U, Y3 V
  x00=x2-d;
+ |4 L, d+ s5 j8 m5 Q; R9 B/ w  for(i=0;i<d+1;i++)
% i1 Y5 ^2 A. [! e  recls(x0-i,x00+i,y0-i,y00+i);
7 z( A0 w0 ]6 d6 n0 h/ U  delay(10);7 w& w1 ?1 i5 J4 _
  }# {6 a3 [: Z, r! I
  }
2 U+ B" o# @  g  p. v( F
3 v8 x6 Q5 A' }# c1 h$ c$ a. B2 G% E: [  /************* clear rectangle side(矩形边清屏)***********************/
* H3 v- X: g' |5 @* Q# [/ }( Z, y) m8 d2 D6 R% n5 I% Z% ~
  void recls(int x1,int x2,int y1,int y2)
3 v$ x# y1 p6 G% y* c3 i  {6 n: E) J3 e8 J# T
  int i,j;1 H& g8 i- w+ Z& C1 b; g
  for(i=y1;i<y2;i++){
% p. H" s& P8 {$ c  H7 ^4 N    goto_xy(x1,i);; o' B! I4 E5 ?( ^
  putchar(' ');
6 q: S1 _/ W7 I  goto_xy(x2,i);
* ?7 h- U6 f" L( ]! C  putchar(' ');
+ N0 x4 L7 I( v0 u( x  delay(10);
8 l8 Z1 y2 \; l. w; v3 C' P4 [  }
6 }$ F: @$ I: H$ u8 g  for(j=x1;j<x2;j++){
/ z( E4 C1 X8 \" G  goto_xy(i,y1);
7 S4 T. G7 Z: y' _  putchar(' ');
5 d) l: P* ?: i+ n  Y$ `  goto_xy(j,y2);( b2 N1 `$ K1 u' B+ c, F% a
  putchar(' ');
- o$ R4 I, F. r" z  delay(10);7 [: E; K. f0 h0 V
  }9 u6 k( W& i8 S- P% V% @
  }
: `4 f; ~( m" b+ j3 y  /******************open screen clear(开屏式清屏)*********************/! I1 n# Z& @8 ^" T8 o+ f+ h& ]" Z$ q
! v2 d0 ?" v, k) _# a1 c, V
  void kcls(int x1,int x2,int y1,int y2)
5 A# i7 u( A' b3 }  {
8 G3 G5 D/ x. s$ X& w& L( e4 P  int t,s,i,j;
' m3 R8 _  J: `3 N/ |  t=s=(y1+y2)/2;
! r7 S# ?1 T  |/ U7 R* c+ z  for(;t<=y2;t++,s--)
+ V) M8 b! F/ H  for(j=x1;j<x2;j++){
0 V9 R$ R; {! s3 s( W  goto_xy(j,t);: ]3 n% K/ c( p( I* U# t, w+ n
  putchar(' ');
9 [8 Y. Z9 |1 E1 l" o: P  goto_xy(j,s);
, c3 d  Z5 H, {% b  putchar(' ');
' B6 ]& L% z- @2 F" z$ H  delay(10);
) Z( W4 Y9 [# m5 Z. e, C% d  }! N0 n) ]* [5 d  L& N* W" A
  }
6 Z1 Q, ^! f+ F- K5 Z( x6 k  C  /*****************close screen clear*****闭幕式清屏*******************/1 D2 w* c; @% N8 ~

, O( ~2 h( v8 u/ _; W# @  void bcls(int x1,int x2,int y1,int y2)
7 o8 A4 ^" C; |6 O) L' S0 i  {
2 h* b+ f% b: w7 z2 O9 v  int t,s,j;' U9 o  W7 C" b" u& F
  t=y1;
' q' `# l6 Q; z& _& G" f  s=y2;
- C! x  R9 D- S6 p7 z" u  for(t=y1;t<(y1+y2)/2;t++,s--)
* R5 t" U3 X: W* b( r/ r& C0 J  for(j=x1;j<x2;j++){" W9 L% A9 _! u& x
  goto_xy(j,t);( s  V' c+ A7 S( S6 f1 x) ~7 P, D
  putchar(' ');' h2 H% k' o5 n) a- c" ]
  goto_xy(j,s);; o7 _9 D0 S, v" Y
  putchar(' ');5 ~6 M, {. u; E. [, l
  delay(10);
* k  n. _5 g" D  }3 J( u& J0 s9 l5 A7 R4 T
  }
$ v/ N& r/ e1 @) q& f  /******************bottom screen clear(自下清屏)********************/
+ y2 J5 c2 L" o7 e$ ~# j7 `5 r% e5 ]6 _1 ]5 l: w6 A$ U
  void dcls(int x1,int x2,int y1,int y2)
8 A4 D; |' M. h* t) T  {; l' l. Y1 d& P- o( H: C
  int t,s,j,i;$ k& {$ e( {3 T2 ~6 H+ r
  t=s=(y1+y2)/2;
% a. Z" Z! E% t; C" b2 b  for(j=x2;j>x1;j--)
0 A& T- M5 a- M* u, w- G1 f  ?4 v  for(i=y1;i<y2;i++){; i3 W5 }8 j! b4 Q6 h; X
  goto_xy(j,i);7 n6 A, p+ C8 b" r6 J
  putchar(' ');
! @/ R# [2 g* a6 M  delay(10);
" z0 A' y  @7 s4 Q( N8 y/ h  }
  `) f: e2 r8 R6 t/ t2 P8 S: v* w7 p/ j0 a  }
# [; b) n3 G& Q6 `  B' K  /******************设置光标子函数******************/
3 Y. K: v7 s; M3 U6 q7 N, J! i0 V: z4 c+ [& M* w$ m( h7 w
  void goto_xy(int x,int y), N; t! s" z" j3 @( \
  {) o% b7 l& i6 t$ m
  union REGS r;, A* L7 C; u/ W; [' R
  r.h.ah=2;
1 x! G( L& G2 n0 c* |2 v9 q7 y! x' v  r.h.dl=y;
! ]1 O' j$ Z: ?  r.h.dh=x;
' s# E$ r, c* ~( U3 @( d1 b# Z  r.h.bh=0;! ~! V9 P* P# ?) ~- M8 g( C" y2 K
  int86(0x10,&r,&r);
/ F0 X3 {) O% c! v6 ^7 E8 h) h  }/ T1 u; Z- X7 l

! B- y! K/ F8 g  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
, \+ v: h8 W& E7 U% e; l5 W4 h* P0 W8 {' d4 N% [+ Q3 t* N! ?
  void puta(void)6 r( r/ k/ z$ h
  {% t8 t- N$ N2 n& r" d0 z' y3 A& a
  int i,j;
7 E% I! z( Q3 U& u& A$ M( R/ X) F  for(i=0;i<24;i++){& n: L/ _+ L% @. p$ D* E% G
  for(j=0;j<79;j++){7 f' ?- P6 T1 v& f' K3 h
  goto_xy(i,j);$ n3 [$ `5 N- ], P4 `, h
  printf("a");
, |8 I/ x. _+ |: S: e  }
* w. [7 s4 P+ m( w4 F0 Q3 J  }% ~. t, i% d( b3 b
  }

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