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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
' E/ S# k, X  _# S. _& p2 g+ O7 B2 H, P3 r! f( U" h6 u/ I
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
4 g" i2 x8 U9 q( ]
) ^: z5 j& r9 A+ b; Z* k  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
0 u  g9 w, F! O" D4 W7 o' R: J: k9 X  子函数及演示程序:
5 Q# x) t; {6 h/ S7 w* h9 @! Z; W! t
# S  P1 M6 j( c/ H  #include<stdio.h>8 l: s& ^9 j/ G  e5 W) j
  #include<dos.h>
, P0 I* e- Y( a' ^" c  #include<conio.h>
: s) a/ c, O; _# |' f) [5 ~6 S% h7 K3 d; ~( b1 u
  void goto_xy(int x,int y);6 A# l" v9 A) ?2 E4 Y; ]
  void dcls(int x1,int x2,int y1,int y2);
( p+ M" N7 r/ T- ~2 c+ v  void bcls(int x1,int x2,int y1,int y2);
0 p) h* V6 C' f; }0 `; E% ^  void kcls(int x1,int x2,int y1,int y2);
) e. o4 z( P( E0 v' s$ `  void recls(int x1,int x2,int y1,int y2);; ~3 R- h8 E0 y
  void zcls(int x1,int x2,int y1,int y2);
! k, f8 X, d) ~" k" t& l& s  void puta(void);
! Y+ e) p/ u+ u  p) }5 b* l- Z
- S2 X* c* n# o( s
; W0 {8 }7 a4 T+ a  /*--------------演示程序---------------------*/
- u* V0 D2 s) P  main()- @! |) @8 V) h0 H& ~5 i! z
  {
2 R/ F& h5 }6 ]5 F/ p8 n  puta();
4 l! Y9 @+ G3 t. k! m& Y' U8 P  getch();  v9 H6 q; E& s8 U3 j/ O3 A6 \
  dcls(0,4,0,79);3 D  Q/ d8 i- c" Q1 A: {/ Q( U4 I) u8 S
  getch();
, r1 C( v7 z( ]. j. v0 `  puta();
6 a& ?+ b) T. ^3 k; D2 d  getch();
2 u2 v6 r: k5 m- p4 L  bcls(0,25,0,79);
6 S3 p: i6 F, K4 G8 p) Y  getch();
* f9 K; a5 s6 v' g" t3 }3 D  puta();
1 ^+ I  d  E+ H2 |, K7 j) i  getch();
1 v; s- T5 T7 Q; s6 `4 J* [  zcls(0,25,0,79);
' `* t5 Z3 E: `7 m: z  getch();' Z; i) n' Q, u6 E4 Q9 h
  }
+ H" ^# |: E( q3 _! }  /*********center clear screen(中心清屏)***********/- g2 B+ G& f& `3 x5 o0 C
  void zcls(int x1,int x2,int y1,int y2)$ o; b  e- ?* R
  {  |" ^2 S- w6 u# s. v& ?( p
  int x00,y00,x0,y0,i,d;
2 ^) J5 k  E( w3 l) K( B- p  if((y2-y1)>(x2-x1)){) l  Z+ O7 j9 Z7 h5 I8 A: p
  d=(x2-x1)/2;  S  f# i$ z- L' F& Q9 i  z9 ]) l
  x0=(x1+x2)/2;6 A+ v. G6 [: |2 C
  y0=y1+d;7 v6 K" Z" b# N* E8 l, a4 M
  y00=y2-d;4 ?: T' Y7 C; Z5 l$ N
  for(i=0;i<(d+1);i++). y7 P3 I* Q  P
  recls((x0-i),(x00+i),(y0-i),(y00+i));
7 _% O+ S$ R( y, E; Q  delay(10);7 c+ C" H1 k! U5 I, @" f
  }
% l+ U' V' _. a" C( n  else{
  E( S3 i0 v0 ?* N) Z  @  d=(y2-y1)/2;0 t3 y3 U7 l. f6 c
  y0=(y1+y2)/2;, m# S* ^2 M8 R7 n4 c. D
  x0=x1+d;$ _& p: W; D; p; |% i4 ^5 i
  x00=x2-d;. R) L7 C, w4 v) j( [: H2 E; y* i
  for(i=0;i<d+1;i++). s4 K9 g# T: ?$ m2 ~5 B
  recls(x0-i,x00+i,y0-i,y00+i);
9 I% j; s$ ?" W2 w; s; }  delay(10);
4 ?$ M3 N# J, f; A7 x) G7 B8 h# b  }" O" c1 w" E4 O: X3 @
  }
! j5 S# g6 j( b$ \* z% ?$ Z) j  @  l. k' w4 F: s9 |
  /************* clear rectangle side(矩形边清屏)***********************/9 G3 w$ H: s% H$ O0 g
0 ?$ c( y) C! ?/ f( X) k. D3 c/ z( M
  void recls(int x1,int x2,int y1,int y2)
0 l$ Y0 c, j, E+ V2 |. p  {
% e  H: V& k2 w5 D3 j" F. s, `  int i,j;+ l, K5 @! h2 r/ }+ [
  for(i=y1;i<y2;i++){
8 u/ K  r) A8 W3 u2 O    goto_xy(x1,i);0 _& h% j6 `  _. N2 K) D* Q8 A
  putchar(' ');
$ X* T9 B: A! V* w5 p3 q$ y" w  goto_xy(x2,i);% }% v. b: ?' C5 R3 t# A
  putchar(' ');
6 S3 J5 x- a; |( `) P: w5 B  delay(10);& F4 o$ y) X1 \" D
  }& R8 R8 p3 _1 J
  for(j=x1;j<x2;j++){+ Z6 V! W$ e7 ]/ ?$ f
  goto_xy(i,y1);0 A' }5 F9 `5 ?0 f: k$ O  O
  putchar(' ');! b! Y  p; c  y7 F- v$ b
  goto_xy(j,y2);0 ~- ~, `! o, _
  putchar(' ');
' q& F. y/ k+ k( h4 M  delay(10);; D& w7 g( X9 M1 u5 [: n
  }+ ?6 I% P$ a! F$ b
  }
" K' Z3 @  F. G  /******************open screen clear(开屏式清屏)*********************/
7 v& E: Z9 ]' v
( |6 c0 ^" l$ y* u, ]  void kcls(int x1,int x2,int y1,int y2)
, H7 G5 [& c2 h7 J. H  A- T  {
6 P9 i% }. g+ A# U- P) R  int t,s,i,j;
- S7 c  ?+ Z/ z' h* h9 k" G  t=s=(y1+y2)/2;. @3 Y$ u  x" m4 p
  for(;t<=y2;t++,s--)9 Q, Q2 F# S3 T# _
  for(j=x1;j<x2;j++){
6 c/ i1 L  Y# F, @: h9 V! P  goto_xy(j,t);6 k- d5 h5 x& |8 Y6 Y* ^2 v
  putchar(' ');1 L* ?/ Y  J5 J( ^4 [8 a! b
  goto_xy(j,s);
  V1 K5 @( Y/ F4 K/ v+ r3 Y  putchar(' ');% G  s6 f5 U  p1 ]7 {# f* r
  delay(10);
4 R; r9 P* x+ W4 ~6 u6 |  }
/ I" O+ v1 w( N$ v! p0 O. u  }
/ p9 K& u; ]1 |$ [  /*****************close screen clear*****闭幕式清屏*******************/
9 n( a: x! o4 o  t. {8 I6 m! }' H$ n/ l0 E5 t; ~: E/ s; P  R0 |$ z& m
  void bcls(int x1,int x2,int y1,int y2)
5 R: j( b# I3 S4 E% v6 `( Q  {8 i6 |) N& K5 K2 t# [6 `2 U( O* Y
  int t,s,j;
% z% o( }$ z7 D2 B+ \. ?1 _  t=y1;& h/ f. R9 @1 M7 }
  s=y2;6 @4 f! ^; T, n' I" e) n9 S
  for(t=y1;t<(y1+y2)/2;t++,s--)! J6 l- X4 C! l( W9 _# ]1 V
  for(j=x1;j<x2;j++){  a* i/ {3 X1 k& D8 W
  goto_xy(j,t);, @6 P( u+ t$ X/ F. T8 ~/ }: V: [: [
  putchar(' ');( f" i2 I  D6 j8 M: l: M
  goto_xy(j,s);
8 O) B  c0 R& d  putchar(' ');
( b& ~3 _- N4 z  delay(10);
. @6 t) f3 H' A% _4 b  }
5 j$ I$ i2 _) D$ U# E' L2 H  }4 b1 C' z9 L: Q, Z% t( L
  /******************bottom screen clear(自下清屏)********************/& `$ m" w+ ]4 Z
0 M4 _$ S7 v0 x9 C- t' ~7 k( b$ g6 N
  void dcls(int x1,int x2,int y1,int y2)
& b0 k4 q& `. C  {
5 M. n4 P0 F/ u3 h' ^4 b+ G  int t,s,j,i;0 a; a7 k' C* n2 O. e
  t=s=(y1+y2)/2;
/ I7 U1 q' L! k8 i& U9 N- ]$ `  z5 \  for(j=x2;j>x1;j--)" Z8 [* P4 b" d2 ~$ B; V
  for(i=y1;i<y2;i++){6 l: J$ M5 p# r/ @+ [
  goto_xy(j,i);
" s4 \3 h' T9 I' E  putchar(' ');
6 k& h  q; z9 u9 t) a  delay(10);
5 @4 q7 Z3 K0 v+ [; `, \( n6 T  }
2 W+ D0 t# p, D& |/ a, {  }
6 ]7 h( c4 E: l3 y8 ~, d  /******************设置光标子函数******************/- K0 n. K; M  Z) @9 A

! ^9 E0 b# k. G5 X  void goto_xy(int x,int y)
- H. H% Y8 P9 ~  {; T8 C8 l+ z! x: E, j
  union REGS r;0 E4 B- ]# z% |0 W& b$ I  ?
  r.h.ah=2;6 b1 o+ ~* O3 K
  r.h.dl=y;, s; V3 h8 S! e! K6 H& p; |& U; L
  r.h.dh=x;0 B/ s- f0 I) R5 y  m1 s! u- ?) B
  r.h.bh=0;: b! ^" W* R/ V0 A$ @* n" W
  int86(0x10,&r,&r);
8 y. w1 X1 I* |0 C# v8 E% `  }9 A% s' w5 M5 u* X/ |

" _3 q  F4 v8 ~% x) ]  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
2 W1 U( U" w( f: ^9 c6 y
# A" D. W( a* Y2 E8 O  void puta(void)3 s& P. [  z: a6 `/ O
  {+ l7 n- R% q8 G8 G  X3 U' n5 `
  int i,j;# I* V1 Z& f) v" I0 T! {
  for(i=0;i<24;i++){
" h" W, C% ]* ]% \7 ~3 b8 R  for(j=0;j<79;j++){/ C; i- w" Y0 W# s7 L! G" z
  goto_xy(i,j);
  ?! W3 c1 F$ u8 |  printf("a");9 s5 X( Z4 I1 G: T# @
  }: M5 D# d/ r8 n; y
  }1 ?1 k( B" t( e* s
  }

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