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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
" E, j6 }: `) ?$ ^& a' G! j9 x
( d* ]5 S' }& S1 e  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
9 P5 n5 j" r! g3 N* \$ e( n  T0 ^2 W( S5 n& ]
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
" J! S: I) n  D$ T/ T  子函数及演示程序:6 z, I* F, `$ N% A. {5 \* o0 q1 x5 H
( |+ \+ \& K- @
  #include<stdio.h>
% F% d2 q  I3 {2 g  #include<dos.h>' W, @5 f$ T# M# |! y1 Q
  #include<conio.h>
, S- n8 m* c, X1 s0 s6 g; W( j9 Q1 y5 G" }/ Q
  void goto_xy(int x,int y);; h3 E  |' _' G
  void dcls(int x1,int x2,int y1,int y2);6 a$ `+ U) u2 N  ^+ l0 }
  void bcls(int x1,int x2,int y1,int y2);: D* k/ j# v7 }8 z) G. ]4 l. W
  void kcls(int x1,int x2,int y1,int y2);2 q/ x9 @, ?7 ~* q$ D! t: x
  void recls(int x1,int x2,int y1,int y2);, b7 m6 i' {0 C  d3 P% F- q
  void zcls(int x1,int x2,int y1,int y2);
- Z3 X5 {& c3 ^  void puta(void);
) H* v( @7 j4 e$ B( @3 |
* m: B# l+ @- X7 P. t9 O# \7 M! N8 \) R$ G" D' A/ L
  /*--------------演示程序---------------------*/
* K! T8 o4 D9 x, U- D+ T7 `2 _  main()
0 w* i5 \8 ~3 _. H) ~. B  {* l- Z& O) X! P. j/ b+ \- o
  puta();
7 D0 J4 z# ~6 s4 U! _  getch();
* ?0 S6 `7 X9 x* T5 C4 J3 g1 J: C' M  dcls(0,4,0,79);  Q- Q9 l9 B9 t. N  K
  getch();5 d: o6 p! [/ _3 U
  puta();
4 r: _) H( \/ l+ ]3 O0 w  getch();
7 U; M1 D" E$ R2 C" l  bcls(0,25,0,79);
. N3 p, @2 G* z7 L) [+ D+ _: E  getch();
. }; Y) O% @0 `6 q0 \  puta();
& ]: b# |$ C* v  getch();
$ @8 U) k' ^( @& E0 H  zcls(0,25,0,79);& l$ N$ y# k- Q* o0 d9 l+ z
  getch();' z( O$ s; Y! Y' t0 o" w. @+ U3 G
  }$ ]1 P! P, ~% t) n2 G0 a" h8 F3 |
  /*********center clear screen(中心清屏)***********/! N. V; q5 o3 v4 X3 I5 M) H; Q) X
  void zcls(int x1,int x2,int y1,int y2)
/ U" ~0 c& M9 O& J4 y  {
# {; I% h9 d8 k- Y+ J  int x00,y00,x0,y0,i,d;4 t; [6 {, ?0 A5 J+ ?
  if((y2-y1)>(x2-x1)){5 D' O. E+ ?/ a7 q
  d=(x2-x1)/2;, z. t. Q' O1 e( V9 G+ y( E
  x0=(x1+x2)/2;
/ n% R# f. M) v% i  y0=y1+d;, q- r1 G' {, a# d7 _" Q
  y00=y2-d;0 Y+ _. k: N9 f7 S
  for(i=0;i<(d+1);i++)
% e5 ~* x, |" \9 I) t3 F! x  recls((x0-i),(x00+i),(y0-i),(y00+i));$ m* Y; I, r1 L9 d
  delay(10);
+ k0 G' Z4 H% b% @/ M3 |, r  }
9 E  u- S8 H$ {! w% ~, ~4 j3 `5 T  else{
  x: _3 F0 @# o1 m  d=(y2-y1)/2;, I  t* H- B& `5 t: L
  y0=(y1+y2)/2;9 [; H/ m( I1 A6 p# t
  x0=x1+d;
$ ]9 J, q" K- M1 c) s8 j+ p  x00=x2-d;
- z6 Y* G* E5 `- X8 [  for(i=0;i<d+1;i++)( p  r& [- s( k% O; Z! j' k# B* B* b' i
  recls(x0-i,x00+i,y0-i,y00+i);% ^4 M9 P6 q; ^
  delay(10);+ M; h" Y/ A6 n3 j
  }
8 N1 c2 g) w0 e8 z3 q  }% y9 N' a. B6 ?+ R9 e2 t6 E: b. V
$ [4 Q9 l5 d1 T& ?& d5 c2 j/ o5 M
  /************* clear rectangle side(矩形边清屏)***********************/
; h% E+ T/ ~8 W! w( \+ O% J" q& A5 x7 [/ j* \3 w
  void recls(int x1,int x2,int y1,int y2)
8 v3 K$ V# Z1 C) \' {, y1 _  {5 {. L" ?; p/ R! J  Y/ e. D
  int i,j;( v4 Y. x( X  n" G0 H) N9 E7 l
  for(i=y1;i<y2;i++){
# K# V( s3 o8 ^  }  w    goto_xy(x1,i);' E( U" C6 X9 Y% h: Q
  putchar(' ');
! h6 l- K" ?& }0 o  goto_xy(x2,i);' b0 j) Y8 u* g7 S- l
  putchar(' ');! U0 i' y& C8 K+ p2 L
  delay(10);
% r. Y6 w/ f& d8 w2 E  }
/ n: @3 D/ b- |$ X  B  for(j=x1;j<x2;j++){
, U/ t" f: q/ `4 u; e6 Y; b7 D! l  goto_xy(i,y1);
) ?6 ]! Y3 Y& S$ ]  putchar(' ');
( L! R: U) }* x8 C' Y  goto_xy(j,y2);* p7 L6 x" p& ]4 ^2 E! u. o6 Z  q
  putchar(' ');
: R2 d7 Q+ f- t4 L. }  delay(10);
& B8 n1 f2 s" n4 g  }5 ~5 ]0 q9 m) b
  }
- v! r! T- V( R% f  /******************open screen clear(开屏式清屏)*********************/
2 S* v- K& X6 M& E2 {
8 {: a( Z8 Y( x3 h9 l5 X  q8 B/ Y  void kcls(int x1,int x2,int y1,int y2)% |' Y% d4 N6 \! a+ V" s% j* Q
  {9 Z4 @% x7 Z; c# U! r& l3 Z
  int t,s,i,j;# d$ L: U2 x! g+ T- ^; ^$ M% r) z
  t=s=(y1+y2)/2;$ D: E5 j' I8 `  ?
  for(;t<=y2;t++,s--)
( E6 u. M  \+ _- M1 k  for(j=x1;j<x2;j++){5 d' a1 A& K0 f3 }  }5 u
  goto_xy(j,t);1 U* j7 M: n- x/ J' S" Z! p1 |
  putchar(' ');: N- b, a" o* x+ ~" Z1 B3 _
  goto_xy(j,s);
' r  ?4 |; k! K$ {# q0 G# w+ p  putchar(' ');
' W) d4 b% {( b3 q# v8 G  delay(10);( U- e% B0 ~" |% M
  }6 ^7 k9 q7 F$ Y& B3 e
  }
6 \7 T" G7 L! [" G  /*****************close screen clear*****闭幕式清屏*******************/1 H" J8 M) j/ i, n- W: f

' n; W5 P$ f- X6 ~( S0 [  void bcls(int x1,int x2,int y1,int y2)3 @+ N* p# B2 O% c; y2 ]' U, F, _3 A
  {
/ }' u& t9 ~- W+ K4 I7 ~' U( {' T) [  int t,s,j;
3 s& V( N. P: j/ ~+ F& j  t=y1;5 v; D$ r8 J3 I6 n/ q6 c
  s=y2;+ d( o2 N0 q* E% q3 }
  for(t=y1;t<(y1+y2)/2;t++,s--)  i% ]" X* G- H* N2 _! _* v
  for(j=x1;j<x2;j++){
# L  g- l& S2 \8 D  goto_xy(j,t);
$ M8 Z- E; R, u/ Z& z# K( p0 s+ F3 |  X  putchar(' ');: [0 R2 n. P8 r
  goto_xy(j,s);
0 |' i5 r0 Q% P- ?  putchar(' ');
+ S: \  l( z* Y  delay(10);
9 A/ W! I# U# i  }7 N" Z, R; M: J0 n
  }
: `5 q& Q' N7 O  /******************bottom screen clear(自下清屏)********************/, V8 s8 J1 u" @% @6 l$ K

! W% y4 G# j2 v# f, ?  void dcls(int x1,int x2,int y1,int y2)
/ d, i/ R9 O; J3 M  {
- [4 j9 @; Q' E5 c  int t,s,j,i;
$ S+ \  M& F3 ]4 }, O3 y  t=s=(y1+y2)/2;
' c2 I8 w2 K" r3 d# m; t" l  for(j=x2;j>x1;j--)
2 t3 l* t0 y( d) q1 O! R% n3 U$ }  for(i=y1;i<y2;i++){
& d$ C0 l# ~, h+ B/ J  goto_xy(j,i);! n2 S3 j& X+ j- [1 Z9 c6 l$ n
  putchar(' ');2 w0 x$ [& p# m; [' X( u7 Q
  delay(10);
' }1 l% v5 ~& E2 h* r  }; r* E7 A+ x) Y# _6 V+ y
  }$ i2 N8 s; t  c5 r: J
  /******************设置光标子函数******************/, ~; d+ s8 V# b5 c2 P; e4 N

' \' S7 Z! k# B% z  void goto_xy(int x,int y)+ f" _# a4 q, a- w8 x, G, n; z
  {
9 q8 [. y! H6 E& Y* C9 `  union REGS r;
8 c! Q4 V' E9 r0 q1 K  r.h.ah=2;" t9 o, A+ F4 d) u+ Q* C
  r.h.dl=y;
% Z  V) ]& y& Y7 P) X9 g% M9 {6 L5 H  r.h.dh=x;( ^6 P! P" t1 a6 c
  r.h.bh=0;
" O: n0 H; g: q9 ]5 u  J0 {5 ~  int86(0x10,&r,&r);' y3 c* Q+ i+ N" e, m
  }
8 W8 }6 }7 L+ y9 x, P# m- s, h
9 z6 q' I: N7 v9 }6 H5 a9 {8 @  /**********************在屏幕上打出一连串的a字母用于演示程序******************/# W" A9 ]: d. ~4 g
8 S8 S& h& i! Z% ~. _: a4 c! h
  void puta(void)' z8 O: V& U8 n
  {8 j6 k" o: p/ {( v
  int i,j;& u1 R7 H  t7 i. L* a) n7 V! S! F$ [
  for(i=0;i<24;i++){
( b5 u; d+ A, ^! |6 \/ @7 a; m/ A  for(j=0;j<79;j++){
/ W- U( F8 {- b6 z  goto_xy(i,j);* ]8 h. _3 G& N6 y" F
  printf("a");2 p' J' b1 g' j& X1 T
  }6 t5 z& O' j1 g- N& k' s0 P/ g% v
  }
* O" d1 |' U, v! D0 ^6 r* Z( z; [  }

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