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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏," F& M5 ]' R! n/ r7 @) q* |& T9 h! Z
9 z+ s; B, Z2 y
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里/ B9 T3 F# |& u+ M, b
4 u( c$ u6 A$ m! H  \/ I
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
) F0 Q& g3 Z! y! m+ ?  子函数及演示程序:
% A/ t# l9 F* c- P5 `' x  K( j+ c4 A3 l
  #include<stdio.h>
6 }, a2 C7 _& M$ a  #include<dos.h>
$ ~/ N0 k  C/ z) d; R! I  #include<conio.h>
6 n: x. U  s( U. P/ R
$ s" i- _" Z  i- |6 r; ]  void goto_xy(int x,int y);
9 V  {0 l$ a" q4 z5 G5 E. w  void dcls(int x1,int x2,int y1,int y2);
$ S5 I9 r! |( b  void bcls(int x1,int x2,int y1,int y2);8 r# H4 j+ i, V4 B
  void kcls(int x1,int x2,int y1,int y2);3 i, C- W# r0 h4 r3 O) M3 A
  void recls(int x1,int x2,int y1,int y2);# z8 ?8 b; t* J8 z$ `
  void zcls(int x1,int x2,int y1,int y2);
/ Z% c4 k) M! c8 F$ Z  void puta(void);, B0 k. e* l/ Q

! j7 O) B. x' F! N" M+ n" i9 ~; z5 Y$ T
  /*--------------演示程序---------------------*/1 U* Z! J6 n/ w+ W7 r! D) l* _
  main()
; o+ F3 Z& M6 W  {" f9 Q, ]3 y  e
  puta();  F, }0 g8 ^1 H5 I' V% `: U
  getch();1 W: V+ y8 v! W. C; A" R8 }
  dcls(0,4,0,79);0 v% x* t9 V! T4 Z
  getch();, ], O! f) ~9 c( p" J1 \
  puta();* G8 F2 B4 h; s( }
  getch();- ^6 E  r" p1 d  ?1 [! w3 t
  bcls(0,25,0,79);
+ F& _' {5 o0 D2 U* w  getch();  a) D. P* Z) ?2 J* g& Q% V4 r
  puta();
. V- J7 s6 d! L3 m% y6 `% H" |  getch();
3 b  R/ o4 q% N! e3 r+ v$ c  zcls(0,25,0,79);
# x9 A# t4 ^3 U  j. P  getch();. G3 B+ G+ m  s# v* u
  }  R1 U5 r2 {9 K$ d$ p7 X: q% X
  /*********center clear screen(中心清屏)***********/
  A2 @# T3 X( X  void zcls(int x1,int x2,int y1,int y2)
. i$ ~: L" x& k  {
  c/ G% }; F) }; d! d* [" k5 b  int x00,y00,x0,y0,i,d;
# r. M' M$ o1 h% h8 s7 J  if((y2-y1)>(x2-x1)){
! @! ~0 N3 K2 ?' Y5 k8 P  d=(x2-x1)/2;
& E* E. r( a3 y* d, ]  x0=(x1+x2)/2;$ q2 [2 _) U9 s) L. n
  y0=y1+d;/ T/ n% \1 F8 ]0 A0 @5 A
  y00=y2-d;2 L- m% ]  ^: a/ \( B5 e6 M1 C2 L
  for(i=0;i<(d+1);i++)
" {! y& [2 c& _( p6 V, }: s  recls((x0-i),(x00+i),(y0-i),(y00+i));
. l3 T1 H5 q# G3 n  delay(10);( S! j( z  [; t- R  ^3 c
  }
4 W- }# Z9 U( @& z  else{
* Z6 B/ i$ @1 E0 j* l  d=(y2-y1)/2;
7 ^9 P. S& V3 j$ n0 z  y0=(y1+y2)/2;
! `4 ?! M/ W9 H/ `! {  x0=x1+d;
; A) t% d: z2 m' ?8 n7 D  x00=x2-d;+ S  `1 ]9 m4 T0 @! H+ P5 x" {
  for(i=0;i<d+1;i++), R% |6 s3 c3 \2 [+ s
  recls(x0-i,x00+i,y0-i,y00+i);6 i- M6 \& g4 u8 y& b( [% o1 Q
  delay(10);) C1 E( n. P' R) i* c- N4 N2 u9 n% }
  }
0 O6 `) h) B" Y5 x. h$ K  }, S! m" V8 w* J* e( C* _! \+ `# w

! ^3 G( N# Q  x1 e/ R$ X  /************* clear rectangle side(矩形边清屏)***********************/5 W  O) J% U/ ^( o6 w

" Z$ @) v) }/ s" ~+ N  \  void recls(int x1,int x2,int y1,int y2)
# R. m/ ~: m5 c) u( v/ p1 v. a  {  c9 l6 l: s" a
  int i,j;
8 z' y' w  v$ m+ `& U( L8 N  for(i=y1;i<y2;i++){6 N: Q2 u0 ~! f" o  M
    goto_xy(x1,i);" C% \# \5 I, I$ {9 j, M, u3 N
  putchar(' ');
: `3 z( D0 R. [. j: A9 ~2 W, s  goto_xy(x2,i);
) D0 D) ]' _, E& J- d/ Y9 O* N  putchar(' ');9 z; k, Z) L' j& {1 H8 W6 c) z& }
  delay(10);0 J. l, G8 G. W/ c6 a& n
  }: R' F' E; o9 t. q; a
  for(j=x1;j<x2;j++){+ V/ Q9 B8 g* p0 i2 \: e
  goto_xy(i,y1);
* @1 u3 {6 A5 k% e  putchar(' ');
& b6 Q  c& }- R5 l  goto_xy(j,y2);
3 z) P+ I' ]# L. G$ x  putchar(' ');
7 `+ x3 B9 S/ O1 \/ ~6 Q  delay(10);
3 u+ N+ L5 d! q7 A3 y  }" r% A+ D: Y7 r
  }+ \+ L) r0 Q+ @- k6 Z- [
  /******************open screen clear(开屏式清屏)*********************/$ `+ l& v/ H, ]& F! X" v- p
' U- h# O3 d! w$ b& m" F. j
  void kcls(int x1,int x2,int y1,int y2)
/ @  R: K* D  ^) p  {
( U1 ?, h7 y9 ]  k! B! U# T  int t,s,i,j;
5 _) o1 k! ?# {# i! a( D  S  t=s=(y1+y2)/2;
: E- C! P' p5 F' _  m, u% ]6 K  for(;t<=y2;t++,s--)$ i/ t3 w: k0 N
  for(j=x1;j<x2;j++){
$ q0 i, P/ Q+ U; m1 {  goto_xy(j,t);8 P7 D! f# a- m4 T
  putchar(' ');7 R5 n9 r% u& d. n8 J' h3 F8 |- I2 c, c
  goto_xy(j,s);
9 r; A# V0 R5 ]7 T$ v  a3 I  putchar(' ');, e% w1 \6 |7 Y/ [! n: j
  delay(10);
9 y# P7 W4 e2 I- N- a% O* n* h  }
+ s9 {' j' R1 K5 z1 X  D7 B7 l  }
1 a' I, ?6 _1 ]7 n+ z2 X  /*****************close screen clear*****闭幕式清屏*******************/
) p; r: ~" ~8 B# m5 [# g* S& W  o+ t  Q; A/ A# L
  void bcls(int x1,int x2,int y1,int y2); Z3 n' F# M. \8 J
  {
% p: k' @' k  m  f- I  int t,s,j;0 }8 F$ }/ p& p, }7 n
  t=y1;
% C( o+ A$ ~5 S. ]# e. y1 |  s=y2;$ i. y8 S$ i* @/ U
  for(t=y1;t<(y1+y2)/2;t++,s--)
; I  L' X/ z+ v  for(j=x1;j<x2;j++){
, H" Y* _) e. d2 a  goto_xy(j,t);
5 T" D& {, D2 x; N2 i; L  putchar(' ');- G5 W$ [5 X' O- F7 G+ `# e
  goto_xy(j,s);9 C, ?0 K/ N' B) q! d
  putchar(' ');5 n% o) N% a4 D8 a4 A  @
  delay(10);5 z: @# `, p' o! w* H& Z2 I* r
  }! P$ O, |( [/ D, D( ]+ x
  }
% u. t2 V" `/ i, f# R  B  /******************bottom screen clear(自下清屏)********************/
' i4 t4 l) w6 X! y3 o1 d2 m
6 X: ]+ F0 v$ @  void dcls(int x1,int x2,int y1,int y2)0 C, Z7 P& U3 G( e- y: P8 l$ e7 V
  {
; h, X$ y) J% _6 q8 \) \  int t,s,j,i;
  C. L3 w" c3 P% h  t=s=(y1+y2)/2;
$ s& x6 }% F1 a$ T  for(j=x2;j>x1;j--)
6 v+ G& i  I0 R: `3 g  for(i=y1;i<y2;i++){
4 K% W/ B2 H3 `' A  goto_xy(j,i);0 e/ u- b7 D5 E! B0 x; {7 H8 n$ M
  putchar(' ');
% ~+ d9 |9 o3 y3 E. [0 l3 I/ `  delay(10);
( K4 u+ M! {0 L9 h3 m  }
* z5 l2 ]& V' L# }$ J* h5 A( s  }5 g  \" [  ]8 R' j$ r5 R5 x
  /******************设置光标子函数******************/5 x! ?8 P  T+ w5 z2 y+ J

9 {' {9 r# X% q! {+ o0 g# m6 C% O4 I  void goto_xy(int x,int y)+ Z5 c- c* M2 d
  {5 o; H% _9 H0 z
  union REGS r;) d$ O  C/ A! o" h* N
  r.h.ah=2;0 [- u0 l3 F  k1 a$ X; v0 R- k
  r.h.dl=y;
7 L( _( M- m: e+ {  r.h.dh=x;
. [: X9 b1 _' W* ]% b; s$ Q  r.h.bh=0;
+ B  l# R% ?3 I  w8 T" s! j. B  int86(0x10,&r,&r);; i' @: `1 b" o  M; ]
  }9 H+ t# ^. [( H9 q: U+ g  o% @
! `# `- ~  c0 Z# r* y7 b
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/! ^, U( g+ o/ X
" y: |3 t! q' e; |# `% |' i
  void puta(void). M2 D5 v  b5 O
  {
. ~$ m5 H# L3 x  int i,j;2 q, G1 d; b7 P& l5 F' E, Y/ o
  for(i=0;i<24;i++){
9 A0 L& Q! ?3 {$ i3 B  for(j=0;j<79;j++){
6 `- S* b* N$ E  goto_xy(i,j);, _. ^; e. O1 p# T+ s7 n% _2 x
  printf("a");$ O2 H3 v6 X% U" Q2 e
  }$ R; j4 Y9 q2 w. I) }3 Z% ~5 x2 p
  }9 [' i6 B( H* ]; _7 o3 |; ]; u
  }

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