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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
( l1 Q1 S; k6 q- X8 D4 N
" }5 u3 _3 S/ i9 w, U+ X  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里- z# |7 I& v4 _+ D$ f

2 ~7 q1 ^$ X# R( g$ {" H7 T" U; k$ G  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
. @( L6 D' R; K4 t  子函数及演示程序:& c. U5 o' Q3 ?5 {
/ ?2 |  H9 @; w9 R4 m
  #include<stdio.h>
! D1 x4 Y( j# ?* [( P0 f1 q' J  #include<dos.h>
  U# y, N# M/ j% s, X, _  #include<conio.h>
  g* u6 U+ G: }' A& b. l
+ V0 H: \- M, `  void goto_xy(int x,int y);
% B) M" ~; C! G3 g  _( O' r  void dcls(int x1,int x2,int y1,int y2);4 [8 r+ {& M- S6 ^
  void bcls(int x1,int x2,int y1,int y2);. p3 j( O7 z" |' V7 ^6 _
  void kcls(int x1,int x2,int y1,int y2);" T: E. E3 H( ~- R2 J; S
  void recls(int x1,int x2,int y1,int y2);5 G7 q  u8 n. h/ {+ m' @
  void zcls(int x1,int x2,int y1,int y2);( x1 a% d  n& K+ B2 r/ w1 C; y, ?
  void puta(void);
: O# r# `% s& t9 p( H
# E' u, K/ m5 ?  Y: k
1 f/ J" q# s+ m0 u# t4 d  /*--------------演示程序---------------------*/
  X) ~6 S6 ?7 A* h5 |  main()" \+ f9 m- c, w  g. H
  {* }. @8 f2 L0 a+ k4 U$ y8 W
  puta();
1 [1 P- F& {% d; k( Y# Y  getch();2 I3 S6 Y2 U( i4 a1 i3 u! U
  dcls(0,4,0,79);2 f7 G% y0 E/ U
  getch();. P6 ~1 `' M$ ^% f& }0 [
  puta();
4 T" @+ W  p8 S  getch();
& t; r" m3 r. U6 V- V  bcls(0,25,0,79);& K3 E6 N9 u8 B* {- r+ R
  getch();& i& \6 |4 D/ O& A' J. {& [
  puta();
6 H8 M* k6 r$ Y' f) m  getch();
, s, P8 @2 {+ _8 ]5 U  zcls(0,25,0,79);1 o3 b$ Y  {, t9 H
  getch();
1 ]( N+ q0 j7 d- z+ k  }
/ w2 o6 e, P! h% O  /*********center clear screen(中心清屏)***********/
5 U3 M3 `$ T. Z  void zcls(int x1,int x2,int y1,int y2). z  q0 P% Q! Q- R' C$ Y' t+ }
  {" R1 Z' k, l3 R7 T2 O& Q2 G# w
  int x00,y00,x0,y0,i,d;# ]/ z, v$ o6 `3 c8 x
  if((y2-y1)>(x2-x1)){! P- N2 o! u2 B/ C6 x- Q
  d=(x2-x1)/2;
1 B9 S# n" w- Z9 ~; u% Z0 K  x0=(x1+x2)/2;/ \/ J& W" S6 e) \$ [
  y0=y1+d;
7 o- o  T. n$ C* x- h  y00=y2-d;7 r( ~# g# V- B# g$ @" D
  for(i=0;i<(d+1);i++)
2 v/ H4 Y# E% T& t! S4 N  recls((x0-i),(x00+i),(y0-i),(y00+i));. Y$ a/ ~8 k2 M/ p9 c4 k  _
  delay(10);
1 k  f: [5 q: K) d! h  S: S& Q  }) n  |! ?5 [7 Y1 O
  else{
7 U# l) f3 {1 \1 j  d=(y2-y1)/2;; B8 N$ n2 [9 k  Q# y
  y0=(y1+y2)/2;
5 s) B$ A/ U( u/ m2 I+ |  x0=x1+d;4 P6 o! U0 D7 r
  x00=x2-d;
% z% T# X9 w6 Y* M; e  for(i=0;i<d+1;i++)( E- u( F: F$ b, o# h9 a7 {
  recls(x0-i,x00+i,y0-i,y00+i);& N# B% ]7 g4 v( L
  delay(10);
9 N. \. Z8 h  p- f" q$ D  }
5 D3 G+ h( n+ O* v7 a! G6 G  }
+ w- H0 l& S2 A: p4 M3 [. \) V" K( k$ ^- ?2 O/ Y  M  k) ]0 E
  /************* clear rectangle side(矩形边清屏)***********************/6 L, e% `" X, b6 Z3 \

. j3 m( K; x7 f: ]0 T/ M4 L  void recls(int x1,int x2,int y1,int y2)
: U! n! c3 U! S/ N/ _# W7 r% a  {
$ w/ @4 y+ `, H- c* g1 ^  int i,j;" n* U3 J" {# x' Z7 Z' F
  for(i=y1;i<y2;i++){7 ^6 v$ e' g$ V) o! {7 E
    goto_xy(x1,i);
! h% J+ U: k7 S  putchar(' ');
1 r9 I! d5 O* u! }1 x9 n  goto_xy(x2,i);" f2 k  u1 r0 N& |" W5 O' |
  putchar(' ');4 A1 ~$ D+ U6 D' a
  delay(10);
: q% ^6 \- G0 l# k, q# ^  }. Z9 F: M4 ]0 H: V3 |' _: G
  for(j=x1;j<x2;j++){" {/ x8 B5 Q2 |' t) i' \9 c
  goto_xy(i,y1);) S% H' d& H4 X) p# q
  putchar(' ');% _1 a0 O: l% x' h
  goto_xy(j,y2);9 ~; E  q4 Q' ^
  putchar(' ');
/ @' h# }7 b1 q- D8 c  delay(10);
% n( _1 }! T# [. p  }
+ f8 ]! u6 s1 J! K; K. @3 W0 j: g. |  }
3 ?! U/ G1 ?0 @# r2 N0 X: X  /******************open screen clear(开屏式清屏)*********************/1 Q- S) d& q/ D: \+ M
: ~# y7 w) a. U
  void kcls(int x1,int x2,int y1,int y2)
) f! X  G3 j+ g3 U  {  ~0 L2 Z9 L: I! @
  int t,s,i,j;, D; ^! T9 |" M# a
  t=s=(y1+y2)/2;9 t, _+ X% T( G) |, V- a, j7 ]
  for(;t<=y2;t++,s--)
$ E1 p3 P- B! @4 a3 B/ Y6 o  for(j=x1;j<x2;j++){
% r3 S- s: q: b% k5 ^" m( j  goto_xy(j,t);
: R* s  D& f8 T  putchar(' ');
5 s. k5 h. O. q. v& P. J0 u  goto_xy(j,s);  |+ U5 J0 }8 W% x
  putchar(' ');
* n( w- V' T. c' K  S  M- f3 l  delay(10);
/ E' K. J8 b0 M9 q" P( S  }
* C4 k/ M. ]' U# E: x; _  }
4 [2 S4 H5 ^) U  P  /*****************close screen clear*****闭幕式清屏*******************/
6 h8 n: C$ ?, L0 F* y
! Q0 \" z3 E; ?3 A  void bcls(int x1,int x2,int y1,int y2)9 R" D0 {( T; ?  R" {
  {( J$ H! ]' ~8 P7 G" z
  int t,s,j;0 l: u8 R, w- t/ J3 r  N6 t
  t=y1;9 @: g% G& d& g6 E! v$ C
  s=y2;9 F7 l1 E9 A& g- m; w% _! Y& J
  for(t=y1;t<(y1+y2)/2;t++,s--): d; P) t4 A& P
  for(j=x1;j<x2;j++){
  K9 ~0 o9 G2 Y8 R* e, X: y  goto_xy(j,t);
7 }5 l5 ~9 P; d7 L& Y  putchar(' ');4 P: b, U: h5 y, F1 C
  goto_xy(j,s);
/ o# p4 {) b9 O" C1 J2 v& e) `  putchar(' ');
: ~  a6 I1 P& d! M0 I: N  delay(10);
$ i: ~8 E' E5 X/ @/ H' C5 c2 T, L  }
  P; I6 ~% ?5 g. [9 L4 A  }
+ V3 v# @: F/ m) E, `/ p7 G  /******************bottom screen clear(自下清屏)********************/
+ _$ q3 [- J& B) ~+ R5 Q0 A8 c; @/ J  @0 X
  void dcls(int x1,int x2,int y1,int y2)
0 o' ~$ q8 Q& H2 E2 e$ H0 g. M2 Y! U  {
! p. Q2 Q1 K  A% o2 m: A  int t,s,j,i;7 f  d: i1 I% M6 K9 L, v: Y. Z
  t=s=(y1+y2)/2;. C* u: j" x$ o
  for(j=x2;j>x1;j--)
7 C' R" F4 X2 S3 ~; C  for(i=y1;i<y2;i++){
" X, p. n; ~; z+ O  goto_xy(j,i);
5 y+ n* R% x' f% f5 w( ]  putchar(' ');2 x& V3 {# n, y1 l2 J
  delay(10);
) N4 _1 g  z- i$ }  T2 y  }
+ D* ]0 ^3 G  g8 M& z& i9 ]8 j, h. N  }
! e: G8 @' K& S) C- s- {- ?  /******************设置光标子函数******************/
5 v+ V7 L6 n5 y* y" X4 o; r2 V7 d  J- S0 m
  void goto_xy(int x,int y)
; Z* s. g( Y9 A6 m# K& M- V  {
" A# o2 i( A' u+ m  union REGS r;
1 d, K/ x0 L( K/ @; l  r.h.ah=2;
2 ]& }( T5 l! D% w; B' ~  r.h.dl=y;
6 \* D* k" {, S" ~5 K& o! _  r.h.dh=x;) S, k! ~# Z( E9 ]; Y9 k1 x- U; z
  r.h.bh=0;+ d! b8 v( d/ A" S( |$ |- v5 j' B* n
  int86(0x10,&r,&r);
) `1 H) d) Y9 x' C  }! i+ i2 R* Z4 j4 y7 Y* Y
4 V1 _& A) G/ I6 V
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
& H; N( [$ `$ b4 g" q' w8 P* p' B0 N
  void puta(void)# i0 ^; ~1 V' L0 j- t2 O) A
  {
3 M0 s- G8 U6 q3 Y! L, i% x: |  int i,j;
1 M" v) I( c: O  for(i=0;i<24;i++){! n, r8 k* I8 W1 _+ J9 t5 t2 J3 h
  for(j=0;j<79;j++){( I9 k0 f/ p' j# w
  goto_xy(i,j);
) `4 R  Y# q5 @  printf("a");
2 t6 |& {; M; T6 R  }
/ K2 t: n/ |& z3 V- m  }8 N+ g; }3 h- G! K6 n; c
  }

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