返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,5 R6 T) m7 f  z: H/ ^2 i' v* v
; n$ f# ^( q/ m8 g7 H, y' D+ ^: |
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
' s5 m+ `$ ~) w3 l
5 }6 W/ ]/ [% v" k- u  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
7 R/ [# K0 ]  Y6 ~+ t! h, G: z9 r  子函数及演示程序:  s- L, @$ V+ ?# t$ l  b; `
1 H  G4 B2 Q7 \/ E/ |
  #include<stdio.h>1 \0 V+ [) f; b  T1 J( c# V
  #include<dos.h>
  P& a! ]& ?, T: u; e- ^  #include<conio.h>& c1 D8 ]0 s# o- r  ]
& \, g# N1 W2 T: R! ?+ U3 t$ P9 |. H
  void goto_xy(int x,int y);- ]- b0 ?; K- G, D) e
  void dcls(int x1,int x2,int y1,int y2);8 p2 [6 G. p# Z1 E
  void bcls(int x1,int x2,int y1,int y2);
( \3 h& [" Z( G8 [8 R) {( x: w  void kcls(int x1,int x2,int y1,int y2);
0 F$ O, A' k7 X  void recls(int x1,int x2,int y1,int y2);
7 ~+ k3 Y' U- z& H4 R' h  void zcls(int x1,int x2,int y1,int y2);' D* u) `3 d) x# U/ m' ~% y
  void puta(void);
5 P& z  J/ o4 a! r- K  m
! B3 S# i6 t$ q+ ]8 h5 j1 Y7 |6 X+ q' l$ D  U1 @
  /*--------------演示程序---------------------*/
  h$ _2 o  L# V  main()
3 L' x: [0 `7 H: M3 X: [# X0 E  {
  V7 v7 ]1 d$ p7 E5 |. Z7 u  puta();
2 v0 \+ ^$ d; `% e+ D, P) Q, o  getch();2 L9 V  Q! x) j, A
  dcls(0,4,0,79);  V4 A" ?. ]( y. U" z2 |' q6 V
  getch();( V4 B- c. @6 L3 D+ b8 F
  puta();6 [% n6 T( C6 ?) @& L2 h0 l
  getch();) Z8 H+ B* a  x% x- V& x/ D
  bcls(0,25,0,79);
6 d. J! R1 ]' S. P9 o6 B. ^  getch();
4 N& r) C& ?% l2 u6 X  puta();! G" {( C; Z- O5 G1 w5 V( W
  getch();& o, Q2 b& v1 o' y8 }, h7 P9 u
  zcls(0,25,0,79);7 s, m# B* B- ]: T( r  E  _0 b
  getch();% w9 ~4 |3 i1 u2 ]( i! W1 ?
  }
2 l# `/ @7 R' Z* {: r. g: X  /*********center clear screen(中心清屏)***********/$ j$ z: p; p0 Q; K5 t
  void zcls(int x1,int x2,int y1,int y2)
# f3 J$ R* o- [( ]5 ?+ Z- c  {
# e! C+ F4 L; T- u7 e  int x00,y00,x0,y0,i,d;
4 ^) c$ Z0 H, U9 J4 V% }4 P9 e0 i  if((y2-y1)>(x2-x1)){
2 M1 D6 ~* P6 v& F  d=(x2-x1)/2;
* H, G/ T+ \3 ^' G# |7 G  x0=(x1+x2)/2;/ K7 p& O% t- r1 [( `* J! e2 p
  y0=y1+d;
9 _: V' u" i2 p* j" A! y' _  y00=y2-d;
% a# a( C  I- }  for(i=0;i<(d+1);i++)# q$ a8 ]3 ]6 p  x6 N; }
  recls((x0-i),(x00+i),(y0-i),(y00+i));
" A2 C$ d" [" d9 Y  delay(10);
5 ]8 w- N4 z8 V* y  }
/ n4 Q! N3 D% o: m+ m  else{8 r0 n3 T1 N; v* G) ^9 v$ E9 ~0 u
  d=(y2-y1)/2;7 V/ d4 F& A4 ~+ q4 n) f
  y0=(y1+y2)/2;
3 A3 Y% k9 ^8 B  b0 n  x0=x1+d;. j/ t: i% W: V  k9 c/ V) _
  x00=x2-d;
$ j- H6 s4 x; b  ?! m5 |+ ~) z  for(i=0;i<d+1;i++)  U: S8 t) y. u
  recls(x0-i,x00+i,y0-i,y00+i);
4 ^2 ~5 u, |0 B6 V5 a4 z  delay(10);/ Z9 p- Z) \# c* ~7 M& e
  }/ p& j( [1 E2 n  n
  }7 ?7 z  v6 u  o1 P% t
2 c7 }0 k/ ?* o. U5 y5 Z
  /************* clear rectangle side(矩形边清屏)***********************/
1 ^5 B" \4 x" ~
# I' }$ \$ a8 b! a% ]( z  void recls(int x1,int x2,int y1,int y2)1 ?6 ~# i4 ^) k% [1 ~( F
  {1 q$ Y( a' d( y- t- [
  int i,j;
# T8 _" h# R! L1 P- m. B  for(i=y1;i<y2;i++){
9 [. _( i( i5 r' W    goto_xy(x1,i);
5 W! h5 ?  n. N$ S3 i2 g! M  putchar(' ');. _* M0 R3 ~% _; B
  goto_xy(x2,i);
" `* X- d% P+ `2 c9 m9 Y2 q, t  putchar(' ');% @( I/ C; p# Q, F& L' s: ]
  delay(10);* B" M; P* G: M# K* D6 z2 N5 O
  }
6 d- c$ X1 W  q% \  J9 X  for(j=x1;j<x2;j++){% I6 l5 g* O+ R0 p, D
  goto_xy(i,y1);0 m2 f7 B, |3 P& {1 q( k
  putchar(' ');5 x/ h1 h& P, _# ]
  goto_xy(j,y2);
3 Z/ u7 G8 }( t  z+ N+ Y) j' M  putchar(' ');8 [6 U( S" z3 r! S8 P
  delay(10);- [4 x3 i' m5 N  e  J& q
  }- q6 @3 G5 u: W: |% v/ p  q
  }
! `( u$ @! S5 E0 M  /******************open screen clear(开屏式清屏)*********************/
( e0 Z( }6 I! W7 ]% P! a, ^7 m5 d! H& z8 u0 d+ M2 i
  void kcls(int x1,int x2,int y1,int y2); x4 }% I2 w2 O' Q: ~& H
  {
! ?4 @  T& Y0 }( i; T  int t,s,i,j;
( v0 I! t, q/ k& b  ~5 ~  t=s=(y1+y2)/2;, j; w  W# L- R( d
  for(;t<=y2;t++,s--)
; r3 m1 y0 h5 @  for(j=x1;j<x2;j++){
+ H4 Z, r/ t8 X- J  goto_xy(j,t);! y' b0 {' [, q% W
  putchar(' ');
1 p, I/ A9 ]2 l( X  goto_xy(j,s);
# u5 _2 S1 W- S$ X5 V4 h  putchar(' ');, i9 S& s0 q2 }- w  }
  delay(10);
) S) ]& K# S. @* e  }
1 v* Y/ K9 h! j  Y! U  }
, c) p% O( G& m/ n2 {4 H  /*****************close screen clear*****闭幕式清屏*******************/
, o2 t: t; M/ \. H7 K1 P1 ]' g3 E7 N2 n/ F/ c  |
  void bcls(int x1,int x2,int y1,int y2)
6 G3 ?+ X* b/ v: D0 F% ]# D  {
/ I! i( b$ R& X7 V: \, Q" y  int t,s,j;2 O# W6 F+ x2 U: X. X1 x8 M1 D
  t=y1;' w* p" D+ e% D1 M
  s=y2;
, E' ^9 c" N  E2 t; A$ c  for(t=y1;t<(y1+y2)/2;t++,s--)
) H' ]( l2 k0 u! v  for(j=x1;j<x2;j++){
; t# ?7 i9 s* W- @- q, I  goto_xy(j,t);# J6 I  F  q" C3 Z, }3 h% \
  putchar(' ');
$ @! d1 ]3 `# P; D3 m  goto_xy(j,s);& J! C2 W- v' h# \/ T& z
  putchar(' ');
6 v9 g" ~5 I  W0 b- x  Q9 F  delay(10);
2 F" O5 I' t. y! G( |  }
# U( n' y9 J# o2 r4 B, Q  }
, \: i& O/ F' H" n  /******************bottom screen clear(自下清屏)********************/; r" \4 n5 G& K' e" ]  y
6 T- G; p+ `/ A% K- U, _# m
  void dcls(int x1,int x2,int y1,int y2)% }2 @3 _, k0 A8 v4 e9 y+ v
  {
1 u5 Q7 J$ d+ f5 }5 X8 B  y- Q% C8 E  int t,s,j,i;
9 |8 Y6 Y' P; ^+ e  t=s=(y1+y2)/2;. F! N: Z3 w  B
  for(j=x2;j>x1;j--)
: w* K& @6 R; n# m% F( L& _  for(i=y1;i<y2;i++){
) D- Q# V( Q0 y; Y5 U  goto_xy(j,i);- L$ j) z- ]8 V5 u5 a
  putchar(' ');
1 ?& @9 ^+ ^9 I. R0 u6 Y9 g! B0 d  delay(10);6 K# z1 q: K9 N
  }
5 i" x; g7 E! T5 U: y  t+ N  }
$ a% g- x: @, T6 v+ Z: i5 G  /******************设置光标子函数******************/
* `7 P# _; ^+ ]/ S3 q' e& E6 l8 R; `  c$ m+ h
  void goto_xy(int x,int y)
9 n! m: @) L! |$ Y1 x# N* S# F  {
* S% e, R: h9 |3 X) a3 f. ?$ g' k  union REGS r;) K0 }, v' D; U$ v- A
  r.h.ah=2;
: L& a; m& T' o  o  r.h.dl=y;
) c5 x, d7 G& u  \6 o# I( K4 U  r.h.dh=x;; p- j3 k7 A) o: l8 s( i
  r.h.bh=0;+ k/ {" H" V8 {
  int86(0x10,&r,&r);5 |9 \$ J- G' Y4 Z0 M4 H/ v
  }
& G& ]  L2 Q3 I6 d3 I- [5 K* H9 B% D, x
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/& A; z5 t6 ^/ r% L" r) n

" I# ^/ n- w! _8 s# `6 b$ b3 w( \$ d  void puta(void)- p7 ~8 w  S1 X& R
  {* b. M  y' ^3 ?- s/ M' Z
  int i,j;
1 F) f) w4 J& \0 f; f% p  for(i=0;i<24;i++){
) f  P; K! G: a! L. m4 Z6 e  for(j=0;j<79;j++){: L# J- W2 _+ Z
  goto_xy(i,j);
4 ?' U$ e6 Y# B  printf("a");. E2 i3 Y. U' h
  }
* o- e0 i+ M1 n' c+ D3 q5 d2 V  }5 @; }8 T; v7 t$ N/ y5 k1 ?
  }

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