返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
, L- V9 S" d5 [5 O$ ?& }; h3 P" i3 D, V3 }
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
4 j8 A7 t, o; p" ?# N6 ]6 S* A$ d' r7 W( }. L& M4 h1 T1 O
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
7 C% ]7 E* J! N% W; H) p% I  子函数及演示程序:
# g  R1 R; ^& ^/ D5 u* Z5 o; @5 m  w: E, p- H! U0 J* {
  #include<stdio.h>- Z) e. A. ?0 }4 }2 J( n* p7 y
  #include<dos.h>! j5 |$ h% R  d, n8 Z. r3 [
  #include<conio.h>
; s# q/ m) V! O2 q, y1 L5 ~* j" O" ~( a& @6 t+ A  ?7 T& k" N- K
  void goto_xy(int x,int y);6 P1 W# _2 y& h( H3 F; w. w$ K) E
  void dcls(int x1,int x2,int y1,int y2);
% T$ y+ z3 K0 d3 k% q0 `  void bcls(int x1,int x2,int y1,int y2);* a7 [) h  q8 d
  void kcls(int x1,int x2,int y1,int y2);
/ U2 h- O$ \; s# a  void recls(int x1,int x2,int y1,int y2);4 l. w  W' Y8 V$ J) n1 e
  void zcls(int x1,int x2,int y1,int y2);/ r( A3 d% X4 Y0 j4 i
  void puta(void);
& U6 i9 [. e! V4 T
, u- |: f5 j. \6 m4 Y  g$ E) |
5 D9 j$ Q5 [; [( a9 h  /*--------------演示程序---------------------*/% ]- B! ?: K/ H7 C  i
  main()
; F5 Q, R7 |/ ]% G" G$ U, I4 z  {
2 N5 X; c7 X( e  puta();9 }5 A' ^9 c- N2 `1 ?, P: z
  getch();
* Y( M6 m& V- d+ Q( x6 K2 d  dcls(0,4,0,79);& m2 W+ l& C, x4 \# W. P/ x
  getch();
, m3 \: M% c/ g' K# ?" @  d4 S; o  puta();
. K9 M- `2 p2 _5 S3 E% M  getch();
- E3 F# h& [" ~$ y3 y  bcls(0,25,0,79);6 B; J7 R' E5 s8 z, [! Q# k
  getch();
7 l. l& ]: [) @2 O+ r, j% i0 `  puta();+ s5 M3 j: i. d4 c
  getch();
5 X) P6 s  J& e/ `  zcls(0,25,0,79);
3 \- {7 `% K! h) f' b* U9 C  getch();
- L) `; R. Z+ H7 Y8 z' B* o  }' k! |% e4 B( h$ D5 k& X' u
  /*********center clear screen(中心清屏)***********/
6 r! `  t! e, _9 N2 n  void zcls(int x1,int x2,int y1,int y2)9 T. |1 I* f9 m" c4 s! q
  {# Y$ B) S+ t  a( d
  int x00,y00,x0,y0,i,d;
0 n+ s4 a# i, I. j$ P  if((y2-y1)>(x2-x1)){5 w/ r4 ~) b5 c2 ?, i7 N5 v; L  q; R* L
  d=(x2-x1)/2;
0 C/ ]0 e/ p' w5 t  x0=(x1+x2)/2;2 Z5 |$ g6 W/ O6 Q  N" |' D, B
  y0=y1+d;
0 c( c4 d! ~  |# t; _; N4 @2 X  y00=y2-d;
# L# V9 P1 M; w  ?% t$ A. Q  for(i=0;i<(d+1);i++)
3 }' S6 ~/ R7 h6 A5 M  recls((x0-i),(x00+i),(y0-i),(y00+i));
2 f% z9 F) ?& s# w; D5 j  delay(10);# P  E" T$ ?* p
  }
, v7 E/ Y# Y; G9 T  a8 h" t  else{
+ V" S/ M1 [. J- n  d=(y2-y1)/2;, |0 }5 ^+ M1 X* q
  y0=(y1+y2)/2;" [4 t) D  D! V
  x0=x1+d;! A/ H- l. v; O1 ^$ B& l2 |
  x00=x2-d;
, k2 o- j" V% F  for(i=0;i<d+1;i++)
! x3 |* g" S( P0 b  r  V- R0 w  recls(x0-i,x00+i,y0-i,y00+i);
! Q3 {& P2 J/ U" m, \  P0 Y* }8 Q! Y, d  delay(10);# D; i, p$ Z( ^  }, H- m
  }
% u5 D$ x4 I5 Y) |  }
/ \8 c# b; k1 |$ q& e9 p7 d  z# f8 w9 Y, h
  /************* clear rectangle side(矩形边清屏)***********************/% I4 X0 b( L7 P7 w
/ }+ ?7 v( e: |4 I+ \/ S, A  e6 }
  void recls(int x1,int x2,int y1,int y2)
0 `0 p' Y4 x0 P4 X  {
/ d, v$ C4 o+ a; d9 [4 f8 d7 D/ V  int i,j;
% I6 E; ~* _+ N  for(i=y1;i<y2;i++){: P& d0 [* u1 J) D5 {1 ?' {+ \4 A9 x
    goto_xy(x1,i);4 ^( z7 X) I, Q; u/ W
  putchar(' ');
/ }- }! ^+ Q, X6 e2 s+ G  goto_xy(x2,i);! i- n8 y) g( z, b
  putchar(' ');
0 I! j: A& `+ J! l  delay(10);
+ p1 s5 U) n$ b7 a6 h  }; B- W3 p: O6 D% E3 `) h
  for(j=x1;j<x2;j++){
: Y2 n# J2 k3 l8 Z  goto_xy(i,y1);7 l& F" I' v5 E
  putchar(' ');( S, x9 P2 n) \& V% t# u
  goto_xy(j,y2);) n; d- W! B( V3 ]7 e
  putchar(' ');- @& G4 f, {' ]) j- S& d8 Q" f
  delay(10);8 B( t, g! i; t6 d" Y4 b
  }5 j7 V4 W1 b# X6 S5 c6 J: ]
  }$ o5 U4 d0 q  Q; y
  /******************open screen clear(开屏式清屏)*********************/
2 R6 F+ c& y$ U. }7 }- a7 v3 u7 {2 c; h+ c. D. G  L) X
  void kcls(int x1,int x2,int y1,int y2)
) J2 Q* k; y% g8 A, M  {
7 r* v7 D2 V8 E$ _  int t,s,i,j;
6 r- P$ N) v: \. z  t=s=(y1+y2)/2;
0 O/ l0 n, z& k" B/ a2 {# u  P3 O4 j  for(;t<=y2;t++,s--)
, g1 [/ j  ]1 m$ {0 Y2 T5 U  for(j=x1;j<x2;j++){
$ v% M0 \" i! L  goto_xy(j,t);
" e# m% a3 u" M8 x  putchar(' ');$ S" Q" _" r8 G. }( P
  goto_xy(j,s);$ Y9 D( C6 L$ W- o( J0 R( F) Q9 ^
  putchar(' ');
: v$ R; X# D! j8 J% [+ |6 ]1 |  delay(10);
8 ]3 }& ?6 [( U. ?9 c  }
; T) z7 C$ r8 }( u  }
4 t2 [, J/ Y6 l: S9 Y& v  /*****************close screen clear*****闭幕式清屏*******************// g% `* B! ~5 q- j
' {* Z/ p' F: A( t/ }- s1 r
  void bcls(int x1,int x2,int y1,int y2)7 p5 r8 B: C4 o: M% k5 W
  {
/ g6 s2 L! M6 s  int t,s,j;
, Y( I5 a  E0 y! z0 w  t=y1;
/ ^6 w! z. u# U- v  s=y2;6 L4 n6 o% j0 D5 h( v9 m: s
  for(t=y1;t<(y1+y2)/2;t++,s--)
: ]( l1 v7 ?' A0 r' Z7 A' E0 A  for(j=x1;j<x2;j++){8 v$ R$ Y9 R& g) O0 W5 f& q/ C
  goto_xy(j,t);: T' z* h3 o9 A5 K+ r' R
  putchar(' ');- y- ?! ~* B  C1 S
  goto_xy(j,s);8 U. [# x0 M' f7 L- d  W5 P
  putchar(' ');( D0 T5 E2 G: Z2 P
  delay(10);
% K" l/ r' V. n! F2 S  }( M, M8 Z5 M/ F" l8 ~1 Q/ T
  }
* l4 G4 i& d9 Q7 m0 z  /******************bottom screen clear(自下清屏)********************/2 J+ o. S* T6 `  f7 Y, l

! B  y# j2 s0 h* P. P  void dcls(int x1,int x2,int y1,int y2)
1 B" H0 z* J3 `- n2 s3 D) x  {
/ F8 P3 N+ _/ v5 t  int t,s,j,i;  z8 ?+ K7 v. N  \4 r
  t=s=(y1+y2)/2;# Y9 ]  p9 H, O) ?0 Y  O8 H$ z
  for(j=x2;j>x1;j--)
) D& B1 k! i- P/ P) x/ ?  for(i=y1;i<y2;i++){
4 f4 ~- K* d4 D* e  P$ Y! f  b  goto_xy(j,i);
1 X$ h* o8 n" N  putchar(' ');- u6 m6 d- `. X- e/ U& r
  delay(10);
1 e' l, Y9 r2 }$ i# b  }
" M  b. K' h- W, M4 g7 T( _  }
5 J8 W0 ^; P: ?( h2 R5 a5 b: z  /******************设置光标子函数******************/
+ p& ]3 u* v% J5 Y+ w) S) s! {7 ~8 H* {: r  P1 Y, [/ X
  void goto_xy(int x,int y)" ?2 G1 ]- x# I, w
  {3 k  J8 f# C' @+ @0 ~; x; p
  union REGS r;
7 r' p& E. g  D! N) I. m  r.h.ah=2;6 a3 k$ o- ^: S; B5 G
  r.h.dl=y;, b2 B5 l0 T- d( n) E! v5 i
  r.h.dh=x;( r% Q0 z+ n! q' m& y
  r.h.bh=0;3 n( I2 R/ u( a7 p7 |6 l! t0 r3 w
  int86(0x10,&r,&r);
0 V/ b: [) ^' S% `$ _  }5 `7 f* a1 X0 \, K* P

3 U* x" m/ _& ?9 p6 m, q  O% I  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
/ N1 J$ C% P: U8 k8 Y; T) i; u' M- h4 h) P5 C) z7 E8 P$ Y2 p
  void puta(void)
1 H' `" w2 Y/ K; R* L& Y, a  {
& _+ [' y& c- E) \! }  int i,j;
5 I  h3 x6 w' W4 Q  W5 c  for(i=0;i<24;i++){: e2 e" _( h9 g: A4 a$ |) E
  for(j=0;j<79;j++){! G0 Q% i3 M' h2 `: l" E' k) P
  goto_xy(i,j);
2 m  b/ s8 G, V& n' x5 Y$ n  printf("a");0 D$ I5 S! }! I6 `% ~8 i
  }
/ L4 o0 a' y; M9 u$ ^  }7 E: F! q" b  J2 l1 x- z9 M
  }

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