返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
* V. \1 V1 R, l6 C' m& S/ A. r# ]- m' R
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里* m: ?" a9 v' l" z

1 v6 J0 `  \1 e" X3 x  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
6 K6 c: y, W- {7 F: E  _  子函数及演示程序:
$ @5 b" t" h6 Z
- G6 q' _2 y0 W  #include<stdio.h>3 s. j) J# \& I, J. C7 P3 Z  b
  #include<dos.h>0 k8 D% ^, o( U; {! e  t& H* z
  #include<conio.h>
5 O2 c! @& A0 I/ A. d4 \
) j3 j9 s$ l- k: u7 `3 v  void goto_xy(int x,int y);; C- c: s# d+ f0 I4 E
  void dcls(int x1,int x2,int y1,int y2);" `- h' b- T6 s2 l: L$ r
  void bcls(int x1,int x2,int y1,int y2);
, a7 s: n$ q; a1 G3 J: n  void kcls(int x1,int x2,int y1,int y2);* _  _8 d; ~4 K
  void recls(int x1,int x2,int y1,int y2);
0 D  I( N0 |# M: M+ K/ }, w# G) s" N& y# M  void zcls(int x1,int x2,int y1,int y2);
& h7 T! {& j3 G% ?4 a/ q" c1 t  void puta(void);" \9 K1 G. M) O% f8 ]+ q

# P! P" v; C( `/ m! K+ D6 c- V. M+ j/ v. _
  /*--------------演示程序---------------------*/. E' O7 f' L& Y* i, |. W
  main()' q9 k1 V, _# x9 ?0 q( j; j
  {
& F! l4 H* k3 Q* i& p  m+ f  puta();% a5 \. E4 J4 D  q. V: @  a5 |
  getch();
) R1 W* t- u$ B1 F# |; S. e+ H  dcls(0,4,0,79);! S3 V' u4 y- Q
  getch();
1 z' u" _& L& f7 ?: ^9 L  puta();. O- j* U4 ?8 B
  getch();
0 |! W5 o& f$ d: Q# n  bcls(0,25,0,79);2 U3 k  y: D( I( m6 X. {0 s9 M; e! ?
  getch();
) o( A9 o7 C2 ~9 c" Y! t% O1 S  puta();1 L, L* a' H$ S7 C8 M
  getch();  f0 ~* [% t. W
  zcls(0,25,0,79);
) @% e. ~8 M( Y+ B7 S3 ^  getch();
3 m$ t4 j. f+ O( S1 l  }
1 `! @# Z6 J8 Z  /*********center clear screen(中心清屏)***********/
7 |, @! K- V( K/ S  ?) j  void zcls(int x1,int x2,int y1,int y2)
: {1 Q; f: F- P2 {& x# l+ E# Z0 q  {7 l3 @* z5 q& }, g, C$ n1 W9 m
  int x00,y00,x0,y0,i,d;
" |8 t' Q- J5 l; ]  if((y2-y1)>(x2-x1)){
! ]7 J. {0 A, z6 `( G  d=(x2-x1)/2;6 j: s$ l+ s( ^2 m2 w5 z5 f
  x0=(x1+x2)/2;- C, w* l: d0 [
  y0=y1+d;
- i! {( ]. m4 X- r8 L  {2 [  y00=y2-d;8 j% D/ Q( g$ g+ L# |- r2 v
  for(i=0;i<(d+1);i++)0 P. Z0 Y( S* j+ q' g0 K4 n3 u
  recls((x0-i),(x00+i),(y0-i),(y00+i));7 D+ s! w/ [3 b7 M7 h' e
  delay(10);( Y, ?. D% V4 y. J  a; ^
  }
0 q* `6 R0 \5 E/ F* o2 a2 K  else{: `7 X- B; b% ~8 v2 w: E' `( o
  d=(y2-y1)/2;1 n3 H( J1 N, l1 ~
  y0=(y1+y2)/2;/ C* k. L4 G% a
  x0=x1+d;
# P& f5 x% ?! R. t0 K5 l) @  x00=x2-d;
, y2 Q& B- n0 H4 Z$ g$ \* w6 ]9 ?/ S  for(i=0;i<d+1;i++)9 X9 M7 N, ~9 f& \$ e
  recls(x0-i,x00+i,y0-i,y00+i);
; k! N" S: q* R  l' @( K  delay(10);- [3 \& x- B6 f& M2 B: ?
  }
1 Y3 ^7 V! k3 q" d7 S1 B  }
  k: c+ \- N, h4 C2 s6 V7 H$ Y2 \. G* j# F  [
  /************* clear rectangle side(矩形边清屏)***********************/; Q7 e. n8 [& Z0 V

3 k, C: Z7 x$ [  void recls(int x1,int x2,int y1,int y2)
% V, O; `7 c* y5 e' x  m  {
. T9 W, x  X: r: N' _/ E  int i,j;
. H+ s, D) @6 F; `6 c# C  for(i=y1;i<y2;i++){
$ G3 h; N- _; X( l8 r    goto_xy(x1,i);
( P# s$ K& V0 L5 f$ b6 z2 i, O  putchar(' ');% z/ t, c) I0 J7 E
  goto_xy(x2,i);. N$ f' F& a  e. P2 w- U& \/ j! I' a
  putchar(' ');% C- f* r" G' I  b- d$ P8 @
  delay(10);
( K/ g+ T4 r' ?. i* q  }
+ _3 U( A( O3 G$ Y' Y" e  for(j=x1;j<x2;j++){
% a* v' R3 u: j. J: ^( r  N  goto_xy(i,y1);
- m) w( O* x+ H7 }  putchar(' ');
3 D$ s4 R! u: l  goto_xy(j,y2);
1 w* e9 V3 x( L; X2 s  putchar(' ');
+ I" k: T* c7 O( x5 p  delay(10);! {9 Y1 i' z6 K5 f1 v7 S
  }
) u8 \' G7 u  |$ B: j: l  }- x/ t& F) d3 N
  /******************open screen clear(开屏式清屏)*********************/
% E3 S/ ^& H$ n
/ N4 o6 \, W; Q! {  void kcls(int x1,int x2,int y1,int y2)# @, W9 D3 L1 P& o/ z+ s, M
  {* d) z. b1 v6 ~/ @5 U
  int t,s,i,j;( e& @, r* X8 F7 S5 D
  t=s=(y1+y2)/2;
* t/ T- L  ?. c% S* a  for(;t<=y2;t++,s--)
% ~" o" |+ o! P! D1 W9 I. l- ]  for(j=x1;j<x2;j++){
0 Y1 a5 b* ]. d  goto_xy(j,t);. h% b) T4 [6 h* q6 ]
  putchar(' ');) v7 M1 F1 n5 D' }$ f9 j
  goto_xy(j,s);
7 h3 t# C+ h! g; \2 H1 C  putchar(' ');
3 x; \% ?) z  \( {  delay(10);
5 ~  q1 J& J6 t1 M/ C3 z, ]  }
  g+ K" G# [- m% C7 K: x  }
/ d1 G- V4 k7 L4 ~  j( o! O  /*****************close screen clear*****闭幕式清屏*******************/9 S3 x1 A+ e( A8 U; S( R) c! S! D

* k; `# r7 u9 {6 e' U4 @  void bcls(int x1,int x2,int y1,int y2)
' s% `$ ~0 |6 d4 {0 |7 X  {
% n, c! |' g! c0 T3 \, D  int t,s,j;2 W3 M, F% }6 |3 P0 [5 }
  t=y1;! I; R# e4 r9 R& x: ?
  s=y2;- k4 r5 O# w0 U
  for(t=y1;t<(y1+y2)/2;t++,s--)
/ m/ q# g$ u0 a  for(j=x1;j<x2;j++){
" U* k7 u5 ~+ }% V5 v3 f: ~  goto_xy(j,t);
, w- |5 t5 N( c) u, e! R  putchar(' ');0 u+ u1 h. U  ]; T! M1 O3 Q
  goto_xy(j,s);! }; c% S* [7 M1 a$ f! F. p
  putchar(' ');% E; w8 s, G* O. z5 g. K
  delay(10);0 f: j9 \% [" x3 _6 p# T
  }! i& ]! k4 W5 Y! b
  }
) {% ]" ?" H6 K8 u* h: F  /******************bottom screen clear(自下清屏)********************/
7 D! [( \" f! z* X. _; {1 u3 H2 Y' i
  void dcls(int x1,int x2,int y1,int y2)0 K) F3 U) i8 A  Y+ W" `/ D3 x
  {# E, R" ~2 ~8 x$ h: p: K5 T
  int t,s,j,i;$ x2 V% D$ X- {5 @
  t=s=(y1+y2)/2;. q7 O8 @5 p4 a3 ]+ O
  for(j=x2;j>x1;j--)) K* R( s0 L3 f- J: ]! o
  for(i=y1;i<y2;i++){
" f- o+ w4 c! }) m& A& U- I  goto_xy(j,i);
9 u1 w( F4 e8 w* s# Z7 S% F. H. h  putchar(' ');( r& @$ _% F( t( l6 n) J
  delay(10);
: w8 `% g6 l2 ]' v( N) e  }
1 A$ x; o0 R  a" g* A  }) _- M2 H- w7 Y- Z/ V+ O1 R+ F  ~( r
  /******************设置光标子函数******************/
5 ?3 b2 h  T. F: I# B8 \- {" e% V' h" A9 ?4 v/ d
  void goto_xy(int x,int y); }/ ^2 y0 n. f/ K* w6 i
  {' X! Z9 v' q) |: j, r
  union REGS r;3 Y. m  [3 }2 L1 j
  r.h.ah=2;
9 K  U; a4 l. k' M  r.h.dl=y;
/ t- F$ o8 H0 V, Y* D# W  r.h.dh=x;
6 Z0 O0 u. B* T8 M: r$ K' e  r.h.bh=0;
& J7 I% x, C4 }1 L0 U  int86(0x10,&r,&r);
1 g$ F# y1 o- m6 }& N- N2 ]  }
  W2 E! m/ i( \- ~) w/ K/ R3 Z9 W3 R8 H1 ~7 k0 Q0 M, \+ ?
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
* e7 |7 \& G: P0 t8 o4 c3 r2 {$ ^; J9 C8 E8 I+ `& {, V
  void puta(void)
6 v, U9 j3 h$ J$ j  {
. d2 E7 E" d, ^# ^  O/ w' l7 B0 g  int i,j;! ^, Z" g& r  D( f8 h" p1 U6 U, F) G
  for(i=0;i<24;i++){  J$ T8 c7 S8 _; M. S: ?
  for(j=0;j<79;j++){. F0 ^3 P6 E' Q
  goto_xy(i,j);: H- _3 x- v+ F" S. W# ]
  printf("a");
% W& |- o" a0 N% l& R& f9 r  }2 [- a3 p. K% l7 ^6 f
  }
; V5 V( z# ]0 Y, T7 q  }

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