返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
! v) E6 X& T! l5 ]# B$ R+ P
: ?% |/ ], T8 v+ y9 R8 {$ l  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
2 y9 A' u$ ]* E1 I1 l! |# ~5 ^+ g, z! t/ Z; {  D
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
3 K0 U$ O% b) K7 Q4 L5 d  子函数及演示程序:
# j$ {/ T/ {1 b5 b2 a# l4 M7 p" q- e# @+ S2 e
  #include<stdio.h>9 I( v* z# P. z4 ~3 {2 w
  #include<dos.h>$ }8 Y' q$ A3 v' v' A# b  Y
  #include<conio.h>
7 E. }( a& `5 A4 `
/ H0 v5 y* [8 O  void goto_xy(int x,int y);; I1 o- @! `  s* v9 p
  void dcls(int x1,int x2,int y1,int y2);
1 s* p/ H! C' z+ Z  void bcls(int x1,int x2,int y1,int y2);0 S  c; z' K! t9 M! H  \
  void kcls(int x1,int x2,int y1,int y2);
: p/ ^- l, @# X# D  void recls(int x1,int x2,int y1,int y2);; Y* ~; h" y* W' n
  void zcls(int x1,int x2,int y1,int y2);( B' i5 y& N) O2 i
  void puta(void);8 q; N+ f; K' _) |& o6 t6 u

& ^1 }1 c7 U+ I! ]: Q
4 m; W- Q1 m1 O8 e, H  /*--------------演示程序---------------------*/
7 V/ r/ r' v  D, d- d  main()9 R6 Z2 z+ q- j3 z
  {4 _0 R& x0 P- |5 x/ ?
  puta();
1 w- A, c4 ^8 e  getch();3 d6 b7 p- d7 e  v! O
  dcls(0,4,0,79);  W4 e( \5 s8 @+ U# F: Y1 N" e
  getch();0 c$ U& L/ S6 q
  puta();
. Q3 }7 C8 q& D: v6 \  getch();
0 d  [8 Q* Z, K/ y; w. L' D. M  S  bcls(0,25,0,79);4 j$ i" d# y1 R. `
  getch();  i. ~; x* X9 X( [
  puta();+ k4 j$ W6 f% P
  getch();" A4 H4 w% B# G7 z% n
  zcls(0,25,0,79);
: G' J7 ?+ L- ^1 ~5 m  getch();, K/ \  Q' C2 i# H; @
  }% k8 q7 l' b- Y/ L2 c
  /*********center clear screen(中心清屏)***********/
0 Y- {; z0 u: M" X  a: R5 a  void zcls(int x1,int x2,int y1,int y2)  I9 r0 s2 Z  K- S# x0 u( x8 h
  {1 p; @# F) c5 _" i. _
  int x00,y00,x0,y0,i,d;
! @9 a2 ~& d$ \  if((y2-y1)>(x2-x1)){3 |+ V, A, i. ~* C, N8 Y: w  R2 ?
  d=(x2-x1)/2;8 M, A8 e& Y  P8 v* b7 T
  x0=(x1+x2)/2;4 t+ L% P& M: d3 ~" J" S
  y0=y1+d;
- U% K# d# l) \  I+ A  F  y00=y2-d;1 A6 C% k( b# q/ q- f- d
  for(i=0;i<(d+1);i++), H; D+ r  e8 n0 n
  recls((x0-i),(x00+i),(y0-i),(y00+i));
5 Q7 w7 W" C8 g7 n% c6 a# j  delay(10);
' b7 H/ W3 c) z- `+ T  }. M/ \: @3 r; q* }2 E% G& J7 s# e
  else{6 I- w& J( ?% I6 E
  d=(y2-y1)/2;
9 z9 i/ p7 ^; f  y0=(y1+y2)/2;: B! {" ^8 }5 Z
  x0=x1+d;
: E6 g7 m7 w2 D4 a% A& _  x00=x2-d;/ k( H  V0 }( e: ?2 D3 R$ y  G
  for(i=0;i<d+1;i++)6 G/ N% ]3 W6 ~8 n" t# ?
  recls(x0-i,x00+i,y0-i,y00+i);
5 d9 x/ Y5 w$ ?: t  delay(10);
; }, |; a5 E/ i0 B4 ~  }! Y/ j( ?' h/ V/ z- ?
  }- x4 k6 i  ^+ l7 M* Y$ c8 Y2 F$ z
" `: B, K6 A6 i* [" Z
  /************* clear rectangle side(矩形边清屏)***********************/
4 ]# z4 |+ W9 N: X% g' z; ~: }; F0 J  Q( ^- ?
  void recls(int x1,int x2,int y1,int y2)( z; l, ?( D: U: q
  {5 O  \; V" @1 L
  int i,j;
/ v. i& m& r+ N# {  for(i=y1;i<y2;i++){
2 W6 _3 B* p; t    goto_xy(x1,i);
- E' k/ I6 E" a. ^1 _+ R) z% g  putchar(' ');
+ j+ @# a2 b# U  P+ [; r" z  goto_xy(x2,i);
- V5 ^. C) ?1 B9 |2 f  putchar(' ');
/ n8 @" s0 F* q6 a- S' G  delay(10);
+ A6 `& M4 |/ f2 b' H  }
% c8 N/ y7 l& z7 A- M* o4 |  for(j=x1;j<x2;j++){
) Y3 G' B# O7 o2 f$ N  goto_xy(i,y1);  i6 _5 a* Q4 M1 |, Y' i
  putchar(' ');. C( y# |2 b" I
  goto_xy(j,y2);
! S; Q: R# U- m& o  putchar(' ');4 f+ y' ^; {2 D1 o! G. Y
  delay(10);& i% R0 n9 {9 m- A8 c! ]3 {$ D
  }/ B0 j( \( ], v# y6 U1 K
  }2 X5 m  W0 o" l: `( a1 X0 {. D
  /******************open screen clear(开屏式清屏)*********************/" G$ x( N! m7 F

7 w; C6 Z6 E3 {! X6 l  a7 O5 T/ |  void kcls(int x1,int x2,int y1,int y2)6 I% y8 `: j+ N3 Z6 E6 i: H7 Q
  {
8 F7 |! k3 |: C+ E0 I  int t,s,i,j;
+ |) @% A) E4 |# ], c$ V3 b. D  t=s=(y1+y2)/2;
+ T* I9 e0 q* _8 d8 G! k/ ]1 S  for(;t<=y2;t++,s--)2 a1 P" w3 w8 v3 a* q
  for(j=x1;j<x2;j++){
' a. O" s: ?. J: _" J: D1 }  goto_xy(j,t);6 |* A, z3 o; `
  putchar(' ');* y, r: b5 F6 y. B2 F  s
  goto_xy(j,s);
: d" e1 k# ^1 b- Y, [: c  i  putchar(' ');
6 |! o5 r  w' f* t7 m8 T% ^; s0 {  delay(10);7 Y- ^& \' Y5 v1 r
  }; G1 `! l+ E" m- w' E- o' U& d7 q" ?
  }
$ S' K) z' q# d0 z6 @* l$ v  x/ ^  /*****************close screen clear*****闭幕式清屏*******************/
' \8 N3 M# x# p* ?+ ~& Y/ G
0 F/ v6 b  ~* b( ?  void bcls(int x1,int x2,int y1,int y2)2 b9 u  E3 M' c: m9 z: q
  {
# `" d3 [# i. t- X  int t,s,j;+ n3 c$ c& i. l1 ]& t# b8 d; G" Q
  t=y1;4 p3 a0 m; k% ~3 z) T
  s=y2;
' M/ z  _% R2 p& a  for(t=y1;t<(y1+y2)/2;t++,s--)
: E2 L8 ?5 r4 q0 |2 m8 ], b  for(j=x1;j<x2;j++){
7 K+ y# |, P) \0 t  goto_xy(j,t);
0 d8 H0 c2 h1 x% i" A& M' b0 B) J  putchar(' ');1 |& |" a7 F8 Z' ]
  goto_xy(j,s);
% ?/ v% a3 H4 J  X! ^  putchar(' ');; r# x( I) S! I& A4 m; ~( z
  delay(10);
* {. |# O1 M, z# v  S% B  }" ~) h1 ]/ P1 X" I
  }7 O4 \! P0 i( N
  /******************bottom screen clear(自下清屏)********************/
% n7 i. \' ]; y; n; O; e, h
9 s" f+ B/ L: r2 K* K  void dcls(int x1,int x2,int y1,int y2)& e6 I( a3 d6 [: I7 W
  {
. N7 R7 _/ ?6 }6 L* d+ [! s: O- S8 [  int t,s,j,i;( Z" s) h$ c' @
  t=s=(y1+y2)/2;
1 ?; r% U) \8 R4 ^( P; ~7 S  for(j=x2;j>x1;j--)9 c# b  A5 K" i: B, N! ^
  for(i=y1;i<y2;i++){
/ L, N2 S" z$ W6 |  goto_xy(j,i);% m1 C# a& B1 U' |
  putchar(' ');
$ r2 Q; I" V& X* ^5 s5 g% c% o  delay(10);
0 K( E/ r1 n0 \& I0 _9 k  }
5 \5 ?! s2 i9 Y  }
  G7 h4 Y. v1 c4 y) d  /******************设置光标子函数******************/
0 r/ E, T& H% \
- t, [  B& H2 \/ v  void goto_xy(int x,int y)
( k$ a. y- M7 h6 X- J/ H0 B  {
8 w7 h' x  g" X$ ~  union REGS r;$ D; E- Q; X9 Q
  r.h.ah=2;
  O! f8 d* `1 \& N3 ]; k0 P5 Y  r.h.dl=y;
7 r. c; S/ m, ]; x. F7 X  r.h.dh=x;  H5 @' M; x( V% ~8 W7 S2 n
  r.h.bh=0;  z! Y; A, e( H! `
  int86(0x10,&r,&r);
6 p  C' `# s  J  }
1 w, m8 T2 |8 p& n  r- @& Y8 m/ s3 O7 z7 z& ]& p8 [6 C" P
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
8 z7 ^% \2 y3 I, f8 J) N2 W) s
9 |' h) i: F2 h) B5 [  void puta(void)+ z9 D1 b3 _5 w3 P0 t
  {
7 j, _( u! P1 |7 L5 V  int i,j;
! A# {* T' t  }; E5 G0 m* `  for(i=0;i<24;i++){
! B/ @+ }0 p8 G% m  for(j=0;j<79;j++){
# q4 A' D# k, m9 O; K  goto_xy(i,j);
6 ^+ f3 d$ n9 X4 J' f  D( U! O  printf("a");
. S' E0 M1 e- }1 l6 o$ I  }
/ ~8 \2 L- v& k! c' R  }
, j3 Z5 H/ D7 E( f  u; }! B  }

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