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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
0 U. j/ q, h8 Y. f8 I( ^' k
  z4 U3 a: L/ K% q  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
* B5 e" o  y) h  F& r1 N4 W8 I1 L9 s" z5 J- n
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. * e4 F& T# x& D  F
  子函数及演示程序:
5 s7 i& c/ P2 N; b7 c& w9 `* ]4 ^! H: I
  #include<stdio.h>
9 O) w2 e8 }! K+ S8 Q0 S( n# \  #include<dos.h>% W' p: z: p5 D8 z0 E# O7 K4 @
  #include<conio.h>% F5 m( V$ X1 b) C  i6 w

+ z  u+ [$ p. J  void goto_xy(int x,int y);% m7 b3 C# l% ?7 O# b+ u
  void dcls(int x1,int x2,int y1,int y2);* \( m+ W7 J9 B# U
  void bcls(int x1,int x2,int y1,int y2);
4 D/ ?& H& i# v3 s  void kcls(int x1,int x2,int y1,int y2);
9 b  a& l7 ^& ~; j( v7 W  void recls(int x1,int x2,int y1,int y2);8 _4 z+ P8 T  s! d; s# K
  void zcls(int x1,int x2,int y1,int y2);$ e. W  I% u& ]; v1 n
  void puta(void);8 v; ]8 A, ^# h- ?
) Q1 V4 r1 H: w" X$ t4 ~" [

( ~+ y( D' o6 i2 s' d  /*--------------演示程序---------------------*/2 A8 q+ ^$ K& ~1 ^% m
  main()
0 S! u* T' |7 Y8 c( D& I& n3 z  {( e# X1 n# e& O( _! h, F9 [+ Y
  puta();
- f- }$ x! Q& r: I  getch();( e9 E2 r- q2 i; o# {% [" s
  dcls(0,4,0,79);
1 _$ R1 T! }4 f  G: A& s4 [  getch();
6 [4 R% S  K6 X  puta();
7 f8 e( ?9 `9 p  getch();- F) Q1 q2 G8 a/ I
  bcls(0,25,0,79);
2 s9 N- m: a" ~8 r: H9 y  getch();6 [1 d. s2 ]; m  n! F
  puta();
/ F& i* @" s) ?8 l3 p8 E  getch();
6 `" Q9 _. \% A  zcls(0,25,0,79);/ y  w0 [) i7 T: j. U, g3 P% B
  getch();7 W4 G+ e2 z7 B+ v+ f
  }% E) @" N2 J* s7 i+ R& v
  /*********center clear screen(中心清屏)***********/) c) U" e) L0 ]0 b7 s7 o1 g
  void zcls(int x1,int x2,int y1,int y2). \+ l* {3 w3 S
  {4 v9 P/ z  h/ a8 t: a! B3 ]
  int x00,y00,x0,y0,i,d;1 z; Q& H" b' K: G  D: ^
  if((y2-y1)>(x2-x1)){& `, q9 L, D9 G% W3 Q: T
  d=(x2-x1)/2;
/ c/ d3 m3 o/ T: p0 {  x0=(x1+x2)/2;
5 Z; P7 ^% t+ ?, h  s/ |  y0=y1+d;
' {- z; ?# h/ y  y00=y2-d;, w- F$ R# l9 H; L2 r
  for(i=0;i<(d+1);i++)
$ `6 U6 L, s8 R/ T0 ^2 C  recls((x0-i),(x00+i),(y0-i),(y00+i));
8 n- z, u7 x' f, f  delay(10);" b( h( F- B7 N# x- b$ B
  }+ I7 U/ B4 D8 @# ~% r
  else{7 k4 Q1 E, d! h
  d=(y2-y1)/2;
& Y( |* K# a3 F2 W  y0=(y1+y2)/2;
) Y3 p9 [+ z8 Y( z% F  x0=x1+d;
7 R1 W$ m. N& K4 a' f. }  x00=x2-d;5 ?, _% c5 H2 y6 ~7 n- U+ l8 W
  for(i=0;i<d+1;i++)( ~9 ]6 N8 A0 p& u% A% o5 G8 s
  recls(x0-i,x00+i,y0-i,y00+i);" }/ m0 M. B# {
  delay(10);
/ _8 y' Q( j3 l# J. S/ ?  }
3 O0 ?  I9 n) ?% v  }
8 N$ D6 Y2 e0 t: M' F# g  X6 ?$ ~$ n3 y) f$ J0 p# V  u9 \5 F
  /************* clear rectangle side(矩形边清屏)***********************/
0 y9 f5 W4 q' v  ^' v; R
. q: X6 E" S7 Z3 b% k, ]0 `  void recls(int x1,int x2,int y1,int y2)
+ D. }  ~7 ]: u  {
- n0 ]! e3 L, X- Q4 ]  int i,j;
' V! h& h; G% u0 p8 L- S  for(i=y1;i<y2;i++){
* j: k/ a$ S2 E# ]2 ?3 p, d3 C5 L) F    goto_xy(x1,i);* ^3 m  X( Y: V: b  n
  putchar(' ');
; y2 x, L" }6 Q- w. h, B! C  goto_xy(x2,i);
; q3 h% r3 M# S5 e  putchar(' ');
" V( F3 D) _; l% }" _6 w  delay(10);
% j1 Y# a5 ?8 m! o. X% W  }* G- l. c( e9 M! q
  for(j=x1;j<x2;j++){
) J6 k* W8 m- M  V  goto_xy(i,y1);
1 x! s# m  x, ^  b  putchar(' ');
  F6 E9 u2 @5 ~- e- Z  goto_xy(j,y2);
) g3 l, z$ k5 f& q  putchar(' ');
& B% p7 h  N& C0 o6 d  delay(10);  t$ E3 S9 B/ j& @& p+ y& q2 V. K
  }
- [2 u# `1 q7 O' N# w! e  }3 x( H0 i2 Y1 d
  /******************open screen clear(开屏式清屏)*********************/
& c1 d# o- h! v9 }* s7 H! d" }6 P# ~; l# U" g
  void kcls(int x1,int x2,int y1,int y2)
; {8 p: v6 H) L8 q# @  F  {7 X- I3 H6 P: U1 G* _
  int t,s,i,j;/ V  {5 \+ u7 j' u$ e3 _6 m; O
  t=s=(y1+y2)/2;+ w4 [0 l) O  l- x/ H1 y+ x# j
  for(;t<=y2;t++,s--)
; k& ]) \" }/ J  for(j=x1;j<x2;j++){1 c6 i5 g( Z0 Z, a) D
  goto_xy(j,t);* e! ^1 E! Q' f2 y+ D
  putchar(' ');8 ]8 ^9 T# k& }2 d! z
  goto_xy(j,s);0 _+ ]2 x& P+ v2 R! w9 y. @
  putchar(' ');6 `8 D5 B4 [5 m& C# g; j
  delay(10);5 h6 z( b2 B, _: Q* }3 q
  }
( k: ]4 e' H2 Z' m  }$ @7 {/ ?* N$ ~# o& L" J% `
  /*****************close screen clear*****闭幕式清屏*******************/6 N" @* u. I/ A) k" H: S$ L2 B/ I3 g
" a- S4 D- L5 y+ M/ h$ M
  void bcls(int x1,int x2,int y1,int y2)
, w: A4 l: h' m5 A0 `  {9 A1 [$ k' m6 W- _# c
  int t,s,j;
+ R: Z% ?' \: M  t=y1;
2 w8 P3 b; R9 Q$ v  s=y2;
7 B; ]8 n/ b% o9 s1 ]; d" ]2 u  for(t=y1;t<(y1+y2)/2;t++,s--)( d5 [1 c& y: Z
  for(j=x1;j<x2;j++){' Q% J2 |3 T0 a4 w, U. v# M- t8 h: d
  goto_xy(j,t);
  u+ i7 S2 M1 v0 a  g( ~& A+ ^" g* }  putchar(' ');/ q+ e3 ?7 j3 ?. }
  goto_xy(j,s);5 `: {1 @0 a7 _3 E# ^
  putchar(' ');- d$ z" N# W! W5 |+ c, s! M
  delay(10);) ^$ l2 c1 s- `# |* p: w5 U
  }
$ ]/ H3 h% _' x: ^  }
4 p  k( u1 V) I) ~2 J7 L; z0 O  /******************bottom screen clear(自下清屏)********************/3 x/ @0 L% \1 f
- Z6 V4 h& a! N; v8 o; _& c
  void dcls(int x1,int x2,int y1,int y2)- m7 z  M+ W  o* x! j+ N
  {9 C# v. l; e7 Q1 r% K% p+ s2 Y
  int t,s,j,i;4 T) `" ]& _, Q$ I. W0 ?
  t=s=(y1+y2)/2;
: c$ f0 {% J6 }5 x  for(j=x2;j>x1;j--)
) T' A: b& t5 @% v  for(i=y1;i<y2;i++){
& k4 Y7 s; K' j/ l( {. K  goto_xy(j,i);& X& L1 @' h' R6 R% D
  putchar(' ');
9 d- n3 E6 f0 ?4 D  delay(10);
- K. U3 w! H4 i  }
3 F, `) L" ]% p$ ~5 b$ l/ |, k+ K  }
0 t8 B) f. C8 Z5 M/ M  /******************设置光标子函数******************/( b. I/ R) H& l' L- V

7 g& o6 _4 d3 u& T# @/ v* A: ~. _3 A- e1 h  void goto_xy(int x,int y)9 l2 e8 U' A" N. h5 }8 ]( T! c
  {: M2 y: }% R" K  b! ~
  union REGS r;0 r( M$ t6 h6 f2 d
  r.h.ah=2;: C. E; V; I; W* R  b8 N
  r.h.dl=y;0 B" ~/ L0 T4 f! K' p9 B& S* G
  r.h.dh=x;
9 C5 B4 l0 Z2 M, Y4 p  r.h.bh=0;
2 m9 v9 d/ j+ O# t4 j& j) v  int86(0x10,&r,&r);
5 }- _; y. m, |6 ?6 o  }
  L/ O" }& H" A
+ K3 K6 N; \+ P8 M) B7 G  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
: ~' l5 c! }+ [# Y! g" ]: U9 G+ s
  void puta(void)" R7 m# u6 H, s$ J# p/ I
  {8 C% s2 j* W2 _  H4 A2 T5 k
  int i,j;
, [" f  K! g8 t& ?7 M+ I4 ~3 j  for(i=0;i<24;i++){4 v) {; y+ C' G$ g6 ?! c: ]
  for(j=0;j<79;j++){
0 P( U# ?  U  R8 _6 s9 i  goto_xy(i,j);
, P% M0 S! j8 g6 [  printf("a");
  {& g# u, `% Q6 K* f  }
: h# J; y# G% u  }
1 d. n0 ]9 d' x2 a  }

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