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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,/ E7 ^0 b. M0 V, B

8 M+ G/ P5 n& E% G8 ~; g  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里  q% D( k3 A" a, ^/ F6 C+ U8 M

5 ^1 ?" V$ V4 V( _! D  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 9 l$ X) ], x+ J: z4 ]; E7 T( ?
  子函数及演示程序:
4 c  e6 ~& Q+ R2 S( q
1 j  v% L- z/ Z( [, H! N0 M  #include<stdio.h>
; L- H+ D% X7 l" \% a) m  #include<dos.h>
, ^2 z- F5 }& Z3 L# H  #include<conio.h>
% N% l4 K* Z/ N- U' i: f" v
: Z8 c5 x* y, \/ ^, c: U1 Q  void goto_xy(int x,int y);
" V  c+ _: G& R! b3 d  void dcls(int x1,int x2,int y1,int y2);
. G5 i2 Y. M% H  void bcls(int x1,int x2,int y1,int y2);/ K$ t: [; T2 C* y" F! @  a
  void kcls(int x1,int x2,int y1,int y2);
/ j5 K+ k' o2 |! L/ _  void recls(int x1,int x2,int y1,int y2);% ]! X- i: o$ X" P! U% z- _
  void zcls(int x1,int x2,int y1,int y2);0 N, n" ~( x# v
  void puta(void);
' O' u) `: ~" n  K* M& D* ^( Y
3 b, N7 s; i; r1 V: u2 x! @4 H  h! L6 x3 L2 s" r' Q$ d
  /*--------------演示程序---------------------*/
) v# b$ h$ Z7 @' m1 E% B  main()
( v' J" B6 K7 i: e8 f' I8 U- P& M  {5 z/ s: B& K$ G7 F5 c
  puta();
" o. K1 Q0 z7 L" X+ f' a$ O4 x* a  getch();3 Q6 c* F: x4 O. t
  dcls(0,4,0,79);1 v, [) M; I0 s5 H/ L( |
  getch();6 U, t9 b$ S, ?& r7 Q8 a/ @
  puta();
- {' @5 T& C+ a- a0 t# B1 f$ D  getch();: ?/ i1 |4 O9 H( g! A& U
  bcls(0,25,0,79);
/ U( G7 {1 _& g( f, [) M  getch();
5 x) u% d2 d; {5 _  a" J7 E3 \  puta();
( o; q7 ]& y# f  \. d6 L  getch();; e" P8 F  ^8 Z3 N2 i7 s; g
  zcls(0,25,0,79);
- k0 D- K0 ~! e: b7 u  getch();' W! S9 j) |) q% g1 v$ ]( J" P% n: p
  }
8 |8 _7 [6 E: e+ A  /*********center clear screen(中心清屏)***********/
. F9 Y; p+ ~: a  _: L' B& [# b  x  void zcls(int x1,int x2,int y1,int y2)
' j9 u3 K/ {" U$ q9 [8 c( J  {3 ^( M' U5 b5 L! E' s" k( `
  int x00,y00,x0,y0,i,d;7 D  G: W% W$ B4 d3 e" [& j: _
  if((y2-y1)>(x2-x1)){
- A6 C2 k1 Z& ^) i7 p7 M  d=(x2-x1)/2;
: @' ^# e1 x* Y  x0=(x1+x2)/2;4 C3 w9 g& M  r# }0 l$ x/ P
  y0=y1+d;) _* h" x+ O) @- w; D( T% g
  y00=y2-d;
9 H1 _" A7 K' b6 C) I  for(i=0;i<(d+1);i++)
% B4 w3 ?; ^1 G3 |  recls((x0-i),(x00+i),(y0-i),(y00+i));0 a* G6 X# A  _5 t, M
  delay(10);  O* X* r) d$ f' G9 z: u
  }/ H' ^# Y1 S& X) v, i5 d* c& ?
  else{
1 p' ^" v1 A/ U! T7 Y  d=(y2-y1)/2;
( S1 |- v) w" T  y0=(y1+y2)/2;
, s1 z" G4 K! y, g; ~" |  ^  x0=x1+d;
4 D, r/ s% P; B9 H  x00=x2-d;
# p' _7 }1 H) V& n# x8 P  for(i=0;i<d+1;i++)
4 v1 L: r5 K( i4 V9 {& _  recls(x0-i,x00+i,y0-i,y00+i);* a5 B4 k' Q2 S5 M% b% O  V; f
  delay(10);
$ v, I8 D0 W/ _, _4 f  }; _- f3 V/ _. a! d0 X! Z/ M; i
  }
" {/ l* {$ f8 Z, c: n1 N( _; ?& C9 W. @) ~- a' i
  /************* clear rectangle side(矩形边清屏)***********************/
: y- T  B; |- T- M$ k. T5 r0 \  c. n0 B" L4 w3 u* d
  void recls(int x1,int x2,int y1,int y2)
" r5 v# Y0 ]& Z: V2 W  {) B4 ]7 J+ G: n# e1 O, m) t
  int i,j;
; t' r& v6 f, F( ^  for(i=y1;i<y2;i++){. Y; W' S7 ^4 o3 d) Q
    goto_xy(x1,i);" m, O+ e" W7 {% Q. C; l
  putchar(' ');( `) e7 z( w" f* e& E4 U! K) e
  goto_xy(x2,i);
8 F. a1 _' u- P, a  putchar(' ');
7 J  `5 h3 O, }  delay(10);, G  r2 F: i7 Y6 g+ T1 v. R
  }) {8 @  b* h! j1 ]8 E
  for(j=x1;j<x2;j++){
9 w; R: I3 n, ~. i  goto_xy(i,y1);2 ?* d8 P3 w1 ^% g
  putchar(' ');2 A3 V( @4 H# W# i/ n2 f
  goto_xy(j,y2);+ b# ^9 J4 b4 o2 T  }% [) {
  putchar(' ');
" g6 c/ T6 n1 h& D1 J1 T  delay(10);
* D! P6 U9 l. k: C  }- ~; z' S5 C0 u4 x7 [' }' @6 n
  }
& k' P) f" s' p5 E' i# i: r6 m- Y4 t  /******************open screen clear(开屏式清屏)*********************/
! ]# Q& w% {6 ?6 v6 N8 w/ X5 j
6 h6 O9 L4 ~9 |3 m3 j, N$ }- F$ O  void kcls(int x1,int x2,int y1,int y2)
& V) `! m* H9 d; {0 t" l! M  {/ Y" b7 x# I: G$ X" z
  int t,s,i,j;6 |; U4 \$ ]4 ]/ @# A# V
  t=s=(y1+y2)/2;! w  r: o4 r6 t$ Z- I- G
  for(;t<=y2;t++,s--)
( t% K$ Y1 q  u, l$ `+ ^  for(j=x1;j<x2;j++){
7 k  ]; v7 Z% d- e  ~/ G  goto_xy(j,t);
4 Z! ]7 k" M. r8 k& p2 y& s9 e8 P  putchar(' ');2 P! W: K# }1 h  r; E+ Y9 P8 |
  goto_xy(j,s);/ \4 q# G7 Z7 e7 g
  putchar(' ');
" C9 W* ]/ O6 G/ e  G  delay(10);
- h+ ]4 M. i2 W1 V) z9 Z1 l  }
( N. F4 E* ^5 {  s3 N6 U  }, q& n) ?# ~4 B* N9 H1 {
  /*****************close screen clear*****闭幕式清屏*******************/; s% r/ w$ y6 r3 B/ {+ [% p* {  f
7 |4 s1 z4 l% Y
  void bcls(int x1,int x2,int y1,int y2)( e$ O5 Z8 d2 D3 F( y
  {
: j7 o9 O7 @% e% f  int t,s,j;3 H0 K& h% ?. B8 P
  t=y1;
1 J  E/ @( p" |# N& a  s=y2;
  U( f5 m" ^/ P  for(t=y1;t<(y1+y2)/2;t++,s--)/ q; d1 F- C4 F3 p
  for(j=x1;j<x2;j++){+ f3 j8 c; L  T# p3 B  ?
  goto_xy(j,t);
5 \6 m' f1 S% x4 {) ?1 Q% M  putchar(' ');  @' [  Z& C# k; ?6 [' W( w
  goto_xy(j,s);
6 t+ u1 q6 U* k" q# J  putchar(' ');1 O  H6 i  p' s, P2 f
  delay(10);
5 m; H  k# _3 M0 W- b7 L' g  }+ p8 Z' E2 W; c" @
  }8 Q- I1 i5 F# h+ C  l3 \! `( [: w
  /******************bottom screen clear(自下清屏)********************/$ q% L4 ~* t  @, D
. L2 w8 F: r) m+ A- ]! N* D
  void dcls(int x1,int x2,int y1,int y2)
3 f1 }- |1 b% X* D6 r6 x, l. j; f  {
( {* x( ^0 _+ B3 |; C6 c1 S  int t,s,j,i;
1 E# B. b, ^# Z; o- t5 Z9 _" `% M  t=s=(y1+y2)/2;) i9 b; x# b4 [9 R
  for(j=x2;j>x1;j--)
/ ~7 y2 R% Y6 I0 ^1 Z  for(i=y1;i<y2;i++){
3 a4 t, R! R& `6 \& d' Q+ C  goto_xy(j,i);( y# @) ~, Y) n) i: F, W0 f0 P# g
  putchar(' ');3 W0 r9 L1 S8 T% d& T* `  U
  delay(10);
, r5 J) ]# X- P* O  }
' A; r' {% [5 P% R+ ^  }
1 H9 v% F1 y7 c: v  X2 V/ X1 p  /******************设置光标子函数******************/
( s$ p: d0 n0 L) _5 H. C# T0 ^: A& \$ d" c
  void goto_xy(int x,int y): v; ?) O7 s, W- z0 |; K' R
  {
$ Q2 w& A8 b7 A+ g+ y$ ]  union REGS r;+ k, t- Y! D  @
  r.h.ah=2;
6 {! x' E4 j) n- m/ r6 Y  r.h.dl=y;2 Y3 \9 ]4 u2 B/ H0 s# R% f
  r.h.dh=x;# h) M1 R# J+ \
  r.h.bh=0;- L; O0 Z2 M- b# T
  int86(0x10,&r,&r);
# W' A- b$ W* r  }! A" l) w* y8 `6 {9 U
: U. }, v  ~9 T
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/# m- D% r3 _2 C7 v6 ?: ^; F! M
: s  U- ~( u1 _8 v8 Z0 a
  void puta(void)
- q4 Q- @" X4 ]8 q1 b, W% E/ C2 }  {
/ M+ Q( t% o/ K' m, C& w- k1 d. o  int i,j;
% i1 g6 K, J# _# |5 V  for(i=0;i<24;i++){
4 U: g/ i- S7 Z* z  for(j=0;j<79;j++){
# u) M3 ]5 ^! T6 u  goto_xy(i,j);
; B8 z! q& r, k) u& c5 e# B0 d! w  printf("a");
! _/ l" F4 J' Q# K) u# h) P  }  _( i0 X7 j2 Z6 O3 z
  }0 t4 C. ]: W! f1 d- Y6 `
  }

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