返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,- s2 D8 O) i5 |- V9 Y# y( L( Q

$ D$ u' V, P$ i+ ~1 g  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里! |$ h% p' a2 {& j& B: o
/ f' C- R, X! ?& _  J* u1 I
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
6 }9 @* W9 z0 b4 s; v" ~0 N- s7 a4 v  子函数及演示程序:
" L9 p. C! I: `/ h; o0 H: p0 ]3 S% f8 V) D2 X' U$ k
  #include<stdio.h>
$ q: C2 l) i, f! [1 A8 m  #include<dos.h>0 x5 V  z3 X" F5 _
  #include<conio.h>
, X! C7 ~# i( }/ N5 o: K9 M% b6 ]! n/ z8 _" c* }
  void goto_xy(int x,int y);0 U' d3 i( ^8 ?" C
  void dcls(int x1,int x2,int y1,int y2);( f  C) |% o+ t; a( Z* C
  void bcls(int x1,int x2,int y1,int y2);
1 m1 h+ v  B3 g5 F" k  void kcls(int x1,int x2,int y1,int y2);7 o2 W( i3 {* p2 Y
  void recls(int x1,int x2,int y1,int y2);( }9 y' m, q! K: w
  void zcls(int x1,int x2,int y1,int y2);
/ f9 }9 @3 T6 U0 y  void puta(void);' F7 e7 E5 d7 I/ q. s6 y9 T. t: f
" B+ v3 |$ q( d6 D. ~- W
; r/ Q3 Q1 K' f& t5 ?, k2 \
  /*--------------演示程序---------------------*/' c9 E& i' V, Z3 K; a1 h7 j
  main()1 [; v: u1 z& P4 Q" r' L9 n) B5 y& l
  {
( A2 H1 N8 @2 b  puta();7 c$ \* G! E1 {' M7 p# p/ N/ O+ t
  getch();% K. W: F1 Q! n, a2 R
  dcls(0,4,0,79);
- r% K- C' \4 }+ B& E& z6 }; R  getch();
; q% m, `! H3 t. j1 E" }! j  puta();
* r/ W4 I8 ?1 D  getch();
; E  X( S. A1 a- K. A# r8 e  bcls(0,25,0,79);  z' C9 b; h( A* o( Y$ \  b- _/ [
  getch();
4 \' d# O( E, G0 @  puta();% F& z, W" X, w3 \+ A0 B# h5 C
  getch();/ d* b4 m) A3 q  J
  zcls(0,25,0,79);8 W) I6 x# q" m% H' n: u* L2 X
  getch();& p$ ?9 y6 r" |) W
  }
# L! }0 d8 X3 q; o  /*********center clear screen(中心清屏)***********/
4 d7 f* ]$ W2 c) V6 w; b7 r5 \  void zcls(int x1,int x2,int y1,int y2)* i- U  c1 t2 ?" G. Y- |
  {% x. s! c  v) G! N% u% I" v
  int x00,y00,x0,y0,i,d;( |. e9 y; C  O  i0 g7 `" h
  if((y2-y1)>(x2-x1)){
- X# i0 X- W+ ~+ J( M  d=(x2-x1)/2;
" k; m; e( F7 D4 ~+ a' K  x0=(x1+x2)/2;
, O$ O% f1 c3 i. M! Q; C  y0=y1+d;
; {, i% z! m4 J# M  y00=y2-d;0 V. D" R1 Z% T6 {
  for(i=0;i<(d+1);i++)
& ]$ y+ r, P6 L9 f; Y- E  recls((x0-i),(x00+i),(y0-i),(y00+i));
, j5 f+ Y7 b" t7 c0 _3 f) p  delay(10);
3 `3 J3 S& X' v9 d4 M% L1 d. H7 F  }
4 g- T! g1 l/ |7 w* R, P  else{
" v. v. Z1 W- O5 a9 f# B  d=(y2-y1)/2;/ {. v/ A) b. d7 K* N1 @
  y0=(y1+y2)/2;
/ S0 |# q  ]+ v1 i6 o( ~  x0=x1+d;' c, c# R3 N) u) }$ z4 N
  x00=x2-d;
$ W0 Q" D2 W. g: [* [  f. j& `7 g  for(i=0;i<d+1;i++)% V5 ^8 l6 ^9 S9 l4 R- L. `- M
  recls(x0-i,x00+i,y0-i,y00+i);
. y3 {  V& X% `- W+ ~2 Q  delay(10);9 N5 u6 ^0 o* p9 `4 g& d2 D& ]/ f
  }5 k8 n. d7 n# L9 M/ {
  }
' n/ a6 i4 \5 O5 t
; r; l4 h+ p6 R& w% @; E( U  /************* clear rectangle side(矩形边清屏)***********************/
7 M; a9 M) t% O$ _4 P1 b0 ~  ^# \% f  p& G7 o6 L3 w2 {  z0 x
  void recls(int x1,int x2,int y1,int y2)
* D8 H' b1 j: d  {0 b7 ?( t. N( g3 j( a0 V
  int i,j;
6 D: [3 Q& `, I3 m  for(i=y1;i<y2;i++){
& w1 k+ ]6 K# w: G  Z" d    goto_xy(x1,i);9 ]' z7 ?( d5 l, `- m
  putchar(' ');. s( B& c; ~- {9 `
  goto_xy(x2,i);
& t6 i8 D% v/ K+ J  putchar(' ');
% c; J& Z( O( W) [  delay(10);4 {: P& T7 c% ]1 r2 W8 b# e
  }
, I4 g/ A6 M8 ^% ?9 ^5 T- u  for(j=x1;j<x2;j++){
- H( }0 `1 T/ x' A/ z% l2 R( }  goto_xy(i,y1);
9 q4 f( J+ Y( H9 U- Y' T  putchar(' ');
/ ^! \7 w0 b; H" \2 i+ S  goto_xy(j,y2);
! H+ r2 v9 j0 m. \$ q  putchar(' ');
6 G6 I. P; N# H$ t6 x* F# D7 K  delay(10);
: W# D' e; v2 W* u* P9 y2 {+ Y  }* ~( ~3 A" o+ ]/ c$ f4 Y$ B2 I6 C
  }2 Z! Q  c  D; ^/ w
  /******************open screen clear(开屏式清屏)*********************/+ q2 r. t7 |# J0 }& A5 N9 z
- E* K9 _+ W  k) E) D+ v
  void kcls(int x1,int x2,int y1,int y2)
0 l% F3 H( _3 ^2 @  {
- E4 _/ M6 j$ r3 T1 H5 L  int t,s,i,j;
! M  P7 }; h4 o4 y' \6 ^  x  t=s=(y1+y2)/2;
6 e' M( U/ o+ v. v  for(;t<=y2;t++,s--)
3 I8 V5 c. H! e' f# b& }$ g3 z* j  for(j=x1;j<x2;j++){8 g! \% J) r" U7 K9 L7 {' F
  goto_xy(j,t);7 }% N5 V. u( w2 g' e
  putchar(' ');
7 }. F  E" h0 Y7 C  goto_xy(j,s);
9 l! V0 J% ~/ {- r* l: C  putchar(' ');7 u) h$ ?( r1 K* z/ k- S1 _
  delay(10);
# @4 ?/ z5 w( H) D+ W  }) k5 c. J' z7 J' I$ ?+ N# P' B  C
  }8 [1 \6 r+ T) ~1 e- D. j& s0 g! w
  /*****************close screen clear*****闭幕式清屏*******************/* }  H' e" R4 T4 K( E
( t5 I% [' R+ t0 e
  void bcls(int x1,int x2,int y1,int y2)% c3 S2 `, I* i0 N+ {7 _% L
  {) T6 Q6 N5 e5 o' _( t+ q; V% `8 |
  int t,s,j;( t* N2 q2 P  i9 t+ J/ N! c
  t=y1;+ I! H' I! X: D- V* J/ Z6 n2 j- |
  s=y2;8 S% A" W/ L9 l( y' Y7 q; t
  for(t=y1;t<(y1+y2)/2;t++,s--)
* Y4 C+ G5 x( q. ?: l$ x+ V1 K  for(j=x1;j<x2;j++){$ o/ b4 L0 J4 m; ^* T- g
  goto_xy(j,t);. e& ~0 s, `+ ]' P8 {2 V$ ?
  putchar(' ');0 P; u7 j/ K2 _: ]
  goto_xy(j,s);8 }" r; J0 z# S/ {8 ?' N3 O0 A
  putchar(' ');7 _6 x' ?0 S! ~- ?, S5 y$ P
  delay(10);
9 @# r( a; n5 i! \6 v2 v' ?4 @2 \  }
' w" t8 z$ Q$ n5 ?8 I3 ?  }
* z. r1 [2 K* m2 V; b5 o# Z( V  /******************bottom screen clear(自下清屏)********************/
! B1 g  A& T( O! h( ]( q- f$ e; ^# i* `1 k' m
  void dcls(int x1,int x2,int y1,int y2)8 {' l( @6 Q, |
  {
" q: v6 x$ ?- _" v  int t,s,j,i;
6 c' u" D9 l! k( _  N. W5 o  t=s=(y1+y2)/2;
8 o4 z5 H2 h$ F: e0 G  a* |) s1 @  for(j=x2;j>x1;j--)
' D$ a+ `- ^. _: Q  for(i=y1;i<y2;i++){. N1 w9 I$ l/ n; x# N* X
  goto_xy(j,i);6 Y- ~3 B$ q& X; [/ T1 _
  putchar(' ');
' c, k; j: y( N# J) p- ]$ I  delay(10);
1 k9 i  Y& [0 J. E+ V! O  }
) @" m4 \% [7 k. Q. A; T) k0 h  }  U1 w( e4 N! j8 p: T6 y
  /******************设置光标子函数******************/# S0 `6 Y) L5 I  B: A: i: u: t
* ]( u2 k+ L# x! ]. W
  void goto_xy(int x,int y)
+ ~/ `+ Y! B! t/ |; q! I* u9 O  {/ W; f2 b: P6 T
  union REGS r;# ~4 |) w/ ~: P* D$ q
  r.h.ah=2;1 J6 Q: Y3 [; o* A9 ~
  r.h.dl=y;
+ w* U5 g0 R8 D0 I" F6 I8 s& r0 L  r.h.dh=x;9 e; U/ V$ w2 C4 v
  r.h.bh=0;
' {# N# j( h) U6 g. L5 @  int86(0x10,&r,&r);
2 N  i9 P. H6 A( u; Z8 a9 k  }2 h0 ?. \% G! q' o
: a- A/ |" Q8 K* R8 k" @1 \1 F
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/5 T  n, M, T) P3 Z9 |  Q& }. o- Y

; V4 h! L$ ^" H  void puta(void)' v1 E9 k$ `3 r  C7 R  f6 ?4 [
  {: q4 V% ?5 A8 Q# d- K5 z5 y
  int i,j;# {% g$ x7 T9 J$ v
  for(i=0;i<24;i++){" C8 k4 ?- k" J9 ~
  for(j=0;j<79;j++){" K8 D4 P; o" m' u( {* g2 _- _- l
  goto_xy(i,j);
/ G* _5 i; e- O3 I( X7 {9 W  printf("a");
2 L3 M+ O- I2 e' _  }7 g6 ^9 s6 ^, _) K$ J
  }5 _& d  n+ z. j! K* n! C3 l5 ~& \# Z8 o
  }

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