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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
0 C$ c: y. O/ R- s0 `: J3 J- O5 ~3 c* h0 q
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
7 N9 i) W$ ?; Y$ u5 T* K: G1 w( t# y! `, i& E
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
( W3 h' O% ]( n' b+ p! R  子函数及演示程序:
+ S. d& k& P7 o
& F" O. w8 I4 e+ U, D+ t9 G" e& W  #include<stdio.h>
; A" o" `4 U# ^  W4 L  X  #include<dos.h>2 h! b3 @( q; u0 `0 M- n3 p3 u5 S. [
  #include<conio.h>
& ^: x8 |8 {2 S
8 v$ Y9 p/ R  U- o  void goto_xy(int x,int y);2 G# q) C% L) q
  void dcls(int x1,int x2,int y1,int y2);& U8 |/ l" e; K1 ]: [" k
  void bcls(int x1,int x2,int y1,int y2);
, f3 }% t4 k% j6 i- n7 ]& S  void kcls(int x1,int x2,int y1,int y2);
. T  k2 o1 C9 ]- u' G3 V% t7 E  void recls(int x1,int x2,int y1,int y2);
6 E1 y) v! D0 H( M& v  void zcls(int x1,int x2,int y1,int y2);! o7 K3 ~2 E9 G$ X
  void puta(void);! R9 N, F, d% J  c" L  ]6 S* I
, Z+ E+ u" Q3 d! \+ f5 |' u" {
# Y/ {5 ~% ~, u) K* N% R
  /*--------------演示程序---------------------*/
% c! K) ]4 c8 o  k" o/ w# o9 Z  main()
3 C$ Q# p$ z8 h& b: _  {
) D" H- |7 M/ O. z  P; S. c6 f  puta();
; l  Z( G. W8 j  getch();
7 N* r3 o& V2 t2 k8 m* O4 W5 J" n  dcls(0,4,0,79);
7 |; H0 a. `( v; ]/ V) l# {  getch();
& Y4 q- X) N4 \2 U- ~  puta();
9 R$ k' Q9 Q+ P- |+ [  getch();4 ?( ~7 A1 K4 N; v! v; d4 `
  bcls(0,25,0,79);
& i+ v2 P2 O6 E2 Y  getch();
* j6 k( i- [. ]: r0 Z  puta();5 e; s& f  A  j; o. W
  getch();
4 x' }9 K* j3 e* x" U: n7 l  zcls(0,25,0,79);3 K! l% g3 K/ v8 ?; p* M1 x$ X7 o0 Q) l
  getch();- z: l2 O8 I' H
  }
- q2 }( f" V& B4 I  E0 |- I  /*********center clear screen(中心清屏)***********/
5 [9 i, z& N& e# {  void zcls(int x1,int x2,int y1,int y2)
  _7 o# H: g$ m# [9 A/ @( s: p  {
6 d$ U% b8 j* G+ B# T- k% Y) s/ D  int x00,y00,x0,y0,i,d;8 f. T) C4 K* F3 g/ O1 B. d% z/ G
  if((y2-y1)>(x2-x1)){9 ~- g  V/ ?+ o8 v8 N9 f
  d=(x2-x1)/2;8 d  H, o! W; y6 N/ U. w
  x0=(x1+x2)/2;
: A/ Z  K" W* O' T" p. [  y0=y1+d;. w8 t( j/ @8 ~# c) w6 M2 a# h6 x
  y00=y2-d;
8 ^1 E; e8 ^6 N- Y/ u1 c  for(i=0;i<(d+1);i++)
" o: g$ l# e# t% f& n- d& N6 ~  recls((x0-i),(x00+i),(y0-i),(y00+i));
- k! h& f: y  }( Z) _0 ]7 K. B( o1 |  delay(10);8 v8 ^& O& w8 V. f* d
  }
# F- N% H5 j' P# j7 u  else{6 {/ ]0 c1 k5 y( Z( x) {
  d=(y2-y1)/2;
- |$ E- T1 @$ d2 L9 M2 X9 w& }  y0=(y1+y2)/2;2 p2 g5 p. y( u+ \
  x0=x1+d;
- x1 B* Z0 ?7 O$ P2 X' l0 a  x00=x2-d;% g  a' c5 }: F0 a8 d1 e) S2 {
  for(i=0;i<d+1;i++)
0 d% P2 u7 A$ @- c6 ~- [  O/ _2 t  recls(x0-i,x00+i,y0-i,y00+i);" N2 L$ c8 u: g( S( C6 k
  delay(10);% \& R& I. l3 }. P1 ?
  }
4 w( X+ ^0 x, E  _% _  }8 w1 e; [8 S2 k2 q$ g* m. c5 K

; h- R% M7 I6 _0 ]) X- {2 ~  /************* clear rectangle side(矩形边清屏)***********************/
. i+ M. V4 T6 f2 ?, [, I# G
- ^  f; D9 o, ~; ^7 n6 d4 y+ y+ P  void recls(int x1,int x2,int y1,int y2)/ Q0 k- h! U* D. {# j
  {
3 a% N( T8 B8 }+ L* U7 A  int i,j;
$ N8 l0 t3 C6 }6 U0 U0 ~, H  for(i=y1;i<y2;i++){  H9 t4 n/ M0 w2 S- }- \; |! P
    goto_xy(x1,i);
5 N) h4 ~* C4 ?& R+ a  putchar(' ');& Q" k- J& r7 w: P2 A: N7 O' |
  goto_xy(x2,i);
+ P: q7 J7 [0 ]  X4 _" a" C* t  putchar(' ');
; G" f0 I- _/ B+ v" U  delay(10);" I" P, ~7 Z+ j" i3 W6 t% o2 T
  }
5 K& g! O' L" U5 y0 D  for(j=x1;j<x2;j++){
6 i5 _) ^/ `. X" }9 e! G" |+ }  goto_xy(i,y1);! q8 ]2 Z" V  N/ J$ E2 n
  putchar(' ');
' g7 c% F# x; f( A5 _  goto_xy(j,y2);
5 t  C5 X' j" @5 M0 \, e  putchar(' ');$ y/ Z8 h5 d+ z% K* ~+ q$ T
  delay(10);" z. `  I; K' j9 w: o
  }
5 `3 ~4 ?! }/ g$ p9 y, s; o  }
# n/ M* H0 e, y% C  /******************open screen clear(开屏式清屏)*********************/. H8 N3 F2 a0 D1 O. S

4 k: a* v& i$ V3 d  void kcls(int x1,int x2,int y1,int y2)
) n8 M- V7 O6 O  l: U1 M  {
& Z2 A! l7 ?) O9 s- Z  int t,s,i,j;3 Q0 R: _  l2 q6 ]  ~3 |
  t=s=(y1+y2)/2;
/ ?  f0 F& ^4 F  @: I, x8 r* ?  for(;t<=y2;t++,s--)2 @* I0 L# Q5 K( D, y
  for(j=x1;j<x2;j++){
( o$ g; i& p- T+ m  goto_xy(j,t);
# B  J$ ^  k. U  putchar(' ');7 g; U" k( U% c
  goto_xy(j,s);& B2 E6 y# _+ u* b; c
  putchar(' ');
. l' _, c+ y3 N- N" x9 K; {  delay(10);
/ S4 m4 Q1 A+ ]' \# P2 ~3 H  }
+ }+ x! W, r* q6 Z  }
+ p- @3 Y* O, q1 G  /*****************close screen clear*****闭幕式清屏*******************/
, n- N* J( i6 i2 g" M8 E, I8 S7 ]/ X+ L. A, O
  void bcls(int x1,int x2,int y1,int y2)1 r* W) |2 Q' Q9 p% Y9 ~* ?
  {0 w. P8 S5 E! s9 w+ ~# ^
  int t,s,j;% R% W4 {, B' m: t; l0 M& |: u: S8 [
  t=y1;
: Y( X2 k- U" [" |0 r  ^; f  s=y2;
+ l( @# Z7 E2 x1 y. @  for(t=y1;t<(y1+y2)/2;t++,s--)' Z# u3 N4 U; T( n  c
  for(j=x1;j<x2;j++){) p$ W; c( O4 `/ J% v1 f# @" R# t8 l
  goto_xy(j,t);5 m9 ^' p- E) I9 a
  putchar(' ');
1 G# C7 t5 X0 G5 f0 @  goto_xy(j,s);
* ^) \( V' l* l0 C  putchar(' ');0 K: P+ a( w, \' U' b4 t
  delay(10);
& f2 y* V9 J, [. b. E  }
+ T' `+ g5 B, f1 T- t- g! p  }# c* _, H9 {' G# R0 i6 s
  /******************bottom screen clear(自下清屏)********************/
1 M* T+ m" F1 d2 h* t; ~
; M4 v7 a$ i4 b  void dcls(int x1,int x2,int y1,int y2)/ e. i& f( L1 M! r7 ]  b9 R
  {) V. a( e" O; ]4 D5 A/ ^2 w9 M3 `- p
  int t,s,j,i;
: N% o2 k0 O; k1 p  t=s=(y1+y2)/2;3 T$ g  Q% k6 t2 @
  for(j=x2;j>x1;j--)
4 i; ~9 ?& V0 I  for(i=y1;i<y2;i++){
# j' o7 V' s  k- C  goto_xy(j,i);
  [5 c# R; Z& V* c2 ?  putchar(' ');
7 J3 L- p$ f' y4 W+ u" P1 s# R; x  delay(10);
8 D( L3 ^$ V# N8 `3 X& k6 [  }
1 P7 B' w% I$ m% a6 N" f0 i$ s9 c  }
- }6 G4 l+ m0 U  /******************设置光标子函数******************/
$ G2 y7 t. y+ s! I$ z2 W" v7 w1 N% ]$ ]. X3 b8 f9 g- C( l
  void goto_xy(int x,int y)- Q+ N4 V7 c$ j8 B' H6 t# K) H
  {
6 J% @6 `" f$ ~& `/ Y' G/ P" K  union REGS r;
- r' f& p: s! x% V2 F  r.h.ah=2;+ Z2 P2 t( f/ _8 s
  r.h.dl=y;. a- J! N* F2 q( l* k7 P, i( Z
  r.h.dh=x;# ]9 r5 A' a$ ]. L5 c% j5 `+ N( K
  r.h.bh=0;/ ?/ z0 j4 s/ ]  D
  int86(0x10,&r,&r);' Y4 F1 X# h" N  `$ Y8 D7 y( X  l
  }
9 A5 J9 M. d7 A: P7 U; D# X5 }% T- Q
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/3 a9 `0 b/ ^' t$ H7 N

8 {: V$ {5 y* @  void puta(void)! I9 O4 c2 ^$ {3 f) O3 r: W. a
  {/ C- ^+ v1 D% `8 K, O
  int i,j;
, K; B: L; R" v, P5 ?% `  for(i=0;i<24;i++){* ]1 A/ a7 B9 \2 i$ p! ?3 _8 P
  for(j=0;j<79;j++){
! D3 \1 _! |3 {! \3 R% v8 S  goto_xy(i,j);' Q+ d" b; n6 f  A. n+ S' V: }' L
  printf("a");
7 L5 ?% i7 A5 }* l2 P& Q+ f  }
1 S2 h7 F" L+ U/ [  }' L9 v1 \) `/ O6 t
  }

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