返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
5 K- I! C- ^/ H) u) y
9 A+ S! Y7 A$ g6 x  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里& \/ s& ?& U6 v! O( q) B3 A

5 x9 v( `5 a! S  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
" }' `8 A- g7 N1 p  子函数及演示程序:: {3 |+ u; @. n+ d# k7 w: e& E
1 a4 A1 t' T4 @
  #include<stdio.h>1 ?4 M( M% o7 f& i0 G$ ?0 R
  #include<dos.h>5 `# m/ O. N5 g/ `4 W& V9 F+ p* n
  #include<conio.h>
# R1 V$ f! j0 {) d+ T( a
+ H* \, W' Q4 n7 k, W8 d7 D  void goto_xy(int x,int y);
& a' X; v( r- r- t; X  void dcls(int x1,int x2,int y1,int y2);3 y6 F7 {' t- @  i
  void bcls(int x1,int x2,int y1,int y2);7 R4 i+ q4 ^( L! e- m0 Z
  void kcls(int x1,int x2,int y1,int y2);# I$ _6 }8 [+ p) c/ j% j1 @
  void recls(int x1,int x2,int y1,int y2);8 G3 H( h* C1 m2 l
  void zcls(int x1,int x2,int y1,int y2);8 }8 H/ q0 E7 g8 \
  void puta(void);0 ]* i1 Q: g0 @; Z+ e  _3 `
) x0 X7 |7 m, y. C

, f/ f, v: M3 n4 R5 T! C+ G- q  /*--------------演示程序---------------------*/
9 V# W* ^- R* H: D, p( W: k( {  main()
5 j% `0 U" U1 G& F. E  {
$ B4 Z, K+ [; M' V" J( \6 t  puta();
3 I  h6 a: }: c$ S* b# ^  @9 t  getch();
# g! `  u& H* j9 N& w% I  dcls(0,4,0,79);  y6 M5 w' |" j
  getch();4 _- [  C; @  [- L! u) `$ A
  puta();, ^8 y3 E4 d9 v, D- H8 f$ }
  getch();$ X5 Q4 c' {) y  n  R% W: M
  bcls(0,25,0,79);4 z0 m3 U, W: n& Q% F  f
  getch();
& r2 e  b- t2 Y' n  puta();% }+ @( Z) n0 M2 r( @
  getch();1 A3 o( o8 P0 s% x& `$ p
  zcls(0,25,0,79);- o1 H9 m9 D( ^
  getch();7 e$ _4 u: u5 {7 x" ?
  }
2 D7 m7 r& o4 p  /*********center clear screen(中心清屏)***********/
, U3 X: `9 v$ \4 e  void zcls(int x1,int x2,int y1,int y2)
& `4 b, c0 ^! @( X  {: _% x$ q- f( ?+ d
  int x00,y00,x0,y0,i,d;3 L0 f, `; C7 v8 r/ ~$ J& p. v
  if((y2-y1)>(x2-x1)){  v6 O' X* a9 T! _+ G) V
  d=(x2-x1)/2;6 i" I6 j& E, @; `5 x$ u5 m
  x0=(x1+x2)/2;
. X9 f. N5 h9 z7 q# u$ Q  \  y0=y1+d;& Q6 b) j4 G2 X+ L- b7 ?& i
  y00=y2-d;
% X4 t  P+ l9 u$ ^8 A* X  for(i=0;i<(d+1);i++)+ L, t0 S/ l. m2 f6 M
  recls((x0-i),(x00+i),(y0-i),(y00+i));
3 ?% v6 }' O! j, x+ S/ i  delay(10);
' ^. G5 f# v6 b) e  }
+ }2 J% h. M! o$ [# ^  a5 k  else{
: Y( Q* f" d. T  d=(y2-y1)/2;& O) N' N* ]4 y
  y0=(y1+y2)/2;
  |! z2 K0 k9 P8 t  x0=x1+d;
% B3 X3 G# w- c$ ]& O& w  x00=x2-d;& z$ c3 }: J/ F, V0 e
  for(i=0;i<d+1;i++)
% A$ R; L8 j1 t; M: Z  recls(x0-i,x00+i,y0-i,y00+i);
& ~4 M; d& k  a5 L  delay(10);
5 \% c# o" H" C' I! T6 a! P8 [4 i  }6 W; q: Q( E- X3 W& a: h
  }' O7 _5 F/ o* ]) `7 ]6 [8 Q: i
5 d3 H: G/ R# C0 a  E1 y
  /************* clear rectangle side(矩形边清屏)***********************/
2 V5 @. s# q/ L* Q" c' }
, U8 a% m. o5 L6 W+ ^! t8 d  void recls(int x1,int x2,int y1,int y2)7 l4 ]* O8 ^; n/ y7 k! {
  {
; m+ `6 K# u  ~. Y9 C. b9 c/ a  int i,j;4 c5 Y6 S/ l5 S8 J/ ?
  for(i=y1;i<y2;i++){+ q+ Y* s8 N% H( P5 }" M
    goto_xy(x1,i);
" f+ {1 S# O) J/ N9 A. Z% z5 H+ N1 z  putchar(' ');
5 U5 z& c# F: f/ ?  goto_xy(x2,i);- Y9 F8 e/ e; s5 V$ V. R! Y
  putchar(' ');' x) Q2 v8 h9 l+ ?, \4 I% k2 T
  delay(10);- Y' q: H" ?$ @% \5 V3 k5 H
  }5 X) E3 {2 K6 ]5 K- I/ z* j  q
  for(j=x1;j<x2;j++){7 {4 Q0 j7 j# \6 G3 f
  goto_xy(i,y1);
: [5 R$ ]! A$ {7 |7 [  L0 W  putchar(' ');
# v. X# \2 p2 ^; `1 p* C$ P  goto_xy(j,y2);
& a; F0 ]& E8 O& u) F' x  putchar(' ');
2 s8 L) X. X3 U. |# F# i7 I  delay(10);
" e) o& K3 H; i: _% F8 C  }
1 z8 u1 i3 t: Y: j' W9 a  }3 f4 F; }3 H- N6 x0 W
  /******************open screen clear(开屏式清屏)*********************/
% g+ \0 A4 L- ?# O9 w  X- b: k. a9 p8 j/ h
  void kcls(int x1,int x2,int y1,int y2)6 L& P* u( v+ x# v: a: ]% O3 X
  {& ^9 v7 C3 Z' R0 p  s
  int t,s,i,j;! R3 l9 V7 Q; Y8 s$ t  i( ?& X
  t=s=(y1+y2)/2;
: n9 O8 G8 {) [4 S  for(;t<=y2;t++,s--)/ c. H9 p2 h2 u  D
  for(j=x1;j<x2;j++){
! J( H1 |. b; I: B! w# x1 ]  goto_xy(j,t);' h# t/ j8 S+ k3 z* z
  putchar(' ');# T+ O; `. r/ n* t
  goto_xy(j,s);# R2 M9 t+ E1 b( j; v
  putchar(' ');
! N- ?3 |/ o6 u2 x" W7 ]- }  delay(10);6 C' S$ `" T& P8 S( R
  }
. z! T6 ?6 L: K' j  }
7 f* J3 I  o% O' {# w0 e3 q  /*****************close screen clear*****闭幕式清屏*******************/
& a( T8 f) ^5 c% ?) |4 |5 i* Z, D9 M7 N
  void bcls(int x1,int x2,int y1,int y2)
: g& Z7 ^4 Z( _# C6 `$ Q; \3 \  {' |7 l3 t/ m% B0 {; _- D" ~' M
  int t,s,j;
0 X( x) O6 Z1 j; t) y  t=y1;
. C+ A# e2 B; S) d0 I1 d  s=y2;- t8 a4 f6 a! G' H% K' ~
  for(t=y1;t<(y1+y2)/2;t++,s--)
* l4 G) q7 B& r% e/ ~. @/ d  for(j=x1;j<x2;j++){  o3 E/ ~. Y# t5 ?/ d' p
  goto_xy(j,t);
% E. l$ q, X( N/ j" j% K! q, W  putchar(' ');
; G* ~( @1 x/ r+ G3 o8 A  goto_xy(j,s);
( o# u1 N+ g3 G- s/ r! U) Q/ B  putchar(' ');6 `1 ?) Q& O- z; b  {1 `- C* K6 O
  delay(10);
' S1 a6 |+ k5 [( ~" j  }& F9 p9 |* r" ]3 J4 t# U/ W0 k1 O
  }
" M4 o5 p' ~3 D6 y7 U, B  /******************bottom screen clear(自下清屏)********************// X5 [  {- o9 I0 s; X. k2 x
& [0 n3 G7 Q" x7 ?5 P
  void dcls(int x1,int x2,int y1,int y2)! i7 q7 w; u" L( x5 B
  {
& L3 c) r: P/ |8 c1 Y- r  k  int t,s,j,i;
6 {/ ~8 u1 b( H" u: N  t=s=(y1+y2)/2;
0 x  F/ m- G" C# \4 c  for(j=x2;j>x1;j--). e3 B- j3 @) A. D$ U3 D: X
  for(i=y1;i<y2;i++){
( z9 c5 X- w. i$ |& Y& F# r  goto_xy(j,i);; D8 h. D) Z- g/ g
  putchar(' ');
0 o, @7 N- e8 @; N  delay(10);5 J; ^" s, ^7 n7 p- s, ~
  }4 N0 p$ B" |4 J3 |' L
  }
! O5 ^2 S( V! ?& @  /******************设置光标子函数******************/$ q3 Z9 a( q$ q+ F2 }' G# P/ o

; c: Y3 v; }+ {# D, b/ k6 ^  void goto_xy(int x,int y)
& j. h# }- B4 z- J  {& _7 N1 g# i& n" D: r4 h
  union REGS r;
; `& _' L6 @: X4 p, v1 f  r.h.ah=2;
$ W8 X& v; R  C  C; w  r.h.dl=y;
6 [$ Q# Y3 P0 E7 G" ^3 A  r.h.dh=x;
9 Y: E. |; O9 o+ {/ E- P0 T  r.h.bh=0;
) G* F5 g( G  A$ u& W  int86(0x10,&r,&r);; O) K2 {; y2 T7 c0 z; O0 \! b: k
  }
; ?6 n# f8 a) x  X1 `- ^
8 N. X/ ^6 E& `. A  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
2 _; d. ~* q+ C, B' I( h4 ?; s, @2 Q
8 d1 A; {; l' O- ^. z" `: d6 v  void puta(void)
# X& o4 r2 y. U( T0 V  {
: V  V; t- \& }; F0 Z6 A. W  int i,j;/ Z$ l4 G, u6 X  f
  for(i=0;i<24;i++){5 a5 D- V" w4 W- H6 R' _
  for(j=0;j<79;j++){
/ E9 d5 D. \" J  goto_xy(i,j);4 M; X& u; O& s- X/ A4 G% `
  printf("a");8 `) |  E' Q) \4 e* x  [* g# R
  }$ t) j7 Z( m, C+ _! @1 c
  }
" `4 e/ T6 O: \  K& C" t& ~. z0 _  }

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