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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
( P8 e9 u8 `% x4 _9 @3 m  h8 V$ X: m
- \. U+ v& ^  }2 J; E8 P) L+ P2 \  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
& p: V% F( Y' X8 }3 D+ a# a
0 O' H7 I% F4 R/ x* L' \  a  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
4 P+ j  ?) m; K' @  子函数及演示程序:0 C4 s' Y' y- G4 b
# x, Z2 v. C7 R5 A2 ?
  #include<stdio.h>
% |& B/ Q/ ^5 a7 m  #include<dos.h>$ t$ o. p: v2 K$ J. Z
  #include<conio.h>
$ x8 R$ h6 ]( z1 _  @# u: ^& L) `
8 ^8 R; N: i# o/ V5 V% X  void goto_xy(int x,int y);( [; k4 Q, Y: X. w1 e5 Q2 w/ v7 H' w
  void dcls(int x1,int x2,int y1,int y2);
4 ~1 P( E5 f) f/ E  void bcls(int x1,int x2,int y1,int y2);
8 ?( }0 X4 }/ G0 l) y$ {7 Z6 c) J; g  void kcls(int x1,int x2,int y1,int y2);
0 |* k! @7 P8 Y5 R- Q. [  void recls(int x1,int x2,int y1,int y2);6 |" K' h( ]; M& Y& _6 v$ ]
  void zcls(int x1,int x2,int y1,int y2);
" H5 [) F4 P1 h' V9 O  void puta(void);/ S8 q7 u7 d5 w5 i
9 T. h$ m0 a7 A+ r
- m) N1 P# P7 ]# r7 L7 O$ _
  /*--------------演示程序---------------------*/
& ?$ ~$ ~* f4 P4 e% O  main()8 T' T& ~7 R6 X9 z! h! H# k: R* X# x' z
  {4 F8 F2 L) U* E+ k9 \
  puta();* X8 L% f7 u" o0 P5 B  v$ ]' ?. I
  getch();
! G' T# c( ?/ P+ f& F  dcls(0,4,0,79);
, U8 E! D+ A4 d/ ~9 H  getch();
5 C9 I/ X6 c% L% [  puta();
: Y/ i, n) d0 g$ D  t; b  getch();
* h) ], l( F, ~* q3 f# r3 h  bcls(0,25,0,79);; x5 S3 `. V. ~3 p, X, q5 X
  getch();
) g; I: j8 a7 r% g8 r8 R  puta();
) q  ~& w3 L+ J8 C+ _  getch();
% c, H9 G6 z8 }- ]4 b# Q( b( s  zcls(0,25,0,79);8 d# Q% i/ ?- Y6 R4 |. i* I1 I% b
  getch();/ Q1 C0 l! k8 b4 a7 Q+ p3 a% c% [
  }. w. G$ ^, h8 y+ z& ]$ y
  /*********center clear screen(中心清屏)***********/3 q; _6 [* T& T
  void zcls(int x1,int x2,int y1,int y2)9 @5 Z( N7 M: Q4 S# r+ t' C
  {3 l0 e. K% G9 a! O! J' l$ a
  int x00,y00,x0,y0,i,d;4 p2 k7 E: z" \
  if((y2-y1)>(x2-x1)){
; n, [2 z9 ~3 w8 X  d=(x2-x1)/2;% L6 b; u: {2 d" u+ W
  x0=(x1+x2)/2;% K; m+ h9 f( c
  y0=y1+d;) {% {: P& v; E) g1 }" I7 F
  y00=y2-d;! \% d% l+ K' w* ^* j4 C+ F
  for(i=0;i<(d+1);i++)/ E7 g* ~7 Z. D, e
  recls((x0-i),(x00+i),(y0-i),(y00+i));6 N0 H$ z1 G3 W* R! o% G, I
  delay(10);+ ]7 K& v" [  |: g$ V- o; c5 f
  }& F$ g' V' ^; U! h, E* \
  else{
% G/ P' G, o" w6 c9 s9 I  d=(y2-y1)/2;  [$ i$ p+ E# ]" ^4 t
  y0=(y1+y2)/2;
" e4 E( `3 `, p4 g4 `1 X1 q2 w) S  x0=x1+d;
* B1 A8 P0 R, j: q# Z  x00=x2-d;: m, Q3 p( Z! O) y
  for(i=0;i<d+1;i++)
# h$ k& B; j3 t: X  recls(x0-i,x00+i,y0-i,y00+i);
& W5 B! Z( R4 Y5 a  b$ F/ R  delay(10);) O+ L* K" G! r/ ~, s3 g
  }
) n) A4 W4 Z9 x. u  }
0 R( \, N0 j4 B
) Y, F% a! O$ t$ W" Z7 a9 G  /************* clear rectangle side(矩形边清屏)***********************/* o+ b+ D( e! D' k0 c
; x# s8 d, d/ D; s5 C2 y
  void recls(int x1,int x2,int y1,int y2)5 d, c1 R6 V& l9 q2 w; C) D# J& ?
  {% ~. i( g3 l( \; w
  int i,j;( b# i) w2 A0 O* E2 l9 I5 d
  for(i=y1;i<y2;i++){
6 G) P3 ~% F8 a$ D% _# k' P. r! k    goto_xy(x1,i);6 A5 o0 \+ W$ G+ g& B- ]
  putchar(' ');
6 Q) \# T4 z+ i0 p. D. O; L7 `  goto_xy(x2,i);
4 z4 F+ ~5 d6 v  putchar(' ');
! s  g/ Z$ [, A7 E# U  delay(10);
7 V# V8 `; U& |5 R7 F7 j1 |- l  }
- P& k5 o9 `# S( {1 w9 L  for(j=x1;j<x2;j++){+ U- H' \. U9 M. H
  goto_xy(i,y1);
5 [" O0 J# |) H+ W  putchar(' ');$ f" f+ a9 C  X. `! C
  goto_xy(j,y2);! k+ A( d; Q* b2 `' v
  putchar(' ');
: ?& j  y+ d6 k4 o* m% z  delay(10);# g3 U. l* O! ~# B
  }# T  Z# G/ B2 ^+ L. [$ a3 I
  }
3 z0 h4 v$ t" q: O  /******************open screen clear(开屏式清屏)*********************/! {1 G2 N6 S% h1 N* K" Q
# r, c! Q: d4 c# H: e( w( o
  void kcls(int x1,int x2,int y1,int y2)) h; k9 H. g" C
  {
3 L8 \4 T. U- M# V6 o  int t,s,i,j;
1 {! y& Y/ r, @  t=s=(y1+y2)/2;* ^" s; J* O0 t* n5 d( j+ U/ \8 u
  for(;t<=y2;t++,s--)
8 P/ t: o1 _4 z/ ~: B& w) @  for(j=x1;j<x2;j++){: L- B3 e, Z' h: z# ^4 @
  goto_xy(j,t);
( z! c, Z8 q) H: E) |( ~  putchar(' ');" U0 j$ L1 c' O- D$ Y
  goto_xy(j,s);/ K6 L9 ]3 {7 t
  putchar(' ');
7 S( R0 R9 T3 V1 l! ^  delay(10);' k5 B9 m+ r# Z& E+ u2 ~
  }
# t; u1 b( m1 _  }
9 x, S9 K8 c; o0 D6 B1 X, {/ ^0 o, r" p  /*****************close screen clear*****闭幕式清屏*******************/& Z* N9 W2 q2 C$ D% v- ~
' n2 F) F% M- a/ o5 S( B& w
  void bcls(int x1,int x2,int y1,int y2)
* K/ A+ w2 ~: w9 b+ }3 h  {* C( F0 ]- X; E9 J- H. ]0 o9 s
  int t,s,j;! k: J3 ]5 S+ Z6 z
  t=y1;, I- F' p# I% p2 n6 P. q
  s=y2;" `# `7 `' p+ \/ V3 ?9 X
  for(t=y1;t<(y1+y2)/2;t++,s--)
: }7 P2 |& t2 J$ l1 w  for(j=x1;j<x2;j++){
( p6 P* C$ Q, D* Q9 R$ H6 q1 S  goto_xy(j,t);
% V6 f" |9 D6 q0 j  putchar(' ');
) _1 T& v# y3 C- _2 Y  U3 E2 R+ a  goto_xy(j,s);
1 g* V3 w, |7 o2 L( N5 C- E; N  putchar(' ');+ m, p& V: y' W" V! c- h! y
  delay(10);
( t  x6 o. |; p  }6 ~% K% {1 n( s" B' w4 v
  }& C# S# o% q0 Q) i% i$ z
  /******************bottom screen clear(自下清屏)********************/
! n$ P: X3 p2 ^" b9 _# V
. z9 v# k$ k2 E, v7 r$ _  void dcls(int x1,int x2,int y1,int y2)
5 a5 U" C& s+ l  D2 t* M. Z' @  {" |9 d  }, t2 d* x
  int t,s,j,i;
( `2 i- H6 i& \% ~6 o" `' J! |3 W$ L  t=s=(y1+y2)/2;+ ~3 \! g6 V1 n/ [) z
  for(j=x2;j>x1;j--)
( U8 ~* o( G. X; w4 o  for(i=y1;i<y2;i++){
3 ^3 J  B. H, E  goto_xy(j,i);
3 |6 \) |8 [, G1 U/ m: e# e  putchar(' ');& `. ~3 b8 F0 Y
  delay(10);( B( n" W! f- I6 Y$ F
  }' e( s8 y  O7 ?8 V# T; w$ W
  }
- h8 x  W5 u: h3 V- o. r  /******************设置光标子函数******************/( ^7 a1 s9 ~1 _! i
6 p  t! `) N3 j0 o2 ^/ k* r" C3 e- T
  void goto_xy(int x,int y)
8 \. R1 i% u% i- p5 b  {0 H9 J9 ]' Q, Q+ O7 q
  union REGS r;$ m$ c2 L! b( F. d& v
  r.h.ah=2;
2 k3 H5 q3 Z/ f2 w  x( Y  r.h.dl=y;
/ i( |' [  C2 \  r.h.dh=x;6 S8 v. ?# w# C9 @# v) p, y9 h5 n( ]+ X
  r.h.bh=0;& ^7 M+ D0 E+ C9 X
  int86(0x10,&r,&r);3 ^! O0 q( X5 e) ^) L+ `
  }
5 `! \8 m8 ^4 ]4 ], |" z
. W. @' t4 z: _- P6 m  F( C  /**********************在屏幕上打出一连串的a字母用于演示程序******************/2 H$ }8 ~2 p+ v- X9 K- k1 R$ q
9 L2 P' b- m! c4 v
  void puta(void)
3 P6 R9 U- T4 O# A8 f  ~3 M  {
, U% A3 e4 F5 O  s  int i,j;8 q, @& g' A% ?( S/ d
  for(i=0;i<24;i++){- J3 M7 K1 t3 x  J2 z& s/ O
  for(j=0;j<79;j++){4 C4 N2 j  _; ?- `8 S
  goto_xy(i,j);4 y% F5 `5 l, `! ~* ?' ^
  printf("a");
( {3 }2 A8 M9 S$ A" O  r# M  }
; f2 s7 m; Q4 `$ \( \" d  }* U1 x2 |# J9 b* T
  }

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