返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
; H; Z# l9 W8 ?* s
3 w0 v  G) A" G  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里  ]( S6 g3 d9 P% ^
2 K( u3 v. Z' P% w
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 2 }! a! D, X* R0 y" S5 V* f
  子函数及演示程序:' C. p9 Y2 w3 e

: P8 a5 f1 N  u6 I  #include<stdio.h>
* d  M& b8 b7 E/ O  #include<dos.h>
7 ^, w! e. M6 e# d5 H9 K  #include<conio.h>, P) E, i2 @: @; h: w. O8 ?- L) j
5 x: H3 s* O. B9 Z0 o3 P$ k
  void goto_xy(int x,int y);5 i7 z3 {  ]" N; c
  void dcls(int x1,int x2,int y1,int y2);$ e0 ~( i6 {7 ^+ _( Z. z. l
  void bcls(int x1,int x2,int y1,int y2);7 k, u! S! A% [9 {% Z
  void kcls(int x1,int x2,int y1,int y2);8 d5 w9 h3 `$ D* X! b
  void recls(int x1,int x2,int y1,int y2);+ G8 G2 S3 q6 A, [
  void zcls(int x1,int x2,int y1,int y2);7 [/ N! T9 o, F9 J4 D- E+ l
  void puta(void);
* G/ i. G+ r7 C# p' \0 U" s4 ]& n- H7 r$ p* M4 x* D' ~' a5 i

- @( G' H4 @, k  p7 g+ s  /*--------------演示程序---------------------*/% V# }' ~9 w+ d" J) e: Y( o
  main()) }; ]2 g; S$ V2 {" d
  {
2 g: _! c' M6 n  puta();/ u6 \  |2 `5 y3 Q
  getch();
" d; c6 `8 `2 O* I$ o  N1 M  dcls(0,4,0,79);5 L& ?; j. v& s  G; H6 c
  getch();! x3 ?, H. L2 T' b4 b+ n" ^; G( \+ w
  puta();% v. a- b& I" w& f  _( }
  getch();. A3 W1 ?" {- L5 Z5 ?
  bcls(0,25,0,79);
0 |/ H1 Y' E7 y- E' v  s" q7 a7 T  getch();
8 H4 J4 Q; J* v5 S& S2 S6 P  puta();
6 W( r7 K6 ^% t' p2 x  }+ o8 o  getch();+ A. {' Y: b, z. W. b8 U3 w
  zcls(0,25,0,79);
# d1 n5 n8 N3 U+ I2 D  getch();
( M7 |  P7 N( ^! U  }. U) }  z7 v6 w
  /*********center clear screen(中心清屏)***********/
$ k$ e" ], h  C7 s2 d9 {; ]/ f* Y  void zcls(int x1,int x2,int y1,int y2)- B0 |4 a- g( ^+ {7 Q- b- _/ J9 D/ P* C
  {% ]: [1 n- I% L3 a" w9 C7 [
  int x00,y00,x0,y0,i,d;
* M" z  r1 J8 K" c2 U$ G  if((y2-y1)>(x2-x1)){
) A- n* o) D1 T- d  d=(x2-x1)/2;
5 u0 v- {) I# }3 f6 G/ V  x0=(x1+x2)/2;, c" @6 v0 f: z3 s5 i( A( T
  y0=y1+d;
! H! A7 U. s7 y9 Y! Z' E  y00=y2-d;
/ Y, p( L( s5 z" G5 \% c2 C' N  for(i=0;i<(d+1);i++)
2 x- ?) D$ X% N  l& w1 |- y  o  recls((x0-i),(x00+i),(y0-i),(y00+i));3 a# J3 B- z4 `9 a: ?) g& M0 D% P
  delay(10);  _( T% h) e9 w% I/ u5 i
  }
, h5 L- V* W' A3 F% w  else{
3 u7 p. R& p6 X- U# G( o9 G  d=(y2-y1)/2;
5 P+ p) [, E: g/ z0 j  y0=(y1+y2)/2;) Y0 d; G8 q. g) Q0 ]; J
  x0=x1+d;6 X; J5 C  W- v) R# r  x  s, n
  x00=x2-d;- |2 u% Z7 Y- I0 O% C1 _$ L  N
  for(i=0;i<d+1;i++)
* V. Y  ^. [  k0 A1 b% n  recls(x0-i,x00+i,y0-i,y00+i);
- u( R$ N% Q. J0 ^  delay(10);
* {7 S& w6 u- U/ k  w8 _" L  }$ [2 O. X' Y4 J. ~
  }
1 {. b( a7 H. q3 g& |3 C7 e# k& L2 S+ v$ p' W% Y
  /************* clear rectangle side(矩形边清屏)***********************/
7 Q. z' U9 f& s" ~
4 K' M) I8 {# Y/ U6 c" D  void recls(int x1,int x2,int y1,int y2)
& M  K+ B% F& X) h6 x  {- ?4 Q, G9 w3 k; L/ V
  int i,j;
( i0 ?2 P2 t5 T* C/ }  for(i=y1;i<y2;i++){
1 I; y$ ~/ b  _/ o    goto_xy(x1,i);8 @. V) r' K. ^7 G) u9 \: o
  putchar(' ');5 t& G! a" D" F/ D' ?: e; B7 N. S" ^% J
  goto_xy(x2,i);
& T$ X% [7 p& w; {2 S2 z* G  putchar(' ');4 W8 q! C4 i# I3 R/ f6 s
  delay(10);2 m0 b8 d2 f$ e$ N
  }
* v7 ?, ~( T& \6 e5 p  for(j=x1;j<x2;j++){. v( P8 i3 `3 l+ `* }! Z3 W; R, J2 D
  goto_xy(i,y1);1 X! r8 n4 B9 f
  putchar(' ');
. H2 o0 M; }5 Y2 {9 H) e: L3 y' Z7 r  goto_xy(j,y2);" X' v# j. I' c2 l, r% D
  putchar(' ');
" y$ {4 k8 w- ~7 x) U  delay(10);* e5 t) B& l( {. ~
  }
% u) C: |  n: g) w  }4 Y( X9 ~% F$ M- J" s
  /******************open screen clear(开屏式清屏)*********************/
" j1 F0 s* N' E1 c9 e) k- A) U& t7 |7 c: O! f0 a' [
  void kcls(int x1,int x2,int y1,int y2)
* N% R" N, e8 j7 y  {
$ X1 L5 s4 m  P: \- g  int t,s,i,j;
0 A  A7 p! Y  y9 w$ [  t=s=(y1+y2)/2;8 p6 A  k6 p( c3 q
  for(;t<=y2;t++,s--); N6 c8 r: S7 B1 z( K& s/ F
  for(j=x1;j<x2;j++){
; F* g2 ^3 w- X1 r) {8 {  goto_xy(j,t);
2 Y, s- e) Z8 K% W( z, q2 P  putchar(' ');
0 W  r1 o' w0 J1 k2 k1 k  goto_xy(j,s);2 O: m$ k5 t, K
  putchar(' ');* M/ b# C' u7 _1 |, ^6 {5 h
  delay(10);
" i( k8 i; o; x8 C  }
7 K9 |* s# \2 e# \# M" A; X0 M  }
  I5 v# {" [& ^# j4 K* F  /*****************close screen clear*****闭幕式清屏*******************/
9 \+ P2 n/ u' Q1 ~! z+ V1 `" A' j; f  b( `( @
  void bcls(int x1,int x2,int y1,int y2)& I- e' P& ]2 d! y/ B( }4 I( m
  {+ {: A* v8 d# e/ F4 M
  int t,s,j;
. @. `& u/ s! j- F; b# G  t=y1;3 s+ |9 g$ i% x! `" A2 f
  s=y2;2 I5 s* \- p$ y1 M/ K# u1 D& @4 |; O
  for(t=y1;t<(y1+y2)/2;t++,s--)
( G) H) x, h* U: G  for(j=x1;j<x2;j++){8 |; _4 a& v( y2 C) u# t7 I5 q
  goto_xy(j,t);* G! G% U9 y: @# L7 Z- E
  putchar(' ');# N, b  B# q6 V# h
  goto_xy(j,s);1 p6 h9 P+ _2 m5 r0 B3 C1 f6 m9 w0 P
  putchar(' ');. ^# K3 r' Z! Q# `$ x* q; [* S' F
  delay(10);
6 D5 `! G2 @- e8 M0 U  }
$ ?, }8 x+ c6 H6 Y/ W" k0 O9 u$ s# ?  }) ]) h, s  _3 B$ [" X0 q
  /******************bottom screen clear(自下清屏)********************/: M- r; @& n2 a9 k; m" I9 a9 s- U

. p5 C) A& F/ @. H/ P  void dcls(int x1,int x2,int y1,int y2)
: V& c! Q% |7 u  \  {
. d0 H: w/ j; _. z0 T! y5 @( b2 ?  int t,s,j,i;8 d! i0 H( M9 V) {* e( X4 y
  t=s=(y1+y2)/2;
0 m- p7 V2 X1 j. F, O1 z, Y  for(j=x2;j>x1;j--)
1 _4 L# ~% c- o% |7 L  for(i=y1;i<y2;i++){7 {' J5 n- F6 Z! j, n, Y- Q0 @
  goto_xy(j,i);7 e4 Q" G9 x& w2 |: V" h/ N) z
  putchar(' ');- v- ~) G" t2 [3 u% I: r8 ~
  delay(10);
, c: I9 D) ~( R+ G% G( O4 ~3 Z  }# n) m4 F2 P3 T
  }; w  ^3 Y$ i( E% q' ~+ Y" V
  /******************设置光标子函数******************/
3 D+ z; i& @* [. x; w  L6 e3 _& g
  void goto_xy(int x,int y), P# B9 V3 f/ r4 M, `' G1 C, w; K
  {% y! Z9 \# V- ^/ v' B3 o
  union REGS r;
/ H$ w4 a% x2 u# P; D  m  r.h.ah=2;' @4 O2 h( J9 T- Q7 g9 D% A2 _
  r.h.dl=y;" W+ L  U- {$ ]/ c
  r.h.dh=x;
: q9 O4 O8 A) W7 e( v  r.h.bh=0;1 F1 N; f: M8 R/ {. d: R* [! u
  int86(0x10,&r,&r);
9 l% N* y; [( _- H9 W6 I  }
7 x) h- ]$ F0 h7 D+ Z3 w" s3 e9 S# C
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/  A1 z( {" q/ r* D0 R" @" Y7 _; p

" U- N7 `7 M1 o% _' x3 ]% W  void puta(void)
) ?) O; T, ^" r: W5 V  {3 I/ @( y5 G. o7 K% [0 q+ `
  int i,j;
7 n. k2 W9 D* u/ y2 U  for(i=0;i<24;i++){5 E. I7 s5 f# I! k- r" M9 S
  for(j=0;j<79;j++){
. F$ N/ Q9 k" o8 T7 d( F  goto_xy(i,j);# L. T1 h: [) M0 r  W
  printf("a");+ C2 x* \% {+ t! E4 e
  }
! X' X7 _3 ~0 _  o+ t  }5 q0 r" ?: Y3 X# W$ ~! ]
  }

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