返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
* ?; \3 U, ^8 l; E) G' \1 W/ U5 x' E% @
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
$ W4 @3 {7 }- a# A1 h! l
' d: W: u0 W. x! X8 {  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. . H& @  M  B' o3 @  E$ R4 F/ R
  子函数及演示程序:) b% @+ v- h) V$ I& _! v
" o$ g- ~4 u! z9 a7 v$ [1 ^
  #include<stdio.h>
  g& l1 n2 w! j) @* ]% \; o4 i  #include<dos.h>
4 a: k3 H- ~' j2 c  #include<conio.h>
8 X$ e# Y. W8 g1 Z1 J
& E) q1 f7 C" c) V  void goto_xy(int x,int y);3 \% q/ w  Z2 y# u
  void dcls(int x1,int x2,int y1,int y2);
9 B7 G1 x" p5 p9 {2 n8 M  void bcls(int x1,int x2,int y1,int y2);
1 }/ r) v6 F9 p2 I1 q2 @, m' b$ r  void kcls(int x1,int x2,int y1,int y2);
6 \6 S4 J6 Y/ N# f2 G$ P  void recls(int x1,int x2,int y1,int y2);
& `& m3 {/ P6 |( L4 S, W  void zcls(int x1,int x2,int y1,int y2);
$ W/ w9 ^! U) H$ x+ \& c) Y* k  void puta(void);/ L$ x- P6 ^7 |0 j  z1 j

! w( g3 Z. ]! _! @- H3 U
; s. F6 \+ x) H8 j  /*--------------演示程序---------------------*/
5 A3 M- u3 _' }3 K6 ~7 [3 ?  main()/ S0 D" `4 j( o
  {' H2 k& |3 _$ A- l# W1 L
  puta();
" L( g5 f' M5 B2 F5 A% X  getch();% Z$ ?  ~! n- D4 I5 |' c
  dcls(0,4,0,79);
- A- a4 I" S8 ^7 G1 \  getch();
( u) q2 p6 b, S- z: [/ V0 [  puta();: X( Q; ?, y% q/ R
  getch();
5 Y) Z# Q4 s7 g# p7 R9 l0 P  bcls(0,25,0,79);
/ u9 c1 a! w# @4 x9 Q* t& o  getch();- M: E7 s0 ]  A1 u
  puta();
6 o+ S; B3 }5 `4 B$ b/ b  getch();% T" T: b& K. o5 h/ y
  zcls(0,25,0,79);+ m" A" z: f  }' A) r8 W+ j$ d- f
  getch();, [0 G4 y6 B, o5 `, x* X
  }
3 O8 W- T& j6 k9 y  /*********center clear screen(中心清屏)***********/
2 f- e! p, V, X% z; Y1 ~4 `' @$ @  void zcls(int x1,int x2,int y1,int y2)# r; v+ l3 X5 f% T% V: S# g
  {
0 N# s+ n0 [1 c  int x00,y00,x0,y0,i,d;% N1 \) \4 q9 K0 Q; \4 I; s
  if((y2-y1)>(x2-x1)){8 L: x) h' q2 w3 {/ l% ^
  d=(x2-x1)/2;1 j, [. R$ u4 B3 n* _
  x0=(x1+x2)/2;# ~8 k8 T& r0 u, `- U+ v
  y0=y1+d;
! r, I" P. Q' C+ `* k. ?  y00=y2-d;
* @7 m1 _' C7 ]. d! o* t  for(i=0;i<(d+1);i++)
% \. v9 e* |) i  recls((x0-i),(x00+i),(y0-i),(y00+i));
) ]* V1 Y- G* ?8 u0 }  delay(10);
: W/ ]  S3 \8 i3 O  }( x! x& N: h+ _2 [$ M
  else{; b) e; S* G# F5 x6 K( `6 ^6 v
  d=(y2-y1)/2;' E1 @+ h/ N, k4 K, _
  y0=(y1+y2)/2;4 d# I  @$ I4 w* ?* ]  z
  x0=x1+d;
4 L" q$ F" t. f; C+ A. o  x00=x2-d;
9 }: g2 M: ^9 F* \; A0 e5 q/ J+ c  for(i=0;i<d+1;i++)
- T( d5 b) R& A. G  recls(x0-i,x00+i,y0-i,y00+i);7 A3 k$ t9 x* z# b$ }$ g
  delay(10);' V( u  \$ ?( t
  }
8 n- O: p  [! C# A4 d7 o0 @  }4 N+ G! _5 G1 Y. P
* C% E( q6 G$ u2 u' A* f/ Z
  /************* clear rectangle side(矩形边清屏)***********************/
" m! o3 T/ ~: P- w
) H) _( _; O% K. k7 r  void recls(int x1,int x2,int y1,int y2)7 {1 ~! f, g6 y* q
  {
# t9 b+ I" j* r. W& g- k4 o  int i,j;
, F; S) g1 ~8 y& a+ I  for(i=y1;i<y2;i++){
4 M% g3 h$ v: r; v0 h    goto_xy(x1,i);
7 A4 s7 u: A7 q  putchar(' ');
& `) a" E; F, q0 y- z0 A$ u  goto_xy(x2,i);; S, `4 u; C  ?
  putchar(' ');* O/ y0 h3 `- C( x8 p9 k3 b. `
  delay(10);2 k* c! @/ L1 z" Q, V% |
  }# A, E; W% N- W4 R, F
  for(j=x1;j<x2;j++){
0 S# {0 X' }4 y4 x: B  goto_xy(i,y1);
8 _! {" p/ t  I  i% r" J% W  putchar(' ');
8 R1 t: l& \, u! Q5 z' b& g1 V  goto_xy(j,y2);7 k9 y# r" E8 V" f2 F0 R9 q
  putchar(' ');$ T* W  w3 W8 ^( _% }" D
  delay(10);" f- v3 v* p- l! q& w9 Z
  }) c; m" l) j, {0 n+ D
  }
: X% l( D4 @2 W5 d0 j  o  /******************open screen clear(开屏式清屏)*********************/
6 e1 E/ j* l) J/ o: {( S: d2 k" l) b9 a7 X' s. A
  void kcls(int x1,int x2,int y1,int y2)/ [  J) ?3 g  z; m7 C
  {
9 ?5 |  W; Z# i4 @  I  int t,s,i,j;+ h2 b& p, y2 Z. G: l( O8 O5 B; t9 [
  t=s=(y1+y2)/2;
4 b$ C0 ^6 U5 E- d6 o  for(;t<=y2;t++,s--)' D6 V. T, S& S  O
  for(j=x1;j<x2;j++){, `; k7 q4 \1 B! n+ @3 ~
  goto_xy(j,t);
2 p0 \/ D( N% E$ q6 h3 ]. ~  putchar(' ');
# Q3 e' Y2 e/ r  goto_xy(j,s);
5 k+ R" w% z  m  putchar(' ');+ ]/ C% j: a( G  _( K  Q$ O
  delay(10);9 z: t& a6 y: ]$ I" N$ |
  }( @. _" s/ H/ _4 D2 p/ i
  }4 D$ Y  B* l, R" T7 Y
  /*****************close screen clear*****闭幕式清屏*******************/  H; k) ]* X( ?1 G0 l

" g4 F! \7 b+ ]7 d  void bcls(int x1,int x2,int y1,int y2)
$ U0 T: Y( L0 c2 U- l  {! f" U/ H, k9 [8 l
  int t,s,j;& l4 K0 T3 T6 t( ^+ k
  t=y1;' ^6 W9 J" c* \  t
  s=y2;) G0 c, I5 K. t' g( z( x0 L
  for(t=y1;t<(y1+y2)/2;t++,s--)
  E5 n8 J6 {6 u/ y7 E) j  for(j=x1;j<x2;j++){7 j7 T- G5 c0 F# D5 `
  goto_xy(j,t);2 t9 R) I/ f5 H; t; w) r( I
  putchar(' ');# F3 N* q" w; x
  goto_xy(j,s);3 E9 V8 ?) U4 e/ Z
  putchar(' ');
1 a5 ^0 O: q. Z$ r2 R, f# ]7 l; [  delay(10);: D/ A6 i9 `0 G
  }9 D" I* c( V; R  Y" j
  }( {7 F1 q: m* h. C  Y( R1 l' b
  /******************bottom screen clear(自下清屏)********************/
% ]5 P% I& u# L; S3 b
5 J9 Y! u/ k- u( ]( w! v  void dcls(int x1,int x2,int y1,int y2)
( r8 z3 F! g2 n% W+ w  {
7 ^2 O4 q, t7 O% n  int t,s,j,i;; ~  f* U: u6 g9 f6 O/ C
  t=s=(y1+y2)/2;+ O* y6 q/ p6 k. _
  for(j=x2;j>x1;j--)
, K7 q  t. o# z+ `  for(i=y1;i<y2;i++){0 f: v$ q* _; Q$ B
  goto_xy(j,i);4 j: h" B- C7 U6 b  ]2 E
  putchar(' ');
, o8 I3 ?# q. u( R# d! M' k  delay(10);
  L1 I& _8 r; R0 H  }
5 L9 @0 |$ g, R& o2 j( J* M* M  }/ U9 Y3 r7 z" B  c8 p- J. n
  /******************设置光标子函数******************/; R& H6 M1 q+ L3 p9 z: T
5 \. Q- Y0 m/ u/ e0 D
  void goto_xy(int x,int y)5 g1 c  @: u4 z! {0 ]; H
  {4 q" }& k& m! j  X3 H- b4 n
  union REGS r;
  z: ]  j- g. B. B: \3 {: {9 D  r.h.ah=2;) _9 v) c7 }9 w; q- o* l
  r.h.dl=y;
2 K5 D. ~+ o, \4 V6 F& v8 R  r.h.dh=x;0 z3 A9 A6 u8 q
  r.h.bh=0;: k3 {3 J( h1 y. U  x8 H/ @
  int86(0x10,&r,&r);
8 N! e! K$ T) W9 _9 S  }7 |: g$ w2 [" L! k. D

8 Z0 X5 x8 R* f9 U  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
/ e8 D! V9 h7 }8 {/ B- w2 w
& o/ Q7 u0 r1 z: P  void puta(void)! N3 i' q4 ]* Y, s3 }9 ^
  {
( u9 k9 O6 }' Z, S4 Z  int i,j;
, O8 `* w# U3 H* k  for(i=0;i<24;i++){0 z4 t" a! H9 `8 S- o- @
  for(j=0;j<79;j++){5 _0 F; z- b' Q# p( a
  goto_xy(i,j);
8 m! Q" ?" j% i  printf("a");
1 F. Y& s# }  m) i  }1 H7 e5 B: g3 }6 `
  }0 q, w& r& i8 C# Z' Q& g% T% E
  }

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