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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,) d, ?! F* u" d  c7 g
( i# v6 m: f0 p: g4 _7 F0 C* a
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
* M$ J  X; D8 @5 Q' S4 l# w8 Z; e$ w7 j" s( i! |# c7 z3 }
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. & b* u, A$ j- d% r( A
  子函数及演示程序:/ I# b4 y# ?5 M( [9 d) d
$ G9 C! f$ O  q6 y/ |
  #include<stdio.h>8 q* _5 R0 P! a
  #include<dos.h>2 J9 R7 ~. o) s0 ^
  #include<conio.h>9 l5 g- w9 k5 |8 I( K5 N3 P
" ~8 v  M  ?8 s  ?9 \) P
  void goto_xy(int x,int y);* K# Y# j" r" F$ B1 V8 `) w
  void dcls(int x1,int x2,int y1,int y2);# Z, e8 S& }4 |7 C- m- U! O
  void bcls(int x1,int x2,int y1,int y2);
$ k9 i( T) ^+ G" X  void kcls(int x1,int x2,int y1,int y2);0 ]6 y% j3 ^  Q9 S
  void recls(int x1,int x2,int y1,int y2);
, @$ d; A6 U3 y  d  void zcls(int x1,int x2,int y1,int y2);
9 M9 j/ V6 ?1 @5 E2 i! q  void puta(void);4 d, B  D. U/ v! H

0 [$ R) f0 K0 `( v% y& u+ o& b: ]7 j' a4 q$ f3 q' I
  /*--------------演示程序---------------------*/1 V. S: ^/ `# H
  main()
3 s# z) s# ]0 ~  {
* E' v  J' I4 n6 W3 [9 V% W  puta();
4 g7 D4 T) ~% o2 n9 i  k8 E  r1 \9 B( }  getch();% E: K# J( y! R1 a7 [+ y  K
  dcls(0,4,0,79);1 Z2 c, F1 E+ \
  getch();
% y2 p7 P' t- ]1 F- t& B3 s( V0 A  puta();
; X6 j. X! c7 V7 S+ |: Q. `( R/ O7 k  getch();
2 T6 N0 \0 d% v  bcls(0,25,0,79);0 \: p/ N( }! Z0 a$ c8 D( B& `
  getch();
3 F# S' b  m4 x! j, |/ D  puta();
+ v# ^3 V7 U0 ~; m0 ^& o% J  getch();3 |/ A  @0 i6 o' f+ |- y) x
  zcls(0,25,0,79);
4 ~) w* ^  c1 E) X  getch();/ R9 x* _& O! ?) r, y# L
  }
1 t7 S& ]8 {( K8 P  /*********center clear screen(中心清屏)***********/* J; c3 {4 K5 f  K
  void zcls(int x1,int x2,int y1,int y2)
3 |2 ], @/ q8 r& h6 T  {
% o) S* K$ Z$ I4 r: v+ r  int x00,y00,x0,y0,i,d;5 s) @+ j% I* M: M: P
  if((y2-y1)>(x2-x1)){% y8 \# ^' G, e, l
  d=(x2-x1)/2;
- a8 Z! D  W4 s, E  x0=(x1+x2)/2;
2 E( j: m" g4 d- R$ h4 v  y0=y1+d;. t# o9 v0 ?1 f6 }* P6 e
  y00=y2-d;
: y5 P3 r4 `! ], r+ ]2 ^# D  for(i=0;i<(d+1);i++)2 {& r6 ?8 G' J$ c; e
  recls((x0-i),(x00+i),(y0-i),(y00+i));! E' T* N+ M+ {) H
  delay(10);3 j1 Y+ y4 B% V
  }
& I% g6 b6 T) _5 y! Q( ^( d  else{( @$ M1 l; X0 \- S# y( I
  d=(y2-y1)/2;4 D- ^9 _; S' m1 B9 r  M9 x& v
  y0=(y1+y2)/2;
( R2 E0 k9 X4 u% @' ]% p5 O  x0=x1+d;) @4 \$ N' |) a' _  m; l9 |7 U
  x00=x2-d;
; `* |% z; M7 s3 m: {  for(i=0;i<d+1;i++)4 ?, S5 c2 y4 c2 Z  K
  recls(x0-i,x00+i,y0-i,y00+i);0 b0 p6 c1 M3 x8 k
  delay(10);6 Y1 p, J% t1 W* `
  }' a$ U' S$ v% s3 j5 W
  }
5 x8 X$ O2 u5 f9 w( j, ?" ^$ j
  b! n3 h% e! L+ V, i% Q  /************* clear rectangle side(矩形边清屏)***********************/
2 n* ]3 G2 l' i' Q
' a" L% ]4 q% p) m. a) Z, x# T2 L  void recls(int x1,int x2,int y1,int y2), F. s9 T# w- B& ~5 |' R1 a
  {
5 F# j; [( {6 h5 `  int i,j;8 n% l% M$ C0 B$ G
  for(i=y1;i<y2;i++){
# z( v% L1 ~" f    goto_xy(x1,i);/ M. P3 |8 P: m# z0 o5 E
  putchar(' ');1 @7 W2 u* [! Q0 \4 K5 Z/ l' K' l
  goto_xy(x2,i);
6 J' v0 a4 w6 \  putchar(' ');0 i6 |% T: ^9 s4 O/ |; j. k
  delay(10);
- v. V9 Y  |. p3 ~  }& `& C3 _- E9 _# j. _' W  g# ~  r
  for(j=x1;j<x2;j++){7 U7 I+ N  _' B0 f. u! D3 F) V6 P
  goto_xy(i,y1);
: ?9 W. H8 q1 |4 B  putchar(' ');2 r+ \9 b! f' K$ b2 E& \
  goto_xy(j,y2);4 @3 K. C8 o4 b3 M3 f
  putchar(' ');
, a/ a- J" @* w  delay(10);2 M4 ^* K$ D/ p% Z; R
  }3 H: H8 s2 x  E
  }
) {9 d5 u4 r% A" ]  f. z  /******************open screen clear(开屏式清屏)*********************/
/ |) K5 |! S7 @3 y, W+ @/ t4 D( A. h  _8 k) u$ q+ f/ z$ h3 C8 ?
  void kcls(int x1,int x2,int y1,int y2)
! B$ g$ X  T% y' A3 s% x0 @/ f% u  {' @+ g) Y& j) y; e3 z( ?
  int t,s,i,j;' Y. G# f+ M1 p3 k
  t=s=(y1+y2)/2;6 x2 ^9 a7 R$ e) t7 c' R& H& `
  for(;t<=y2;t++,s--); C) [- T2 e7 l: p- Z8 O. U* @
  for(j=x1;j<x2;j++){! i7 `5 E4 K  P, U4 n
  goto_xy(j,t);
+ b) I' ^# _& [- X6 {- G  putchar(' ');
( ?2 y* }6 a% N4 y. P6 e+ x3 k  goto_xy(j,s);8 i  P8 N: J: X( o6 o6 y
  putchar(' ');
  i* M/ k* N* a; [  delay(10);
) M7 Y% I6 l$ ^1 N* H  }6 B. L8 {8 u. Y& _( W0 N, X' X; A+ {# g5 I
  }3 m; R6 ?/ c* F4 S8 r1 l8 e( V
  /*****************close screen clear*****闭幕式清屏*******************// i8 o4 ~6 P  t, g
2 p* y3 F0 `) r- O7 }9 L* w
  void bcls(int x1,int x2,int y1,int y2)
9 A# N. K$ z0 M$ V  {5 U8 e* O% o& o( K
  int t,s,j;0 X  m0 V4 f' M7 @  B) K
  t=y1;
3 |1 f9 N- Z- J6 S/ \( E: t, s  s=y2;
2 \3 v4 T7 q. p8 e  for(t=y1;t<(y1+y2)/2;t++,s--)8 ?# D9 c, Q) U4 d9 s
  for(j=x1;j<x2;j++){# s) J5 e* V8 n9 h6 Z
  goto_xy(j,t);9 g- `( b; k9 m
  putchar(' ');
( R6 N& n, I. D) [( y7 f/ A: F  goto_xy(j,s);
( |. z' I; t% Q% r1 c) _  putchar(' ');# i0 ?* u# b/ t( p: S" I
  delay(10);
; E+ ^1 ?& [: D$ B+ q  }
9 j. e) x: P# K  }3 V3 i( H6 o; ^$ n8 w
  /******************bottom screen clear(自下清屏)********************/# D; I  }8 a, T1 f) b& s+ h

  o$ W# Y# O& Q1 I" M# d% ^  void dcls(int x1,int x2,int y1,int y2)
. Z! T+ ]. I: E5 e  {
+ W8 `* y% ?6 _9 x0 j$ z  int t,s,j,i;
- e* W. e( V0 \" V& |5 K3 b  t=s=(y1+y2)/2;6 H6 v( W  g3 @' i* R9 d, B: _7 X" [8 f
  for(j=x2;j>x1;j--)4 t3 v- O* n2 S# A5 F
  for(i=y1;i<y2;i++){
; f, t: b0 S8 f  goto_xy(j,i);
" g" _4 w; M$ i' i" R  putchar(' ');
6 p& ]6 n6 R! A6 R* g1 h6 {8 v  delay(10);1 u( r+ l! m  B" _% G- i; q! b8 k/ P
  }
6 x$ v/ b' h7 X9 [( H' c0 k  }
9 j3 @+ o6 e+ e5 Z3 C  /******************设置光标子函数******************/* v0 q2 I! B+ [5 j, I
& ]* g& x' p2 l# n9 V7 @
  void goto_xy(int x,int y)) s# X1 W- z! y; @% F2 E" H
  {0 \( f7 A9 ~- l* y! u
  union REGS r;6 L: C8 Y- k- a6 G2 \3 V, d
  r.h.ah=2;/ q8 k, o- T  S! G( ^0 U' \
  r.h.dl=y;, m+ n- d$ u/ L1 j4 R% A
  r.h.dh=x;2 ?: [8 p5 V$ `6 }- f( D
  r.h.bh=0;
' Z/ t% Q) U6 ]  int86(0x10,&r,&r);* a" i- y8 R. v3 |& e: X( z/ o$ {
  }
. ]$ Y2 R3 n& V+ \( B4 k
  R# `* |& a. D9 N  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
  t8 g( \" }% c$ q8 i
( |9 ?: u( \* R4 @  void puta(void)" @5 g2 P$ j4 t
  {
+ H1 S4 k5 {$ [) F1 P% A  int i,j;0 B7 R2 N$ k4 D' J9 ?7 f) G- m
  for(i=0;i<24;i++){' ^0 f+ `3 R# Y2 s% t) l5 s( s
  for(j=0;j<79;j++){$ J( _" g6 f4 }4 g- C6 ~% P8 A
  goto_xy(i,j);8 U$ N" O5 o, g% n1 ]) @  R
  printf("a");
" Y, p& Q. ^9 A% f  }  e. A5 |7 f2 p& Q' F! p
  }
* g: x8 w7 ]! E& G' T" Z2 A; T  }

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